微机原理与接口技术 张颖超 叶彦斐 第3章 习题答案
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOVAL, CL
MULCL
MOVCX, AX
MOVAL, CL
MOVAH, 0
MULCX
13.假设DX:AX中存放一个双字的数据:
NEG DX
NEG AX
SBB DX,0
请问:
(1)上述程序段完成什么功能?
(2)设执行前,DX=0001H,AX=FFFFH,上述程序段执行后,DX、AX的值是什么?
(1)清累加器AX;
(2)清进位标志位
(3)将累加器内容乘以2(不考虑溢出)
(4)将累加器内容除以2(不考虑余数)
答:
(1) a.XORAX, AX
b.SUBAX, AX
c.ANDAX,0
d.MOVAX,0
(2) a.SUBAX, AX
b.ANDAX, AX
c.ORAX, AX
d.XORAX, AX
(7)检查BX中的第2、6、10和12位是否同时为0。
答:
(1) ANDDL, 0FCH;1111 1100B
(2)ORSI, 0E000H;1110 0000 0000 0000B
(3)ANDAX, 0FFF0H;1111 1111 1111 0000B
ORAX, 0380H; 0000 0011 1000 0000B
(1) IN AL, PORT; AL=
(2) IN AL, 40H;AX=
(3) OUTDX,AL; (DX)=
(4) OUT DX, AX; (DX)=
答:
(1)AL=22H
(2) IN AX, 40H; AX=226EH
(3) OUTDX,AL; (DX)=6EH
(4) OUT DX, AX; (DX)=226EH
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环境下进行验证,并注意各标志位的变化情况。
(4)正确,寄存器寻址方式
(5)正确,寄存器寻址方式
(6)错误,寄存器BL不能用于表示内存单元的有效地址
(7)错误,BX和BP都是基址寄存器,不能同时用于内存单元的有效地址
(8)错误,DX不能用于表示内存单元的有效地址
(9)错误,CX不能用于表示内存单元的有效地址
(10)错误,16位寄存器不能乘以比例因子
MOVBX, 23ABH
ADDBL, 0ACH
MOVAX,23F5H
ADDBH, AL
SUBBX, AX
ADCAX, 12H
SUBBH,-9
略
11.编写计算4A2−B+10多项式值的程序段;说明:
(1)多项式值存于AX中,A、B是无符号数,设中间和最后结果不超过16位二进制数。
(2)数据说明:ADB0AH
习题
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
BDB10H
答:
MOVAL, A
MULA
MOVBL, 4
MOVBH, 0
MULBX
SUBAL, B
SBBAH, 0
ADDAX, 10
12.写一个计算CL的3次方的指令序列,假设幂不超过16位二进制数
答:有符号数
MOVAL, CL
IMULCL
MOVCX, AX
MOVAL, CL
CBW
IMULCX
无符号数
(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
立即寻址
寄存器寻址
2
直接寻址
寄存器寻址
3
寄存器间接寻址
寄存器寻址
4
寄存器寻址
寄存器相对寻址
5
寄存器寻址
基址加变址寻址
6
寄存器寻址
相对基址加变址寻址
7
寄存器寻址
直接寻址
8
寄存器寻址
寄存器间接寻址
2.判断下列操作数寻址方式的正确性,对正确的指出其寻址方式,错误的说明其错误原因:
(1) [AX](2) [SI+DI]
e.TESTAX, AX
f.CLC
(3) a.MOVCX,2;
MULCX
b.ADDAX, AX
c.SHLAX, 1
d.SALAX, 1
e.CLC
RCLAX, 1
(4) a.MOVCX,2;无符号数
DIVCX
MOVCX,2;带符号数
IDIVCX
b.SHRAX, 1;无符号数
.SARAX, 1;带符号数
(1) MOV CS, BX(2) MOV CH, SI
(3) PUSHAL(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)寻址方式错误,两个基址寄存器不能同时使用
SHLAH, CL;AX=2034H
ANDAH,0F3H;AX=2034H
18.试用移位指令把十进制数+35和−41分别乘以2。应该用什么指令?得到什么结果?如果除以2,结果又如何?
答:
乘Hale Waihona Puke 2MOVAL, 35; AL=0010 0011B/23H
SHLAL,1 ; AL=46H
MOVAL,-41; 0D7H
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;
SHLAL,1; AL=0AEH
除以2
MOVAL, 35
SARAL,1;AL=11H
MOVAL,-41
SARAL,1;AL=0EBH
c.CLC
RCRAX, 1
17.写出下列程序段执行后的结果:AX=?。
MOVAX, 1234H
MOVCL, 4
ANDAL, 0FH
ADDAL, 30H
SHLAH, CL
ANDAH,0F3H
答:
MOVAX, 1234H;AX=1234H
MOVCL, 4
ANDAL, 0FH;AX=1204H
ADDAL, 30H;AX=1234H
7.用一条指令实现把(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]
(3)源操作数属于寄存器相对寻址,物理地址
=ES16+(BP)+100=10000H+0200H+0AH=1020AH
(4)源操作数属于基址加变址寻址,物理地址
=DS16+(BX)+(SI)+20=20000H+0500H+1100H +14H=21614H
4.判断下列指令的对错,如果错误请说明原因。
XORAX,0E000H; 1110 0000 0000 0000B
(4)MOVAX, CX
ANDAX, 002AH;0000 0000 0010 1010B
如果运算结果不为0,表示1、3、5位至少有一位为1
(5)MOVAX, BX
ANDAX, 0444H;0000 0100 0100 0100B;
(3)物理地址=2000H16+0100H=20100H,所以(AX)=2B1AH;
(4)物理地址=2000H16+0100H+0004H=20104H,所以(AX)=5E4DH;
(5)物理地址=2000H16+0100H+0004H+01=20105H,所以(AX)=6F5EH;
6.已知AX=1020H,DX=3080H,端口地址PORT=41H,(40H)=6EH,(41H)=22H,指出下列各条指令执行的结果。
(7)MOVAX, BX
ANDAX, 1444H;0001 0100 0100 0100B;
如果运算结果为0,表示2、6、10、12位均为0
OR AX,1111 1111 0101 0101B
NOT AX
如果运算结果为0,表示2、6、10、12位均为0
16.列出3种以上实现下列要求的指令或指令序列。
(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)正确,寄存器寻址方式
答:求DX,AX存放的双字的相反数
执行前两条语句后DX=0FFFFH,AX=0001H,CF=1;执行第三条语句后,DX=0FFFEH,DX:AX=0FFFE 0001H
14.扩展无符号数是否可以使用如下指令?为什么?
(1) CBW指令;(2)CWD指令
答:不可以,因为这两条指令都是针对带符号数的。CBW把AL的符号扩展到AH,CWD把AX的符号扩展到DX。如果AL=80H,执行CBW后,AX=0FF80H,显然不对。
(2) MOV AX, [BP]
(3) MOV AX, ES:[BP+10]
(4) MOV AL, [BX+SI+20]
答:
(1)源操作数属于直接寻址,物理地址=DS16+2500H=20000H+2500H=22500H;
(2)源操作数属于寄存器间接寻址,物理地址=SS16+(BP)=10100H+0200H=10300H
(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)物理地址=2200H16+0100H+0004H=22104H,所以(AX)=0BC9AH;
(2) (AX)=(BX)=0100H;
XORAX, 0444H
如果运算结果为0,表示2、6、10位均为1
或者OR AX,1111 1011 1011 1011B
如果运算结果为FFFFH,则表示2、6、10位均为1
(6)MOVAX, CX
ORAX, 0FF55H;1111 1111 0101 0101B
如果运算结果不为0FFFFH,表示1、3、5、7中至少有一位为0
(11)错误,没有这样的寻址方式
(12)错误,书写方式不对,应该写成100H[SI]
3.已知DS=2000H,ES=1000H,SS=1010H,SI=1100H,BX=0500H,BP=0200H,请指出下列源操作数字段是什么寻址方式?源操作数字段的物理地址是多少?
(1)MOV AL, [2500H]
MULCL
MOVCX, AX
MOVAL, CL
MOVAH, 0
MULCX
13.假设DX:AX中存放一个双字的数据:
NEG DX
NEG AX
SBB DX,0
请问:
(1)上述程序段完成什么功能?
(2)设执行前,DX=0001H,AX=FFFFH,上述程序段执行后,DX、AX的值是什么?
(1)清累加器AX;
(2)清进位标志位
(3)将累加器内容乘以2(不考虑溢出)
(4)将累加器内容除以2(不考虑余数)
答:
(1) a.XORAX, AX
b.SUBAX, AX
c.ANDAX,0
d.MOVAX,0
(2) a.SUBAX, AX
b.ANDAX, AX
c.ORAX, AX
d.XORAX, AX
(7)检查BX中的第2、6、10和12位是否同时为0。
答:
(1) ANDDL, 0FCH;1111 1100B
(2)ORSI, 0E000H;1110 0000 0000 0000B
(3)ANDAX, 0FFF0H;1111 1111 1111 0000B
ORAX, 0380H; 0000 0011 1000 0000B
(1) IN AL, PORT; AL=
(2) IN AL, 40H;AX=
(3) OUTDX,AL; (DX)=
(4) OUT DX, AX; (DX)=
答:
(1)AL=22H
(2) IN AX, 40H; AX=226EH
(3) OUTDX,AL; (DX)=6EH
(4) OUT DX, AX; (DX)=226EH
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环境下进行验证,并注意各标志位的变化情况。
(4)正确,寄存器寻址方式
(5)正确,寄存器寻址方式
(6)错误,寄存器BL不能用于表示内存单元的有效地址
(7)错误,BX和BP都是基址寄存器,不能同时用于内存单元的有效地址
(8)错误,DX不能用于表示内存单元的有效地址
(9)错误,CX不能用于表示内存单元的有效地址
(10)错误,16位寄存器不能乘以比例因子
MOVBX, 23ABH
ADDBL, 0ACH
MOVAX,23F5H
ADDBH, AL
SUBBX, AX
ADCAX, 12H
SUBBH,-9
略
11.编写计算4A2−B+10多项式值的程序段;说明:
(1)多项式值存于AX中,A、B是无符号数,设中间和最后结果不超过16位二进制数。
(2)数据说明:ADB0AH
习题
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
BDB10H
答:
MOVAL, A
MULA
MOVBL, 4
MOVBH, 0
MULBX
SUBAL, B
SBBAH, 0
ADDAX, 10
12.写一个计算CL的3次方的指令序列,假设幂不超过16位二进制数
答:有符号数
MOVAL, CL
IMULCL
MOVCX, AX
MOVAL, CL
CBW
IMULCX
无符号数
(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
立即寻址
寄存器寻址
2
直接寻址
寄存器寻址
3
寄存器间接寻址
寄存器寻址
4
寄存器寻址
寄存器相对寻址
5
寄存器寻址
基址加变址寻址
6
寄存器寻址
相对基址加变址寻址
7
寄存器寻址
直接寻址
8
寄存器寻址
寄存器间接寻址
2.判断下列操作数寻址方式的正确性,对正确的指出其寻址方式,错误的说明其错误原因:
(1) [AX](2) [SI+DI]
e.TESTAX, AX
f.CLC
(3) a.MOVCX,2;
MULCX
b.ADDAX, AX
c.SHLAX, 1
d.SALAX, 1
e.CLC
RCLAX, 1
(4) a.MOVCX,2;无符号数
DIVCX
MOVCX,2;带符号数
IDIVCX
b.SHRAX, 1;无符号数
.SARAX, 1;带符号数
(1) MOV CS, BX(2) MOV CH, SI
(3) PUSHAL(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)寻址方式错误,两个基址寄存器不能同时使用
SHLAH, CL;AX=2034H
ANDAH,0F3H;AX=2034H
18.试用移位指令把十进制数+35和−41分别乘以2。应该用什么指令?得到什么结果?如果除以2,结果又如何?
答:
乘Hale Waihona Puke 2MOVAL, 35; AL=0010 0011B/23H
SHLAL,1 ; AL=46H
MOVAL,-41; 0D7H
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;
SHLAL,1; AL=0AEH
除以2
MOVAL, 35
SARAL,1;AL=11H
MOVAL,-41
SARAL,1;AL=0EBH
c.CLC
RCRAX, 1
17.写出下列程序段执行后的结果:AX=?。
MOVAX, 1234H
MOVCL, 4
ANDAL, 0FH
ADDAL, 30H
SHLAH, CL
ANDAH,0F3H
答:
MOVAX, 1234H;AX=1234H
MOVCL, 4
ANDAL, 0FH;AX=1204H
ADDAL, 30H;AX=1234H
7.用一条指令实现把(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]
(3)源操作数属于寄存器相对寻址,物理地址
=ES16+(BP)+100=10000H+0200H+0AH=1020AH
(4)源操作数属于基址加变址寻址,物理地址
=DS16+(BX)+(SI)+20=20000H+0500H+1100H +14H=21614H
4.判断下列指令的对错,如果错误请说明原因。
XORAX,0E000H; 1110 0000 0000 0000B
(4)MOVAX, CX
ANDAX, 002AH;0000 0000 0010 1010B
如果运算结果不为0,表示1、3、5位至少有一位为1
(5)MOVAX, BX
ANDAX, 0444H;0000 0100 0100 0100B;
(3)物理地址=2000H16+0100H=20100H,所以(AX)=2B1AH;
(4)物理地址=2000H16+0100H+0004H=20104H,所以(AX)=5E4DH;
(5)物理地址=2000H16+0100H+0004H+01=20105H,所以(AX)=6F5EH;
6.已知AX=1020H,DX=3080H,端口地址PORT=41H,(40H)=6EH,(41H)=22H,指出下列各条指令执行的结果。
(7)MOVAX, BX
ANDAX, 1444H;0001 0100 0100 0100B;
如果运算结果为0,表示2、6、10、12位均为0
OR AX,1111 1111 0101 0101B
NOT AX
如果运算结果为0,表示2、6、10、12位均为0
16.列出3种以上实现下列要求的指令或指令序列。
(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)正确,寄存器寻址方式
答:求DX,AX存放的双字的相反数
执行前两条语句后DX=0FFFFH,AX=0001H,CF=1;执行第三条语句后,DX=0FFFEH,DX:AX=0FFFE 0001H
14.扩展无符号数是否可以使用如下指令?为什么?
(1) CBW指令;(2)CWD指令
答:不可以,因为这两条指令都是针对带符号数的。CBW把AL的符号扩展到AH,CWD把AX的符号扩展到DX。如果AL=80H,执行CBW后,AX=0FF80H,显然不对。
(2) MOV AX, [BP]
(3) MOV AX, ES:[BP+10]
(4) MOV AL, [BX+SI+20]
答:
(1)源操作数属于直接寻址,物理地址=DS16+2500H=20000H+2500H=22500H;
(2)源操作数属于寄存器间接寻址,物理地址=SS16+(BP)=10100H+0200H=10300H
(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)物理地址=2200H16+0100H+0004H=22104H,所以(AX)=0BC9AH;
(2) (AX)=(BX)=0100H;
XORAX, 0444H
如果运算结果为0,表示2、6、10位均为1
或者OR AX,1111 1011 1011 1011B
如果运算结果为FFFFH,则表示2、6、10位均为1
(6)MOVAX, CX
ORAX, 0FF55H;1111 1111 0101 0101B
如果运算结果不为0FFFFH,表示1、3、5、7中至少有一位为0
(11)错误,没有这样的寻址方式
(12)错误,书写方式不对,应该写成100H[SI]
3.已知DS=2000H,ES=1000H,SS=1010H,SI=1100H,BX=0500H,BP=0200H,请指出下列源操作数字段是什么寻址方式?源操作数字段的物理地址是多少?
(1)MOV AL, [2500H]