1、习题1 指出下列指令中操作数的寻址方式(1) MOV BX, 20H(2) MOV AX, 1245H(3) MOV DX, SI(4) MOV 100BX, AL(5) MOV BPSI, AX(6) MOV BX+100SI, AX(7) MOV 1800H, AL(8) MOV SI, AX答:源操作数目的操作数1立即寻址寄存器寻址2直接寻址寄存器寻址3寄存器间接寻址寄存器寻址4寄存器寻址寄存器相对寻址5寄存器寻址基址加变址寻址6寄存器寻址相对基址加变址寻址7寄存器寻址直接寻址8寄存器寻址寄存器间接寻址2. 判断下列操作数寻址方式的正确性,对正确的指出其寻址方式,错误的说明其错误原因:(
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) SI100H答:(1) 错误,AX不能用于访问内存单元(2) 错误,两个变址寄存器SI和DI不能同时用于内存单元的有效地址(3) 正确,寄存器寻址方式(4) 正确,寄存器寻址方式(5) 正确,寄存器寻址方式(6) 错误,寄存器BL不能用于表示内存单元的有效地址(7) 错误,BX和BP都是基址寄存器,不能同时用于内存单元的有效地址(8) 错误,DX不能用于表示内存单元的有效地址(9) 错误,CX不能用于表示内存单元
3、的有效地址(10)错误,16位寄存器不能乘以比例因子(11)错误,没有这样的寻址方式(12) 错误,书写方式不对,应该写成100HSI3. 已知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) 源操作数属于直接寻址,物理地址=DS16+2500H=20000H+2500H=22500H;(2) 源操作数属于寄存器间接寻
4、址,物理地址=SS16+(BP)=10100H+0200H=10300H(3) 源操作数属于寄存器相对寻址,物理地址 =ES16+(BP)+100=10000H+0200H+0AH=1020AH(4) 源操作数属于基址加变址寻址,物理地址 =DS16+(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,
5、 BXSI答:(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, (20101
6、H)=2BH, (20103H)=3CH, (20104H)=4DH, (20105H)=5EH, (20106H)=6FH,(1) MOV AX, ES:BXSI(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;(3) 物理地址=2000H16+0100H=20100H,所以(AX)=2B1AH;(4) 物理地址=2000H16+0100H+0004H=20104H,所以
7、(AX)=5E4DH;(5) 物理地址=2000H16+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)= 226E
8、H7. 用一条指令实现把(BX)和(SI)之和传送给CX。答:LEA CX, BX+SI8. 试比较下列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. 写出以下指令
9、序列中每条指令的执行结果,请在DEBUG环境下进行验证,并注意各标志位的变化情况。MOVBX, 23ABHADDBL, 0ACHMOVAX, 23F5HADDBH, ALSUBBX, AXADCAX, 12HSUBBH,-9略11. 编写计算4A2B+10多项式值的程序段;说明:(1) 多项式值存于AX中,A、B是无符号数,设中间和最后结果不超过16位二进制数。(2) 数据说明:A DB 0AH B DB 10H答:MOV AL, AMUL AMOV BL, 4MOVBH, 0MUL BXSUB AL, BSBB AH, 0ADD AX, 1012. 写一个计算CL的3次方的指令序列,假设幂不
10、超过16位二进制数答:有符号数MOVAL, CLIMULCLMOVCX, AXMOVAL, CLCBWIMUL CX无符号数MOVAL, CLMULCLMOVCX, AXMOVAL, CLMOVAH, 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 0001
11、H14. 扩展无符号数是否可以使用如下指令?为什么?(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中的03位置0,79位置1,1315取反;(4) 检查CX中的1、3和5位中是否有1位为1;(5) 检查BX中的第2、6和10位是否同时为1;(6) 检查CX中的1、3、5和7位中是否有1位为0;(7) 检查BX中
12、的第2、6、10和12位是否同时为0。答:(1) ANDDL, 0FCH;1111 1100B(2)ORSI, 0E000H;1110 0000 0000 0000B(3)ANDAX, 0FFF0H;1111 1111 1111 0000BORAX, 0380H; 0000 0011 1000 0000BXORAX,0E000H; 1110 0000 0000 0000B(4)MOVAX, CXANDAX, 002AH;0000 0000 0010 1010B 如果运算结果不为0,表示1、3、5位至少有一位为1(5) MOVAX, BXANDAX, 0444H;0000 0100 0100 0
13、100B; 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(7) MOVAX, BXANDAX, 1444H;0001 0100 0100 0100B; 如果运算结果为0,表示2、6、10、12位均为0OR AX,1111 1111 0101 0101BNOT AX如果运算结果为0,表示2、6、10、12位均
14、为016. 列出3种以上实现下列要求的指令或指令序列。(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 e.TESTAX, AX f.CLC(3) a.MOVCX,2; MULCX b.ADDAX, AX c.SHLAX, 1 d.SALAX, 1 e.CLCRCLAX, 1(4) a.MOVCX,2;无符号数 DIVCX
15、 MOVCX,2;带符号数 IDIVCX b.SHRAX, 1;无符号数 .SARAX, 1;带符号数 c.CLCRCRAX, 117. 写出下列程序段执行后的结果:AX=?。MOVAX, 1234HMOVCL, 4ANDAL, 0FHADDAL, 30HSHLAH, CLANDAH, 0F3H答:MOVAX, 1234H;AX=1234HMOVCL, 4ANDAL, 0FH;AX=1204HADDAL, 30H;AX=1234HSHLAH, CL;AX=2034HANDAH, 0F3H;AX=2034H18. 试用移位指令把十进制数+35和41分别乘以2。应该用什么指令?得到什么结果?如果除以2,结果又如何?答:乘以2MOVAL, 35; AL=0010 0011B/23HSHLAL,1 ; AL=46HMOVAL,-41; 0D7HSHLAL,1; AL=0AEH除以2MOVAL, 35SARAL,1; AL=11HMOVAL,-41SARAL,1; AL=0EBH7