DTSEG ENDS |
答案:不一样. 分别是72H, 04H和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节. 7. 下面的数据项设置了多少个字节? (1) ASC_DATA DB ‘1234’ (2) HEX_DATA DB 1234H 答案 (1) 设置了4个字节 (2) 设置了2个字节 8. 执行下列指令后, AX寄存器中的内容是什么? TABLE DW 10,20,30,40,50 ENTRY DW 3 MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 答案: (AX)=40
9. 指出下列指令的错误: (1) MOV AH,BX (2) MOV [SI],[BX] (3) MOV AX,[SI][DI] (4) MOV AX,[BX][BP] (5) MOV [BX],ES:AX (6) MOV BYTE PTR[BX],1000 (7) MOV AX,OFFSET [SI] (8) MOV CS,AX (9) MOV DS,BP 答案:(1) 源、目的字长不一致
(2) 源、目的不能同时为存贮器寻址方式 (3) 基址变址方式不能有 SI和DI的组合 (4) 基址变址方式不能有 BX和BP的组合
(5) 在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式
(6) 1000超出一个字节的表数范围 (7) OFFSET只用于简单变量,应去掉 (8) CS不能作为目的寄存器
(9) 段地址不能直接送入数据段寄存器 10. DATA SEGMENT TABLE_ADDR DW 1234H DATA ENDS MOV BX, TABLE_ADDR LEA BX, TABLE_ADDR 请写出上述两条指令执行后, BX寄存器中的内容。 答案:MOV BX,TABLE_ADDR ; 执行后(BX)=1234H LEA BX,TABLE_ADDR ; 执行后(BX)=OFFSET TABLE_ADDR
11. 设(DS)=1B00H, (ES)=2B00H, 有关存储器地址及其内 容如右图
所示,请用两条指令把X装入AX寄存器。 8000H 1B00:2000H
2B00H 1B00:2002H
. . X 2B00:8000H
6
答案:LES BX, [2000H] MOV AX, ES: [BX]
12. 变量DATAX和DATAY定义如下: DATAXDW 0148H DW 2316H DATAY DW 0237H DW 4052H 按下述要求写出指令序列:
(1) DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。 (2) DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。 (3) DATAX和DATAY两个字数据相乘(用MUL)。 (4) DATAX和DATAY两个双字数据相乘(用MUL)。 (5) DATAX除以23(用DIV)。
(6) DATAX双字除以字DATAY(用DIV)。
答案:(1) MOV AX, DATAX ADD AX, DATAY MOV BX, DATAX+2 ADD BX, DATAY+2 MOV DATAY, AX MOV DATAY+2, BX (2) MOV AX, DATAX ADD DATAY, AX MOV AX, DATAX+2 ADC DATAY+2, AX (3) MOV AX, DATAX MUL DATAY MOV DATAY,AX MOV DATAY+2,DX (4) MOV AX,WORD PTR DATAX MOV BX,WORD PTR DATAY MUL BX MOV RESULT,AX MOV RESULT+2,DX MOV AX,WORD PTR DATAX MOV AX,WORD PTR DATAY+2 MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY+2
7
MUL BX ADD RESULT+4,AX ADC RESULT+6,DX (5) MOV AX, DATAX MOV BL, 23 DIV BL MOV BL,AH MOV AH, 0
MOV DATAY, AX ;存放商 MOV AL,BL
MOV DATAY+2, AX ;存放余数 (6) MOV AX, DATAX MOV DX, DATAX+2 DIV DATAY MOV DATAY, AX MOV DATAY+2, DX
13. 试分析下面的程序段完成什么操作? MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 答案:
将DX: AX中的双字左移4位(乘16) 14. 用其他指令完成和下列指令一样的功能: (1) REP MOVSB (2) REP LODSB 答案:
(1) LOOP1:
MOV AL,BYTE PTR [SI] MOV ES:BYTE PTR [DI], AL INC SI 或: DEC SI INC DI 或: DEC DI LOOP LOOP1 (2) LOOP1: MOV AL, BYTE PTR [SI] INC SI 或: DEC SI LOOP LOOP1 (3) LOOP1: MOV ES:BYTE PTR [DI], AL INC DI 或: DEC DI LOOP LOOP1 (4) LOOP1: CMP AL,ES:BYTE PTR [DI] JE EXIT INC DI 或: DEC DI LOOP LOOP1 EXIT:
(3) REP STOSB 8
(4) REP SCASB
15. 编写程序段, 比较两个5字节的字符串OLDS和NEWS, 如果OLDS字符串与NEWS不同, 则执行NEW_LESS, 否则顺序执行程序。 答案:LEA SI, OLDS LEA DI, NEWS MOV CX, 5 CLD
REPZ CMPSB JNZ NEW_LESS
16. 假定AX和BX中的内容为带符号数, CX和DX中的内容为无符号数, 请用比较指令和条件转移指令实现以下判断: (1) 若DX的值超过CX的值,则转去执行EXCEED (2) 若BX的值大于AX的值,则转去执行EXCEED (3) CX中的值为0吗? 若是则转去执行ZERO (4) BX的值与AX的值相减, 会产生溢出吗? 若溢出则转OVERFLOW (5) 若BX的值小于AX的值,则转去执行EQ_SMA (6) 若DX的值低于CX的值,则转去执行EQ_SMA 答案:(1) CMP DX, CX JA EXCEED (2) CMP BX, AX JG EXCEED (3) CMP CX, 0 JE ZERO (4) SUB BX, AX
JO OVERFLOW (5) CMP BX, AX JL EQ_SMA (6) CMP DX, CX JB EQ_SMA
17. 假如在程序的括号中分别填入指令: (1) LOOP L20 (2) LOOPNE L20 (3) LOOPE L20 试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么? TITLE EXLOOP.COM CODESG SEGMENT ASSUME CS:CODESG, DS:CODESG. SS:CODESG ORG 100H BEGIN: MOV AX,01 MOV BX,02 MOV DX,03 MOV CX,04 L20: INC AX ADD BX,AX SHR DX,1 ( ) RET CODESG ENDS END BEGIN 答案:
9
(1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0 (2)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1 (3)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0
18. 变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。 答案:
MOV AX, 0 MOV AL, N1+1 SUB AL, N2+1 AAS
MOV DL, AL MOV AL, N1 SBB AL, N2 AAS
MOV DH, AL
19. 有两个3位的ASCII数串ASC1和ASC2定义如下: ASC1 DB ‘578’ ASC2 DB ‘694’ ASC3 DB ‘0000’ 请编写程序计算ASC3←ASC1+ASC2。 答案: CLC MOV CX, 3 MOV BX, 2 BACK: MOV AL, ASC1[BX] ADC AL, ASC2[BX] AAA OR ASC3[BX+1], AL DEC BX LOOP BACK RCL CX, 1 OR ASC3[BX], CL
20. 假设(CS)=3000H, (DS)=4000H, (ES)=2000H, (SS)=5000H, (AX)=2060H, (BX)=3000H, (CX)=5, (DX)=0, (SI)=2060H, (DI)=3000H, (43000H)=0A006H, (23000H)=0B116H, (33000H)=0F802H, (25060)=00B0H,.(SP)=0FFFEH, (CF)=1, (DF)=1, 请写出下列各条指令单独执行完后, 有关寄存器及存储单元的内容, 若影响条件码请给出条件码SF、ZF、OF、CF的值。 (1) SBB AX,BX (2) CMP AX,WORD PTR[SI+0FA0H] (3) MUL BYTE PTR[BX] (4) AAM (5) DIV BH (6) SAR AX,CL
10