汇编复习.docx
《汇编复习.docx》由会员分享,可在线阅读,更多相关《汇编复习.docx(14页珍藏版)》请在冰豆网上搜索。
汇编复习
1、设有字节数组X,X数组中有X1,…,X10,十个无符号数。
要求计算:
Z1=2*X1Z2=2*X2Z3=X3/2
Z4=2*X4Z5=X5/2Z6=2*X6
Z7=2*X7Z8=X8/2Z9=X9/2
Z10=2*X10
结果存入字节Z数组。
(不考虑溢出等情况)
①要实现上述要求,应该使用哪个编程技术?
如何设置标志?
②正确定义数据段
③试编制一完整的汇编源程序实现上述要求。
①要实现上述要求,应该使用逻辑尺。
用0表示乘法,用1表示除法。
则逻辑尺设置为0110010100B,即0194H。
(3分)
②数据段定义为:
DATASEGMENT
XDBX1,X2,X3,X4,X5,X6,X7,X8,X9,X10
ZDBZ1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10
LRDB0194H
DATAENDS
数据段定义正确2分。
③源程序如下:
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,0
MOVCX,10
MOVDX,LR
NEXT:
MOVAL,X[BX]
SHRDX,1
JCDIVTRACT
SHLAL,1
JMPSHORTRESULT
DIVTRACT:
SHRAL,1
RESULT:
MOVZ[BX],AL
INCBX
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、编写一完整的汇编程序,完成的功能如下:
向内存0030H:
0H~0030H:
003FH中依次传送数据0~63D(3FH)。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,0030H
MOVDS,AX
MOVBX,0
MOVDL,0
MOVCX,40H;MOVCX,64
NEXT:
MOV[BX],DL
INCDL
INCBX
LOOPNEXT
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3、编写一完整的汇编源程序,其功能是将压缩BCD码转化为对应的两个ASCII码。
DATASEGMENT
BCDDB12H,34H,56H,78H,90H
ASCDB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCL,4
MOVBX,0
MOVSI,0
MOVDI,5
AGAIN:
MOVCH,2
MOVAL,BCD[BX]
NEXT:
ROLAL,CL
MOVAH,AL
ANDAH,0FH
ORAH,30H
MOVASC[SI],AH
INCSI
DECCH
JNZNEXT
INCBX
DECDI
JNZAGAIN
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
4、写出执行Z←(W*X+Z)/(Y+6),Y←余数计算的指令序列,其中W,X,Y和Z均为存放16位带符号数单元的地址。
MOVAX,W
IMULX
MOVCX,AX
MOVBX,DX
MOVAX,Z
CWD
ADDAX,CX
ADCDX,BX
ADDY,6
IDIVY
MOVZ,AX
MOVY,DX
5、试编写一段汇编语言指令序列,其功能是求1到400之间所有正整数之和。
MOVAX,0
MOVBX,1
MOVCX,400
NEXT:
ADDAX,BX
INCBX
LOOPNEXT
6、试编制一段汇编语言指令序列,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY存储区已有ES指向)。
LEADI,DA_BY
MOVCX,32
MOVAL,‘Y’
CLD
REPSTOSB
7、X、Y是双精度数,分别存于DX,AX及BX,CX中,下面的程序段的功能是实现两数的比较,当X>Y时转L1,否则转L2。
试在程序的空缺处填补上适合的指令。
(每空只能填一条指令)
CMPDX,BX
JGL1
JLL2
CMPAX,CX
JAL1
L2:
……
L1:
……
8、已知(AX)=0A33AH,(DX)=0F0F0H
ANDAH,DL
XORAL,DH
NEGAH
NOTAL
执行上述指令序列后,(AL)=,(AH)=。
(AL)=35H,(AH)=60H
9、下面程序的功能是将压缩BCD码转化为对应的两个ASCII码。
试在程序的空缺处填补上适合的指令。
(每空只能填一条指令)
DATASEGMENT
BCDDB12H,34H,56H,78H,90H
ASCDB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCL,4
MOVBX,0
MOVSI,0
MOVDI,5
AGAIN:
MOVCH,2
MOVAL,BCD[BX]
NEXT:
ROLAL,CL
MOVAH,AL
ANDAH,0FH
ORAH,30H
MOVASC[SI],AH
INCSI
DECCH
JNZNEXT
INCBX
DECDI
JNZAGAIN
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
10、设X,Y均为无符号16位数据,用程序完成表达式X2+Y的计算。
试在程序的空缺处填补上适合的指令。
(每空只能填一条指令)
VARYDWX,Y
RESULTDW?
,?
……
MOVAX,VARY
MULAX
ADDAX,VARY+2
ADCDX,0
MOVRESULT,AX
MOVRESULT+2,DX
……
11、下面的程序段是用以完成统计一个数组中为奇数的数目,统计结果存放在RESULT单元中。
试在程序的空缺处填补上适合的指令。
(每空只能填一条指令)
ARRAYDBx1,x2,x3,……,xn
NNDBN
RESULTDB?
……
MOVCX,NN
LEASI,ARRAY
LOP:
TESTBYTEPTR[SI],01H
JZNEXT
INCRESULT
NEXT:
INCSI
LOOPLOP
……
12、下面的程序的功能是统计BX中1的个数。
请在程序的空缺处填
补上适合的指令。
XORAL,AL
AGAIN:
TESTBX,OFFFFH
JENEXT
SHLBX,1
JNCAGAIN
INCAL
JMPAGAIN
NEXT:
……
该程序段采用的是什么循环控制?
本程序段采用的是特征值控制。
13、有程序如下:
DATASEGMENT
SRCDB1,2,3,4,5,6,7,8,9,10
DESTDB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVES,AX
MOVDS,AX
MOVCX,10
LEASI,SRC
LEADI,DEST
CLD
REPMOVSB
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
其中LEASI,SRC完成的功能是什么?
可以用什么指令来替换?
CLD功能是什么?
指令LEASI,SRC完成的功能是将SRC的偏移地址传递给SI。
可以用指令MOVSI,OFFSETSRC来替换。
指令CLD的功能是将DF标志位清零。
14、分析下面程序段:
……
CALLINPUT
MOVDL,AL
CALLINPUT
ADDAL,DL
……
INPUTPROCNEAR
REPEAT:
MOVAH,01H
INT21H
SUBAL,30H
JLREPEAT
CMPAL,9
JGREPEAT
RET
INPUTENDP
……
试问上述程序段完成什么功能?
另外,INPUTPROCNEAR语句中的NEAR表示什么含义?
该程序段的功能是通过调用子程序,从键盘输入两个十进制数后,进行相加,结果存于AL中。
INPUTPROCNEAR语句中的NEAR表示该子程序与主程序在同一代码段中。
15、在以ARRAY为首地址的内存区域中存放了一组无符号数,下面程序段的功能是找出该数组中的最大数,并将其存放到MAX单元,试在程序的空缺处填补上适合的指令。
(每空只能填一条指令)
ARRAYDW0190H,3098H,00FAH,……,1A07H
DW—1
MAXDW?
……
MOVAX,0
MOVBX,0
AGAIN:
CMPARRAY[BX],—1
JEEXIT
CMPAX,ARRAY[BX]
JAENEXT
MOVAX,ARRAY[BX]
NEXT:
INCBX
JMPAGAIN
EXIT:
……
16、有程序段如下:
BLK1DB2EH,54H,22H,—5,20,122,73
……
MOVCX,7
LEASI,BLK1
NEXT:
MOVAL,[SI]
INCSI
TESTAL,81H
LOOPZNEXT
MOVBL,[SI]
……
请回答程序段运行后:
(AL)=,(BL)=。
(AL)=—5,(BL)=14H。
17、根据中断源,可以将中断分为哪两大类?
请简述中断指令对标志位的影响。
根据中断源,可以将中断分为外中断(硬中断)和内中断(软中断)。
中断指令把IF和TF置0,但不影响其它标志位。
中断向量及中断向量表的地址和内容的计算。
18、什么是寻址方式?
8086/8088微处理器的寻址方式中与数据有关的寻址方式有哪几个?
寻址方式就是寻找指令中操作数的方式,或寻找指令转移目的地址的方式。
8086/8088微处理器的寻址方式中与数据有关的寻址方式有立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址。
19、CPU是由哪几部分构成的?
请简述各部分的主要功能。
CPU是有算术逻辑部件、控制器和寄存器构成的。
算术逻辑部件ALU用来进行算术和逻辑运算。
控制逻辑负责对全机的控制工作,包括从存储器取指令,对指令进行译码分析,从存储器取得操作数,发出执行指令的所有命令,把结果存入存储器,以及对总线及I/O的传送控制等。
工作寄存器用来存放计算过程中所需要的或所得到的各种信息,包括操作数地址、操作数及运算的中间结果等。
20、请简述BIOS和DOS基本调用的大致步骤。
1、将调用参数装入指定的寄存器中;
2、BIOS或DOS功能号装入AH;
3、如需子功能号,把它装入AL;
4、按中断号调用DOS或BIOS中断(INT);
5、检查或取得返回参数。
21、指令要实现的功能是将变量VARY的段地址传送给DS寄存器
MOVDS,SEGVARY(×)立即数不能直接传送给段寄存器。
改为:
MOVAX,SEGVARY
MOVDS,AX
22、指令要实现的功能是将寄存器BX中的值传送到内存单元中
MOVVARY[SI],ES:
BX(×)寄存器寻址不能使用段跨越前缀。
改为:
MOVVARY[SI],BX
23、指令要实现的功能是将寄存器AL中得值传送到内存单元中
MOVBLOCK[DX+SI],AL(×)DX不能作为基址寄存器。
改为:
MOVBLOCK[BX+SI],AL
24、指令要实现的功能是将BLOCK中的一个字传送到VARY中
MOVVARY,WORDPTRBLOCK(×)两个操作数不能同时使用存储器寻址。
改为:
MOVAX,WORDPTRBLOCK
MOVVARY,AX
25、指令要实现的功能是将1000H与寄存器AX中的值求和
ADD1000H,AX(×)目的操作数不能使用立即寻址
改为:
ADDAX,1000H
26、指令要实现的功能是将偏移地址为100H的字节单元加1
INC[100H](×)操作数字长未定义。
改为:
INCBYTEPTR[100H]
27、指令要实现的功能是将变量BLOCK中的值和偏移地址为100H中的进行比较
CMPBLOCK,[100H](×)两个操作数不能同时使用存储器寻址。
改为:
MOVAL,BLOCK
CMPAL,[100H]
28、指令要实现的功能是实现两个八位二进制数的或运算
ORAX,BL(×)AX为16为二进制数,字长不一致。
改为:
ORAL,BL
29、指令要实现的功能是将2000H入栈
PUSH2000H(×)不能使用立即寻址
改为:
MOVAX,2000H
PUSHAX
30、指令要实现的功能是将(BX)指向的字节单元的值减2
SUB[BX],2(×)操作数字长未定义。
改为:
SUBBYTEPTR[BX],2
31、指令要实现的功能是将DS寄存器中的值传送到ES中
MOVES,DS(×)两个操作数不能同为段寄存器
改为:
MOVAX,DS
MOVES,AX
32、指令要实现的功能是将内存单元中的值加上10H
ADDWORDPTR[BX+BP],10H(×)不能同时使用两个基址寄存器
改为:
ADDWORDPTR[BX+SI],10H
33、指令要实现的功能是将偏移地址1000H传送给BX寄存器
LEABX,1000H(×)不能使用立即寻址
改为:
LEABX,[1000H]
34、指令要实现的功能是将AL寄存器中的值输出到02端口
OUTAL,02H(×)源操作数与目的操作数位置颠倒
改为:
OUT02H,AL
35、指令要实现的功能是实现段内间接转移
JMP[BX](×)没有明确是段内转移还是短间转移
改为:
JMPWORDPTR[BX]
36、指令要实现的功能是求BLOCK[SI]中的值与(BX)中的值之差。
SUBBLOCK[SI],BX(×)目的操作数与源操作数字长不一致。
改为:
SUBWORDPTRBLOCK[SI],BX
37、指令要实现的功能是完成两个字节数据的乘法
MULAL,BL(×)乘法指令是单操作数指令,不能有两个操作数
改为:
MULBL
38、指令要实现的功能是进行两字符串的比较,并找出它们不相匹配的位置
REPCMPSB(×)CMPS指令不能与REP联用
改为:
REPZCMPSB
39、指令要实现的功能是当ZF为0时程序执行发生转移
JNZFARPTR[BX](×)条件转移指令不能使用段间间接寻址方式,只能使用段内直接寻址方式
改为:
JNZ标号
1、在8086/8088汇编语言中,有五条串操作指令,其中搜索字符串指令的助记符是SCASB。
2、外部设备与主机的通信是通过外设接口进行的,接口寄存器根据用途可以分为数据寄存器,状态寄存器,命令寄存器。
3、执行查表指令XLAT时,要先将表地址存放在BX中,将位移量存放在AL。
4、常用的DOS功能调用中的1号功能调用完成键盘输入并回显操作,2号功能调用完成显示输出一字符操作,9号功能调用完成显示字符串操作,A号功能调用完成键盘输入到缓冲区。
5、某内存单元中存放的二进制代码为?
?
H,如果它是一个无符号数,则其对应的十进制数为?
?
?
,而如果是一个有符号数,则其对应的十进制数为?
?
,再如果是一个压缩的BCD码,则其对应的十进制数为?
?
。
6、假设某个字的值是XXXXH,其低位字节地址是YYYYYH,高位字节地址是ZZZZZH,那么该字的字地址是?
?
。
7、8086/8088CPU允许最大的存储空间为1MB,因此CPU的地址总线是20位。
8、8086/8088微处理器中,既存放数据也可存放偏移地址的寄存器有BX、SP、BP、SI和DI。
9、十六进制数?
?
?
?
H表示的十进制正数为?
?
,表示的十进制负数为?
?
。
10、当标志位CF=1时表示无符号数运算产生溢出,而当标志位OF=1是表示带符号数运算产生溢出。
11、在8086/8088系统中,存储器物理地址是分段组织的。
堆栈段的段地址存放在SS寄存器中,栈顶数据的偏移地址放在SP寄存器中。
代码段的段地址存放在CS寄存器中,偏移地址在IP寄存器中。
12、8位的有符号二进制数的表数范围是-128至127。