计算机组成原理与汇编语言程序设计课后习题及解答(详解)

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] √

联系客服:779662525#qq.com(#替换为@)