当前位置:文档之家› 微机原理和接口技术张颖超叶彦斐第3章习题答案解析

微机原理和接口技术张颖超叶彦斐第3章习题答案解析

习题1.指出下列指令中操作数的寻址方式(1) MOV BX, 20H (2) MOV AX, [1245H](3) MOV DX, [SI] (4) MOV 100[BX], AL(5) MOV [BP][SI], AX (6) MOV [BX+100][SI], AX(7) MOV [1800H], AL (8) MOV [SI], AX答:源操作数目的操作数1 立即寻址寄存器寻址2 直接寻址寄存器寻址3 寄存器间接寻址寄存器寻址4 寄存器寻址寄存器相对寻址5 寄存器寻址基址加变址寻址6 寄存器寻址相对基址加变址寻址7 寄存器寻址直接寻址8 寄存器寻址寄存器间接寻址2. 判断下列操作数寻址方式的正确性,对正确的指出其寻址方式,错误的说明其错误原因:(1) [AX] (2) [SI+DI](3) BP (4) BH(5) DS (6) [BL+44](7) [BX+BP+32] (8) [DX](9) [CX+90] (10) [BX*4](11) BX+90H (12) SI[100H]答:(1) 错误,AX不能用于访问内存单元(2) 错误,两个变址寄存器SI和DI不能同时用于内存单元的有效地址(3) 正确,寄存器寻址方式(4) 正确,寄存器寻址方式(5) 正确,寄存器寻址方式(6) 错误,寄存器BL不能用于表示内存单元的有效地址(7) 错误,BX和BP都是基址寄存器,不能同时用于内存单元的有效地址(8) 错误,DX不能用于表示内存单元的有效地址(9) 错误,CX不能用于表示内存单元的有效地址(10)错误,16位寄存器不能乘以比例因子(11) 错误,没有这样的寻址方式(12) 错误,书写方式不对,应该写成100H[SI]3. 已知DS=2000H,ES=1000H,SS=1010H,SI=1100H,BX=0500H,BP=0200H,请指出下列源操作数字段是什么寻址方式?源操作数字段的物理地址是多少?(1) MOV AL, [2500H](2) MOV AX, [BP](3) MOV AX, ES:[BP+10](4) MOV AL, [BX+SI+20]答:(1)源操作数属于直接寻址,物理地址=DS⨯16+2500H=20000H+2500H=22500H;(2)源操作数属于寄存器间接寻址,物理地址=SS⨯16+(BP)=10100H+0200H=10300H(3)源操作数属于寄存器相对寻址,物理地址=ES⨯16+(BP)+100=10000H+0200H+0AH=1020AH(4)源操作数属于基址加变址寻址,物理地址=DS⨯16+(BX)+(SI)+20=20000H+0500H+1100H+14H=21614H4. 判断下列指令的对错,如果错误请说明原因。

(1) MOV CS, BX (2) MOV CH, SI(3) PUSH AL (4) MOV DX, [BX][ BP](5) MOV CH, 100H (6) XCHG BX, 3(7) PUSH CS (8) MOV AL, [BX][SI]答:(1) CS不能赋值(2) 操作数类型/长度不匹配(3) PUSH指令的操作数必须是字(4) 寻址方式错误,两个基址寄存器不能同时使用(5) 100H超出了CH表示的范围(6) 交换指令的操作数不能是立即数(7) 正确(8) 正确5. 给出MOV指令执行后的结果,设有关寄存器及存储单元内容如下:DS=2000H, ES=2200H, BX=0100H, SI=0004H, (22100H)=12H, (22101H)=34H, (22102H)=56H, (22103H)=78H, (22104H)=9AH, (22105H)=0BCH, (20100H)=1AH, (20101H)=2BH, (20103H)=3CH, (20104H)=4DH, (20105H)=5EH, (20106H)=6FH,(1) MOV AX, ES:[BX][SI](2) MOV AX, BX(3) MOV AX, [BX](4) MOV AX, [BX+SI](5) MOV AX, [BX+SI+01]答:(1) 物理地址=2200H⨯16+0100H+0004H=22104H,所以(AX)=0BC9AH;(2) (AX)=(BX)=0100H;(3) 物理地址=2000H⨯16+0100H=20100H,所以(AX)=2B1AH;(4) 物理地址=2000H⨯16+0100H+0004H=20104H,所以(AX)=5E4DH;(5) 物理地址=2000H⨯16+0100H+0004H+01=20105H,所以(AX)=6F5EH;6. 已知AX=1020H,DX=3080H,端口地址PORT=41H,(40H)=6EH,(41H)=22H,指出下列各条指令执行的结果。

(1) IN AL, PORT; AL=(2) IN AL, 40H; AX=(3) OUT DX, AL; (DX)=(4) OUT DX, AX; (DX)=答:(1) AL=22H(2) IN AX, 40H; AX=226EH(3) OUT DX, AL; (DX)=6EH(4) OUT DX, AX; (DX)= 226EH7. 用一条指令实现把(BX)和(SI)之和传送给CX。

