XCHG 20H[BX][SI] , AX
解 : 第一句指令中源操作数的物理地址为 (DS) × 10H+32H+(BX)= 09226H
09226H字单元和CX寄存器的内容交换,结果 (CX) = 00F6H ,(09226H) = 5678H 第二句指令中目的操作数的物理地址为 (DS) × 10H++20H+(BX)+(SI) = 09226H
09226H字单元和寄存器AX的内容交换, 结果 (09226H) = 1234H , (AX) = 5678H
16. 假设(SS)=0915H , (DS) = 0930H , (SI) = 0A0H , (DI) = 1C0H , (BX) = 80H , (BP) = 470H . 现有一指令―MOV AX , OPRD‖, 若源操作数的物理地址为095C0H , 试用4种不同寻址方式改写此指令,并要求至少使用上述条件一次.
解: 源操作数的物理地址与DS段基址的差为
095C0H – 09300H = 2C0H
① MOV AX , 100H[DI] ; 源操作数的物理地址为: (DS)×10H+100H+(DI) = 09300H + 100H + 1C0H =095C0H ② MOV AX , 220H[SI] ; 源操作数的物理地址为: (DS)×10H+220H+(SI) = 09300H + 220H + 0A0H =095C0H ③ MOV AX , 240H[BX] ; 源操作数的物理地址为:
(DS)×10H+240H+(BX) = 09300H + 240H + 080H =095C0H ④ MOV AX , 1A0H[SI][BX] ;源操作数的物理地址为:
(DS)×10H+0A0H+(SI)+(BX) = 09300H + 1A0H + 0A0H +080H = 095C0H
18. 假设(AX)=0A5C6H , (CX) = 0F03H , 则下列4条指令执行后 , (AX) = 81C6H , CF= 1 . STC ; CF = 1
RCL AX , CL ; AX= 0010 1110 0011 0110 , CF = 1 AND AH , CH ; AH = 0000 1110 , CF = 0
RCR AX , CL ; AX = 1000 0001 1100 0110, CF = 1
19. 假设(AX) = 0FC77H , (CX) = 504H , 则下列4条指令执行后 , (AX) = , CF = .
CLC ; CF = 0
SAR AX , CL ; (AX) = 1111 1111 1100 0111 , CF = 0 XCHG CH , CL ; (CX) = 405H
SHL AX , CL ; (AX) = 1111 1000 1110 0000 ,CF = 1
20. 假设(AX) = 1234H , (BX) = 0FFFFH , 则下述3条指令执行后 , (AX) = 1236H , (BX) = 0001H . INC AX ; (AX) = 1235H
NEG BX ; (BX) = 0000 0000 0000 0001B = 0001H ADD AX , BX ; (AX) = 1236H
21. 假设(AX) = 0FFFFH , 则下述程序段执行后 , (AX) = 0001H . INC AX ; (AX) = 0000H
NEG AX ; (AX) = 0000 0000 0000 0001B = 0000H DEC AX ; (AX) = 0FFFFH NEG AX ; (AX) = 0001H
22. 假设(BX) = 12FFH , 则下述程序段执行后 ,
(BX) = 0012H , ZF = 0 , CF = 0 . MOV CL , 8 ;(CL)=8
ROL BX , CL ;(BX) = 1111 1111 0001 0010B = 0FF12H AND BX , 0FFH ; (BX) = 0012H
CMP BX , 0FFH ; (BX) = 0012H CF=0 ,ZF=0 解: ① 第一句指令执行后 , (CL)=8
② 第二句指令执行后 , (BX) = 1111 1111 0001 0010B = 0FF12H
③ 第三句指令执行后 , (BX) = 0012H
④ 第四句指令执行后 , (BX) = 0012H CF=0 ,ZF=0
23. 假设(AX) = 0B55BH , (DX) = 0F0FH , 则下述程序段执行后 , (AX) = 0FBABH. AND AH , DL ; (AX) = 055BH
XOR AL , DH ;(AX) = 0554H
NEG AH ;(BX) = 1111 1011 0101 0100B = 0FD54H
NOT AL ; (AX) = 1111 1011 1010 1011H = 0FBABH
24. 假设(AX) = 0FF60H , 则下述程序段执行后 , (AX) = 0 0 .
, CF = STC ; CF = 1 MOV DX , 96 ; (DX) = 0060H
XOR DH , 0FFH ; (DX) = 1111 1111 0110 0000B = 0FF60H SBB AX , DX ; (AX) = 0
25. 假设(AL) = 08H , (BL) = 07H , 则下列程序段执行后 , (AH) = 01H , (AL) = 05H , CF = 1 . ADD AL , BL AAA
26. 假设DF=0 , (DS:0100H) = 01A5H , 则下述程序段执行后, (AL) = 0A5H , SI = MOV SI , 0100H LODSW 解: LODSW指令的功能: ① AX← (DS:(SI)) ② SI← (SI)±1或2
③ 对标志位无影响
执行后 , (AX) = 01A5H , 即(AL) = 0A5H , (SI) = 0102H
28. 试按下列要求分别编制程序段: (1) (1)把标志寄存器符号位置―1‖. 解: LAHF
OR 10000000B SAHF
(2) (2)寄存器AL中高低4位互换. 解: MOV CL , 4
ROL AL , CL 或 MOV CL , 4 ROR AL , CL
(3)假设有3个字存储单元A,B,C,Z在不使用ADD和ADC指令的情况下,实现
0102H . (A)+(B)→C. 解: MOV AX , A MOV BX , N NEG BX SUB AX , BX MOV C , AX
(5)
(4) 把DX , AX中的32位无符号数右移2位. 解:SHR DX , 1 RCR AX , 1 SHR DX , 1 RCR AX , 1
(5)用一条指令把CX只的整数转变为奇数. 解:OR CX , 1
(6) 把AX的第1,3位求反,其余各位保持不变. 解:XOR AX , 0000000000001010B
第5章 习题五
1. 设VAR1,VAR2是变量名,请指出下列语句的语法是否有错.如有错,指出是什么错误. (1)(1)MOV (2)(2)MOV (3)(3)MOV (4)(4)MOV
AX , VAR1+VAR2 ; 错误, 变量有段属性和偏移量属性,不能直接相加减. CX , VAR1 – VAR2 ; 同上 BL , AL SHR 3 ; 正确 DX , AX AND 0FFH ;正确
(5)(5)MOV [SI] , 4 ; 正确 (6)(6)NEG VAR1[DI] ; 正确
(7)(7)ADD BYTE PTR[BX] , 1000 ; 错误,操作数类型不一致. (8)(8)MOV AL , OFFSET VAR1 ; 错误,操作数类型不一致. 2. 在执行下列指令寻找操作数时,需要使用段寄存器DS的指令有哪些? (1(1)LODSB √ (2) STOSB (3) ADD BX , 34H (4) SHL [BP] , 1 (5) NEG [BX] √ (6) (6) SHR [SI] , 1 √ (7) (7) MOV AX , [SI] √ (8)(8) SBB BX , [DI] √