版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章
汇编语言程序设计汇编语言程序的步骤:明确任务,确定算法。绘流程图。根据流程图编写汇编语言程序。上机调试程序。或或起始框执行框判断框终止框连接框图5-1
标准流程图符号5.1
汇编语言程序的上机过程1、源文件的建立和汇编
(1)建立源程序文件(2)汇编源程序文件汇编程序主要功能:·检查源程序中的语法错误并给出出错信息。·产生目标文件,列表文件和对照文件。·展开宏指令。汇编操作过程:设在当前C盘上已经建立了一个扩展名为ASM的源程序文件MYASM,汇编时发出如下命令:C:>MASM
MYASM
↙(或MASM
MYASM.ASM↙)具体的三个输入提示行显示如下:Object
Filename
[MYASM.OBJ]:↙Source
Listing
[NUL.LST]:(可打入源文件名或省略)↙Cross
Reference
[NUL.CRF]:(可打入源文件名或省略)↙汇编程序对源文件进行汇编,若无错误信息则显示如下结果:0
Warning
Errors0
Severe
Errors2.目标文件的链接连接软件LINK的功能:①
找到要连接的所有目标文件;②
确定所有段的地址值;③
确定所有浮动地址和外部符号所对应的存储地址;④
生成.EXE可执行文件。连接软件为LINK.EXE,其过程如下:设源文件MYASM.ASM已经由汇编软件汇编后生成MYASM.OBJ,其连接命令为:C:>LINK
MYASM
或LINKMYASM.OBJ则在屏幕上显示连接软件的版本号和三个输入提示行,三个输入提示行显示如下:Run
File[MYASM.EXE]:List
File
[NUL.MAP]:Libraries
[.LIB]:3.执行文件的调试5.2
顺序结构程序设计开始语句1语句2语句3结束图5-2顺序结构流程例5-1用8086CPU的指令实现Y=(X1+X2)/2的程序设计明确任务,确定算法。绘流程图(图5-3)图5-3例5-1流程图开始取变量X1送AL取变量X2送AL计算X1+X2送AX计算AX/2结果送Y结束(3)根据流程图编写汇编语言程序1
DATASEGMENT2
X1DB?3
X2DB?4
YDW?DATACODE7ENDSSEGMENTASSUME
CS:CODE,
DS:DATA,MAINSTART:10;设置远程调用子程序;将DS:0压入堆栈PROC
FARPUSH
DSMOV
AX,
0PUSH
AXMOV
AX,
DATAMOV
DS,
AXMOV
AL,
X1MOV
BL,
X2ADD
AL,
BLADC
AH,
0SAR
AX,
1MOV
[Y],
AXRETMAIN
ENDPCODE
ENDSEND;为DS设置段值;取变量X1送AL;取变量X2送BL;X1+X2+进位送AX;结果送YSTART例5-2
将一位十六进制数转换成与它相应的ASCⅡ码。(1)明确任务,确定算法。(2)绘流程图(图5-4)图5-4例5-2流程BX←表起始地址开始AL←HEXAL←((BX)+(AL))ASCI←AL结束(3)根据流程图编写汇编语言程序DATATABLEDB
?SEGMENTDB
30H,31H,32H,33H,34H,35H,36H,37HDB
38H,39H,41H,42H,43H,44H,45H,46HHEX
DB
8ASCDATACOSEGENDSSEGMENTASSUME
CS:COSEG,DS:DATABEING:
MOVMOVAX,DATADS,AXASC,ALAH,4CH21HMOV
BX,
OFFSET
TABMOV
AL,HEXXLATMOVMOVINTCOSEG
ENDSENDBEING5.3
分支结构程序设计判定条件S1S2S1判定条件S2Sn(b)(a)图5-5
分支程序的结构形式(a)二分支结构
(b)多分支结构5.3.1
二分支结构例5-3
要求对不足250个的学生成绩进行统计分析,统计出优秀、及格和不及格的人数。(1)明确任务,确定算法。(2)绘流程图结束开始SI←BUF首址取总学生数CH←[SI]BX←0,
SI←SI+1取学生成绩AH←[SI]AH<90?AH<60H?
BH←BH+1
BL←BL+1SI←SI+1CH←CH-1SI←存储区首址[SI]←BH[SI+1]←BL[SI+2]←CLCH=0?YYYNNNCL←CL+1图5-6例5-3流程图(3)根据流程图编写汇编语言程序DATABUFSEGMENTDBDBNN
DUP(?)NUMDATACODEMAINDB 3
DUP(?)ENDSSEGMENTPROCASSUMEFARCS:CODE,DS:DATADSAX,AXAXAX,DATADS,AXSI,OFFSET
BUFSTART:
PUSHSUBPUSHMOVMOVMOVMOVMOVCH,[SI]CL,0;学生个数N→CH;CL存不及格人数MOVBX,0;BH存优秀人数,BL存及格人数INCSILP:MOVAH,
[SI];取学生成绩CMPAH,90JBBLOW90;小于90转INCBH;优秀人数加1JMPABOV60BLOW90:CMPAH,60JBBLOW60;小于60转ABOV60:INCBL ;及格人数加1JMPNEXTBLOW60:INCCL;不及格人数加1NEXT:INC
SI;数组地址加1DECCH;计数减1JNZLPMOVSI,OFFSET
NUMMOV[SI],BH;优秀人数送入内存单元MOV[SI+1],BL;及格人数送入内存单元MOV[SI+2],CL ;不及格人数送入内存单元RETMAINENDPCODEENDSENDSTART5.3.2
多分支结构1.条件逐次测试法例5-4编程实现使键盘上A、B、C、D六个字母键成为4条输入命令,使之分别对应不同算法的控制子程序。明确任务,确定算法。绘流程图略(3)汇编语言程序MOVAH,lINT21H;1号功能调用,键盘接收CMPAL,‘A’;键值为A,转PA子程序JEPACMPAL,‘B’;键值为B,转PB子程序JEPBCMPAL,‘C’;键值为C,转PC子程序JEPCCMPAL,‘D’;键值为D,转PD子程序JEPDHLTPA:
…PB:
…PC:
…PD:
…;键值非A、B、C、D,停止;A号控制子程序入口;B号控制子程序入口;C号控制子程序入口;D号控制子程序入口2.列表跳转法例5-5
利用表内地址跳转法来实现例5.4的要求(1)明确任务,确定算法。数据段┇┇
PA
PB
┇PDBASEBASE+2┇┇操作码┇代码段┇PA
操作码PBPA为首址的程序段PB为首址的程序段图5-7地址跳转表(2)绘流程图(图5-8)Y开始AL←键盘输入字符AL<41H?NAL>44H?NAL←AL-41HBX←取地址跳转表首址AH←0AL←计算表内地址计算表地址BX←BX+AX根据地址转向相应分支结束Y图5-8例5-5流程图(3)根据流程图编写汇编语言程序ADATABASEKEYADATAASTACKDWTOPASTACKACODESEGMENTDW
PA,PB,PC,PDDB
?ENDSSEGMENTPARA
STACK
‘STACK’100
DUP(?)LABELENDSSEGMENTWORDASSUME
CS:ACODE,DS:ADATA,SS:ASTACKSTART:MOVMOVMOVAX,ASTACKSS,AXSP,
OFFSET
TOPMOV
AX,
ADATAMOV
DS,
AXLOP:
MOV
AH,1INT
21HCMP
AL,41HJB
LOPCMP
AL,44HJA
LOPSUB
AL,41HMOV
BX,OFFSET
BASEMOV
AH,0ADD
AL,ALADD
BX,AXJMP
WORD
PTR[BX]ACODE
ENDSENDSTART5.4
循环结构程序设计5.4.1
循环程序的组成与结构形式两种循环程序结构:WHILE_DO结构和DO_UNTIL结构循环初始状态Y循环体N图5-9WHILE—DO结构循环控制条件循环初始状态循环体YN图5-10DO—UNTIL结构循环控制条件例5-6试编写一程序统计出某一内存单元中‘1’的个数.明确任务,确定算法。绘流程图(图5-11)N结束CL←0开始AX←XDAAX为零?CONT←CLYNAX逻辑左移一位CF=1?YCL←CL+1图5-11例5-6
流程图(3)根据流程图编写汇编语言程序3AD8H?DATA
SEGMENTXDA
DWCONT
DBDATA
ENDSCODESEGMENTASSUMECS:CODE,DS:DATAAX,DATADS,AXCL,0AX,XDASTART:
MOVMOVMOVMOVLOP:
CMPJZSHLJNCINCNEXT:JMPEXIT:
MOVINTCODE
ENDSENDAX,0EXITAX,1NEXTCL
LOPCONT,CL20HSTART5.4.2
循环程序的控制方法计数法计数法分为正计数法和倒计数法。例5-7
编制程序将两个n字节的无符号数相加,结果存入SUM开始的n+1字节存储区中。明确任务,确定算法。绘流程图略(3)根据流程图编写汇编语言程序SEGMENTN
DUP(?)
N
DUP(?)N+1
DUP(?)DATA
DATA1
DBDATA2
DBSUM
DBDATA
ENDSCSEGSEGMENTASSUMECS:CSEG,DS:DATAAX,DATADS,AXBX,OFFSET
DATA1SI,OFFSET
DATA2DI,SUMCX,NSTART:MOVMOVMOVMOVLEAMOVCLCLOP:
MOV
AL,[SI]ADC
AL,[BX]MOV
[DI],ALINC
BXINC
SIINC
DILOOP
LOPADC
BYTE
PTR
[DI],0MOV
AH,
4CHINT
21HCSEG
ENDSENDSTART(2)条件控制法条件控制法——利用已知的条件对循环进行控制的方法。分两种情况:如循环最大次数已知,但有可能使用一些特征或条件使循环提前结束。循环次数未知,利用条件中的特征结束循环。例5-8
编制程序用单字符输出的DOS功能调用向屏幕输出以“%”结束的字符串。(1)明确任务,确定算法。(2)绘流程图(图5-12)
开始SI←DATA首址DL←[SI]DL=’%Y’?N显示字符SI←SI+1结束例5-8流程图图5-12(3)根据流程图编写汇编语言程序DSEGDATADSEGCSEGSEGMENTDB
‘HOW
ARE
YOU?%’ENDSSEGMENTASSUME
CS:CSEG,DS:DSEGSTART:
MOVMOVLEAAX,DSEGDS,AXSI,DATAAGAIN:
MOVCMPJZMOVINTINCJMPENDOUT:INTDL,[SI]DL,‘%’ENDOUTAH,221HSIAGAIN20HCSEGENDSEND
START(3)逻辑尺控制法例5-9
设有16个内存单元需要修改,修改规律是:第1、3、6、9、12号单元均加5,其余单元均加10,试用循环结构编程实现。(1)明确任务,确定算法。(2)绘流程图(3)根据流程图编写汇编语言程序图5-13
例5-9流程图开始指针BX←0计数初值CX←16逻辑尺DX←0A490HAX←XDA[BX]DX逻辑左移一位CF=1?YNAX←AX+10XDA[BX]←AXBX←BX+1CX←CX-1NCX=0?Y结束AX←AX+5SEGMENTDB
16
DUP(?)DW
0A490HENDSDATAXDALRULERDATACODEMAINSEGMENTPROC
FARASSUME
CS:CODE,DS:DATASTART:
PUSHXORPUSHMOVMOVMOVMOVDSAX,AXAXAX,DATADS,AXBX,0CX,10HMOVAGAIN:
MOVSHLJCADDJMPDX,LRULERAX,XDA[BX]DX,1ADD5AX,10SHORT
RESULTAX,5XDA[BX],AXBXAGAINADD5:
ADDRESULT:MOVINCLOOPRETMAINCODEENDPENDSEND
START多重循环程序设计注意以下几点:设置好各重循环的初始状态,确保各重循环的正常运行。注意内外循环嵌套。防止死循环现象。例5-10设某一数组的长度为N,各元素均为字数据,试编制一个程序使该数组中的数据按照从小到大的次序排列。(1)明确任务,确定算法。(2)绘流程图(3)根据流程图编写汇编语言程序图5-14例5-10流程图开始
BX←0内循环次数CX←N-1外循环次数DX←CXAX←DATA[BX]DATA[BX]←AXBX←BX+2CX←CX-1CX=0?CX=0?Y结束YAX≤DATA[BX+2]?N交换AX,DATA[BX+2]Y外循环次数CX←DXBX←0CX←CX-1NNADATADATAADATAACODESEGMENTDW N
DUP(?)ENDSSEGMENTASSUMECS:ACODE,DS:ADATASTART:
MOVMOVMOVMOVDEC;设计数器CX,内循环次数;设计数器DX,外循环次数LOP1:LOP2:;取相邻两数;若次序符合,则不交换AX,ADATADS,AXBX,0CX,NCXMOV
DX,CXMOVCMPJBEAX,DATA[BX]AX,DATA[BX+2]CONTIXCHGAX,DATA[BX+2]
;否则两数交换MOVDATA[BX],AXCONTI:ADDBX,2LOOPLOP2
;内循环MOVCX,DX
;外循环次数→CXMOVBX,0
;地址返回第一个数据LOOPLOP1
;外循环MOVAH,4CH
;返回DOSINT21HACODEENDSENDSTART子程序结构程序设计子程序——是汇编语言中多次使用的一个相对独立的程序段。子程序结构程序设计主要包括三个方面,即:子程序的定义与调用子程序的参数传送子程序嵌套与递归调用子程序的定义与调用1、子程序的定义子程序说明包括四个方面:描述该子程序模块的名称、功能及性能说明子程序中用到的寄存器和存储单元指出子程序的入口参数和出口参数子程序中调用其它子程序的名称例5-11定义一个显示两位十六进制数的子程序程序说明:;名称:DISPP;功能:显示两位十六进制数;所用寄存器CX,DX;人口参数:AL存放两位十六进制数;出口参数:无;调其它子程序:DISP1子程序;DISPPPROCNEARPUSHDXPUSHCXMOVDL,
ALMOVCL,
4ROLDL,
CLANDDL,
0FHCALLDISP1MOVDL,
ALANDDL,
0FHCALLDISP1POPCXPOPDXRETDISPPENDP2、子程序的调用和返回例5-12
编制显示四位十六进制数的子程序明确任务,确定算法。绘流程图根据流程图编写汇编语言程序DISP4
PROC
NEARPUSH
BXPUSH
CXPUSH
DXPUSH
AXMOV AL,
AHCALL
DISP2POP
AXCALL
DISP2POP
DXPOP
CXPOP
BXRETDISP4
ENDPDISP2
PROC
NEARMOV
BL,
ALMOV DL,
ALMOV
CL,
4ROLANDCALLMOV
ANDCALLRETDISP2
ENDPDISP1
PROCOR
CMPJBADDDDD:
MOVINTRETDISP1
ENDPDL,CLDL,0FHDISP1DL,BLDL,0FHDISP1DL,30HDL,3AHDDDDL,07HAH,221H5.5.2
子程序的参数传送实现参数传送分为四种:寄存器传送、固定缓冲区传送、地址表传送和堆栈传送。1、寄存器传送寄存器传送是一种最常用、最简单的参数传送实现方法。2、固定缓冲区传送固定缓冲区传送方法是采用存储器来实现参数传送的,它与寄存器传送类似。例5-13
已知数组由100个字数据组成,试编程求出这个数组元素之和。(1)明确任务,确定算法。(2)绘流程图(图5-16)返回开始保护现场恢复现场NBX←ARY首地址CX←100AX、DX清零
AX←AX+[BX]NCF=1?YDX←DX+1BX←BX+2CX←CX-1CX=0?Y保存结果图5-16
例5-13求和子程序流程图(3)根据流程图编写汇编语言程序DATA
SEGMENTARY
DW
100
DUP(?)SUMDATACODEDW
?ENDSSEGMENTASSUME
CS:CODE,DS:DATASTART:
MOV
AX,DATAMOV
DS,AXCALL
RADD
MOV
AH,4CHINT
21H;求和子程序RADDPROCNEARPUSH
AXPUSH
BXPUSH
CXPUSH
DXLEABX,ARYMOVCX,100XORAX,AXMOVDX,AXCL1:ADDAX,[BX]JNCCL2INCDXCL2:ADDBX,2LOOPCL1MOVSUM,AXMOVSUM+2,
DXPOPDXPOPCXPOPBXPOPAXRETRADDENDPCODEENDSENDSTART3、地址表传送地址表传送--是采用存储器来实现参数传送的。例5-14
已知数组A由100个字数据组成,数组B由50个字数据组成,试编程分别求出这两个数组元素之和。(1)明确任务,确定算法。(2)绘流程图(图5-17)(3)根据流程图编写汇编语言程序结束开始TAB←CA首址TAB
[2]←ARA首址TAB[4]←SA首址SI←取TAB首址调用求和子程序RADDTAB←CB首址TAB[2]←ARB首址TAB[4]←SB首址SI←取TAB首址调用求和子程序RADD开始返回保护现场BX←[SI]
CX←[BX]BX←[SI+2]
DI←[SI+4]AX、DX清零AX←AX+[BX]BX←BX+2
CX←CX-1NNCX=0?Y保存结果并恢复现场CF=1?YDX←DX+1图5-17例5-14流程图DATASEGMENTCADW100ARADW100
DUP(?)SADD?CBDW50ARBDW50
DUP(?)SBDD?TABDW3
DUP(?)DATACODEENDSSEGMENTASSUME
CS:CODE,DS:DATASTART:
MOVMOV
MOV
MOV
MOV
MOVAX,DATADS,AXAX,OFFSET
CATAB,AXAX,OFFSET
ARATAB[2],AXMOVAX,OFFSET
SAMOVTAB
[4],AXMOVSI,OFFSET
TABCALLRADDMOVAX,OFFSET
CBMOVTAB,AXMOVAX,OFFSET
ARBMOVTAB[2],AXMOVAX,OFFSET
SBMOVTAB
[4],AXMOVSI,OFFSET
TABCALLRADDMOVAH,4CHINT21HRADD
PROCNEARMOVBX,[SI]MOVCX,[BX]MOVBX,[SI+2]MOVDI,[SI+4]XORAX,AXMOVDX,AXCL1:ADDAX,[BX]JNCCL2INCDXCL2:ADDBX,2LOOPCL1MOV[DI],AXMOV[DI+2],
DXRETRADDENDPCODEENDSENDSTART4、堆栈传送堆栈传送--是采用存储器来实现参数传送的。例5-15已知数组A由100个字数据组成,数组B由50个字数据组成,要求用堆栈传送参数的子程序结构编程,试分别求出这两个数组元素之和。明确任务,确定算法。绘流程图(图5-18)根据流程图编写汇编语言程序结束数组A起始地址压入堆栈开始存放数组A长度起始地址压入堆栈存放数组A和起始地址压入堆栈数组B起始地址压入堆栈存放数组B长度起始地址压入堆栈存放数组B和起始地址压入堆栈调用求和子程序RADD调用求和子程序RADD开始返回BP值压入堆栈BP←SP保护现场恢复现场SI←[SP+8]DI←[SP+6]CX←[DI]DI←[SP+4]AX、DX清零AX←AX+[SI]CF=0?NDX←DX+1SI←SI+2CX=0?Y[DI]←AXCX←CX-1[DI+2]←DX11恢复BP值YN图5-18例5-15流程图DATASEGMENTCNTADW100ARYADW100
DUP(?)SUMADD?CNTBDW50ARYBDW50
DUP(?)SUMBDD?DATACSEGENDSSEGMENTASSUME
CS:CSEG,DS:DATASTART:
MOVMOV
MOVPUSHMOVAX,DATADS,AXAX,OFFSET
ARYAAXAX,OFFSET
CNTAPUSH
AXMOV
AX,OFFSET
SUMAPUSH
AXCALL
NEAR
PTR
RADD
MOV
AX,OFFSET
ARYBPUSH
AXMOV
AX,OFFSET
CNTBPUSH
AXMOV
AX,OFFSET
SUMBPUSH
AXCALL
NEAR
PTR
RADD
MOV
AH,4CHINT
21HPROC
NEARPUSH
BPRADDMOV
BP,SPPUSH
AXPUSH
DXPUSH
CXPUSH
SIPUSH
DIMOV
SI,[BP+8]MOV
DI,[BP+6]MOV
CX,[DI]MOV
DI,[BP+4]XOR
AX,AXMOV
DX,AXADD
AX,[SI]JNC
NOCAYINC
DXNEXT:NOCAY:
ADD
SI,2LOOP
NEXTMOV
[DI],AXMOV
[DI+2],DXPOP
DIPOP
SIPOP
CXPOP
DXPOP
AXPOP
BPRET
6RADD
ENDPCSEG
ENDSENDSTART(DI)(SI)(IP)SUMCNTARY(IP)SUMCNTARYSUMCNTARYSPSPSP(CX)(DX)(AX)原(BP)SP(a)(b)
(c)用堆栈传送参数时堆栈内容的变化情况(d)图5-195.5.3
子程序嵌套与递归调用调用子程序Ⅰ调用子程序Ⅰ返回返回1、子程序嵌套子程序嵌套--是指一个子程序的内部再调用其他子程序。主程序子程序Ⅰ子程序II调用子程序Ⅱ图5-20子程序嵌套2、递归子程序递归子程序——是这种具有递归调用性质的子程序。递归子程序必须注意以下两点:注意现场的保护。注意递归结束条件。例5-16计算
S=X!+Y!其中X、Y的值在0~8之间。(1)
明确任务,确定算法。(2)绘流程图结束SI←XYVAL偏移首址开始BX←[SI]调用求阶乘子程序FT暂存结果BX←[SI+2]BX←取前次结果调用求阶乘子程序FTAX←AX+BXSVAL←AX开始BX←BX-1递归调用FT由堆栈取出值到BX中AX←BX*AXAX←1返回YBX=0?NBX值压入堆栈FT子程序流程图主程序流程图图5-21
例5-16流程图(3)根据流程图编写汇编语言程序SEGMENT?,?0DATAXYVAL
DWSVAL
DWDATA
ENDSSTACK1SEGMENT
PARA
STACK
‘STACK’TOP
DW
64H
DUP(0)STACK1
ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START
:MOVMOV
MOV
MOV
MOVAX,DATADS,AXAX,STACK1SS,AXSP,SIZE
TOPMOV
SI,OFFSET
XYVALMOV
BX,[SI]CALL
FTPUSH
AXMOV
BX,[SI+2]CALL
FTPOP
BXADD
AX,BXMOV
SVAL,AXMOV
AH,4CHINT
21H;求阶乘子程序FT
PROCANDNEARBX,BXJZFT1PUSHBXDECBXCALLFTPOPB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年重庆市消防操作员《中级技能-监控方向》科目真题冲刺卷上半年B卷
- 钣金加工市场深度分析与投资战略研究报告模板
- 部编版小学语文四年级下册一课一练试题及答案(全册)
- 全球电信API行业分析:收入约为23790百万美元
- 广西壮族自治区百色市田东县实验高级中学2024-2025学年高二上学期开学检测生物试题(解析版)
- 劳务派遣用工合同范本
- 《卖炭翁》教学设计
- 记账实操-运动用品批发零售店的账务处理分录
- 福建省部分地市2025届高三地理下学期4月质量检测试题
- 信息必刷卷04(福建专用)(参考答案)
- 2024年湖北省武汉市中考道德与法治·历史试题(含答案解析)
- 2024年安徽国资国企研究院限公司公开招聘工作人员4名(高频重点提升专题训练)共500题附带答案详解
- 《沥青路面施工》课件
- 预应力混凝土管桩(L21G404)
- 小学二年级体育教案二
- 传媒类院校专业课“课程思政”教学探索-以《广告学》课程为例
- 二手车店加盟意向协议书
- 2024年互联网法律法规知识考试题库(附答案)
- 2024网络信息安全应急响应Windows应急手册
- 2023年CSP-J考试试题题库
- 2024-2029年中国健身行业市场发展分析及竞争格局与投资战略研究报告
评论
0/150
提交评论