答:LEA CX, [BX+SI]8. 试比较下列3组指令的功能(1) LDS SI, [DI](2) MOV SI, [DI]MOV DS, [DI+2](3) MOV DS, [DI+2]MOV SI, [DI]答:(1) 相当于MOV SI, [DI]MOV DS, [DI+2](2) 与(1)功能相同(3) 第一条指令修改了DS的值,因此执行第二条指令后结果可能与(1)(2)不同。

9.求出以下各十六进制数与十六进制数62A0之和,并根据结果设置标志位SF,ZF和OF的值。

(1) 1234 (2)4321 (3) CFA0 (4)9D60略10.写出以下指令序列中每条指令的执行结果,请在DEBUG环境下进行验证,并注意各标志位的变化情况。

MOV BX, 23ABHADD BL, 0ACHMOV AX, 23F5HADD BH, ALSUB BX, AXADC AX, 12HSUB BH,-9略11.编写计算4A2−B+10多项式值的程序段;说明:(1)多项式值存于AX中,A、B是无符号数,设中间和最后结果不超过16位二进制数。

(2)数据说明:A DB 0AHB DB 10H答:MOV AL, AMUL AMOV BL, 4MOV BH, 0MUL BXSUB AL, BSBB AH, 0ADD AX, 1012.写一个计算CL的3次方的指令序列,假设幂不超过16位二进制数答:有符号数MOV AL, CLIMUL CLMOV CX, AXMOV AL, CLCBWIMUL CX无符号数MOV AL, CLMUL CLMOV CX, AXMOV AL, CLMOV AH, 0MUL CX13.假设DX:AX中存放一个双字的数据:NEG DXNEG AXSBB DX,0请问:(1)上述程序段完成什么功能?(2)设执行前,DX=0001H,AX=FFFFH,上述程序段执行后,DX、AX的值是什么?答:求DX,AX存放的双字的相反数执行前两条语句后DX=0FFFFH,AX=0001H,CF=1;执行第三条语句后,DX=0FFFEH,DX:AX=0FFFE 0001H14.扩展无符号数是否可以使用如下指令?为什么?(1) CBW指令;(2)CWD指令答:不可以,因为这两条指令都是针对带符号数的。

CBW把AL的符号扩展到AH,CWD把AX 的符号扩展到DX。

如果AL=80H,执行CBW后,AX=0FF80H,显然不对。

15. 按要求编写下列指令序列(1) 清除DL中的低2位而不改变其他位;(2) 把SI的高3位置为1而不改变其他位;(3) 把AX中的0~3位置0,7~9位置1,13~15取反;(4) 检查CX中的1、3和5位中是否有1位为1;(5) 检查BX中的第2、6和10位是否同时为1;(6) 检查CX中的1、3、5和7位中是否有1位为0;(7) 检查BX中的第2、6、10和12位是否同时为0。

答:(1) AND DL, 0FCH;1111 1100B(2)OR SI, 0E000H;1110 0000 0000 0000B(3)AND AX, 0FFF0H;1111 1111 1111 0000BOR AX, 0380H; 0000 0011 1000 0000BXOR AX,0E000H; 1110 0000 0000 0000B(4)MOV AX, CXAND AX, 002AH;0000 0000 0010 1010B如果运算结果不为0,表示1、3、5位至少有一位为1(5) MOV AX, BXAND AX, 0444H;0000 0100 0100 0100B;XOR AX, 0444H如果运算结果为0,表示2、6、10位均为1或者 OR AX,1111 1011 1011 1011B如果运算结果为FFFFH,则表示2、6、10位均为1(6) MOV AX, CXOR AX, 0FF55H;1111 1111 0101 0101B如果运算结果不为0FFFFH,表示1、3、5、7中至少有一位为0 (7) MOV AX, BXAND AX, 1444H;0001 0100 0100 0100B;如果运算结果为0,表示2、6、10、12位均为0OR AX,1111 1111 0101 0101BNOT AX如果运算结果为0,表示2、6、10、12位均为016.列出3种以上实现下列要求的指令或指令序列。

(1)清累加器AX;(2)清进位标志位(3)将累加器内容乘以2(不考虑溢出)(4)将累加器内容除以2(不考虑余数)答:(1) a. XOR AX, AXb. SUB AX, AXc. AND AX,0d. MOV AX,0(2) a. SUB AX, AXb. AND AX, AXc. OR AX, AXd. XOR AX, AXe. TEST AX, AXf. CLC(3) a. MOV CX,2;MUL CXb. ADD AX, AXc. SHL AX, 1d. SAL AX, 1e. CLCRCL AX, 1(4) a. MOV CX,2;无符号数DIV CXMOV CX,2;带符号数IDIV CXb. SHR AX, 1;无符号数. SAR AX, 1;带符号数c. CLCRCR AX, 117.写出下列程序段执行后的结果:AX=?。

相关主题