第3章8086指令系统2020年2月25日星期二12020年2月25日星期二22020年2月25日星期二26、分别用一条指令完成下列要求。(1)将寄存器BX的内容传送给CX:MOVCX,BX(2)将立即数1234H传送给AXMOVAX,1234H(3)把数据段中偏移地址为20H的存储单元的传送给AX寄存器MOVAX,[20H](4)把字节数据20H传送到BX指定的存储单元地址中MOVbyteptr[BX],20H2020年2月25日星期二32020年2月25日星期二38、假定(BX)=3000H,(SI)=1200H,(X)=300H,指出下列操作数中源操作数的寻址方式,同时写出各指令源操作数的地址。(1)MOVAX,1234H源操作数寻址方式:立即数寻址方式;(2)MOVAX,X源操作数寻址方式:直接寻址方式;EA=300H;(3)MOVAX,[BX]源操作数寻址方式:寄存器间接寻址方式;EA=(BX)=3000H;2020年2月25日星期二42020年2月25日星期二48、假定(BX)=3000H,(SI)=1200H,(X)=300H,指出下列操作数中源操作数的寻址方式,同时写出各指令源操作数的地址。(4)MOVAX,[BX+SI]:源操作数的寻址方式:基址变址寻址方式;EA=(BX)+(SI)=4200H;(5)MOVAX,X[BX][SI]源操作数的寻址方式:相对基址变址寻址方式;EA=(BX)+(SI)+X=4500H;(6)MOVAX,BX源操作数的寻址方式:寄存器寻址方式;2020年2月25日星期二52020年2月25日星期二510、设(DS)=1000H,(ES)=1500H,(SS)=2000H,(BX)=0010H,(BP)=00A0H,(SI)=0100H,指出下列操作数中源操作数的寻址方式,并计算其物理地址。(1)MOVAX,[0200H]物理地址=(DS)×16+0200H=10200H(2)MOVAX,[BX]物理地址=(DS)×16+(BX)=1000H×16+0010H=10010H(3)MOVAX,ES:[BX]物理地址=(ES)×16+(BX)=1500H×16+0010H=15010H直接寻址方式寄存器间接寻址方式寄存器间接寻址方式2020年2月25日星期二62020年2月25日星期二610、设(DS)=1000H,(ES)=1500H,(SS)=2000H,(BX)=0010H,(BP)=00A0H,(SI)=0100H,指出下列操作数中源操作数的寻址方式,并计算其物理地址。(4)MOVAX,SS:[BX]物理地址=(SS)×16+(BX)=2000H×16+0010H=20010H(5)MOVAX,[BP]物理地址=(SS)×16+(BP)=2000H×16+00A0H=200A0H(6)MOVAX,[BX]+100H物理地址=DS×16+(BX)+100H=1000H×16+0010H+100H=10110H寄存器间接寻址方式寄存器间接寻址方式寄存器相对寻址方式2020年2月25日星期二72020年2月25日星期二710、设(DS)=1000H,(ES)=1500H,(SS)=2000H,(BX)=0010H,(BP)=00A0H,(SI)=0100H,指出下列操作数中源操作数的寻址方式,并计算其物理地址。(7)MOVAX,[BX][SI]物理地址=DS×16+(BX)+(SI)=1000H×16+0010H+0100H=10110H(8)MOVAX,100H[BX][SI]物理地址=DS×16+(BX)+(SI)+100H=1000×16+0010H+0100H=10210H(9)MOVAX,[SI]物理地址=DS×16+(SI)=1000H×16+0100H=10100H基址变址寻址方式相对基址变址寻址方式寄存器间接寻址方式2020年2月25日星期二82020年2月25日星期二811、指出下列指令的错误原因。(1)MOVAL,1234H操作类型不匹配;(2)MOVCS,AX目的操作数不能是CS段寄存器;(3)MOV[1000],1000h指令的操作类型不明确;需使用PTR显式地指明目的操作数[1000]的数据类型;2020年2月25日星期二92020年2月25日星期二911、指出下列指令的错误原因。(4)MOVBYTEPTR[BX],1000H两个操作数的类型不匹配;(5)PUSHAL堆栈操作指令的操作数应是字数据,而AL是字节型的;(6)XCHGDS,AXXCHG指令中的操作数不能为段寄存器;2020年2月25日星期二102020年2月25日星期二1011、指出下列指令的错误原因(7)SHLAX,5若移位的位数大于1,则使用CL在指令中表示移位次数;(8)XCHG[BX],[SI]两个操作数同时为存储单元寻址方式,且两个数据的类型不确定;(9)INAX,[BX]IN指令中应使用DX存放IO端口地址;2020年2月25日星期二112020年2月25日星期二1111、指出下列指令的错误原因。(10)DEC[SI]操作数类型不确定;(11)NEG1234HNEG指令中操作数不能为立即数;(12)MUL05H乘法指令的操作数不能是立即数;2020年2月25日星期二122020年2月25日星期二1211、指出下列指令的错误原因(13)DIVAX,BX16位系统中,DIV指令是单操作数指令;(14)LEAAX,0100HLEA指令的源操作数只能是存储单元寻址方式;(15)AND[BX],[SI]两个操作数同时是存储单元;2020年2月25日星期二132020年2月25日星期二1312、设(DS)=1000H,(SS)=2000H,(BX)=0100H,(BP)=0200H,(SI)=0100H,写出下列指令执行后AX的内容。(1)MOVAX,0100H(AX)=0100H(2)MOVAX,[0100H]PA=(DS)×16+0100H=10100H(AX)=1020H(3)MOVAX,[BX]PA=DS×16+(BX)=10100H(AX)=1020H2010……2020……305010100H10200H20200H2020年2月25日星期二142020年2月25日星期二1412、设(DS)=1000H,(SS)=2000H,(BX)=0100H,(BP)=0200H,(SI)=0100H,写出下列指令执行后AX的内容。(4)MOVAX,[BP]PA=(SS)×16+(BP)=20200H(AX)=5030H(5)MOVAX,100H+[BX]PA=(DS)×16+100H+(BX)=10000H+100H+0100H=10200H(AX)=2020H2010……2020……305010100H10200H20200H2020年2月25日星期二152020年2月25日星期二1512、设(DS)=1000H,(SS)=2000H,(BX)=0100H,(BP)=0200H,(SI)=0100H,写出下列指令执行后AX的内容。(6)MOVAX,[BX][SI]PA=(DS)×16+(BX)+(SI)=10200H(AX)=2020H(7)MOVAX,[SI]PA=(DS)×16+(SI)=10000H+0100H=10100H(AX)=1020H2010……2020……305010100H10200H20200H2020年2月25日星期二162020年2月25日星期二1613、已知(DS)=1000H,(SS)=0F00H,(BX)=0010H,要使下列指令的源操作数指向同一个物理地址10320H,写出下列指令中寄存器BP、SI、DI和位移量X的值。(1)MOVAX,[SI](SI)=10320H-(DS)×16=10320H-10000H=0320H(2)MOVAX,[BP](BP)=10320H-(SS)×16=10320H-0F000H=1320H(3)MOVAX,[BX+DI](DI)=10320H-(DS)×16-(BX)=10320H-10000H-0010H=0310H(4)MOVAX,X[BX+SI](SI)=10320H-(DS)×16-(BX)-(SI)=10320H-10000H-0010H-320H=-10H2020年2月25日星期二172020年2月25日星期二1714、下列程序段中,各指令执行后AX,CF、OF、ZF和SF的内容如何变化。指令AXCFOFZFSFMOVAX,00000H————DECAX0FFFFH0001NOTAX0000H0001ANDAX,0FFFFH0000H0010CMPAX,0FFFFH0000H1000SUBAX,1200H0EE00H1001MOVCX,50EE00H1001SARAX,10F700H0001SARAX,CL0FFB8H0—01ADDAX,0FFFFH0FFB7H1001NEGAX0049H10002020年2月25日星期二182020年2月25日星期二1816、写出实现下列功能的指令或程序段。(1)将AL中的1、3、5位变反。测试数据为:00101010B,即2AHXORAL,2AH(2)判断AL中的1、3、5位是否均为1。若是将AL置1,否则将AL置0。多位同时为0可用TEST指令测试;故先将AL中的值取反,再判断;(2)解答MOVBL,ALNOTBLTESTBL,2AHJZNEXTMOVAL,0JMPEXITNEXT:MOVAL,1EXIT:……2020年2月25日星期二192020年2月25日星期二1916、写出实现下列功能的指令或程序段。(3)将AL中的高4位与BL中的低4位、AL中的低4位与BL中的高4位交换。MOVDL,ALMOVDH,BLMOVCL,4RORDL,CLMOVBL,DLRORDH,CLMOVAL,DHA7A6A5A4A3A2A1A0ALB7B6B5B4B3B2B1B0BLB3B2B1B0B7B6B5B4ALA3A2A1A0A7A6A5A4BL2020年2月25日星期二202020年2月25日星期二2016、写出实现下列功能的指令或程序段。(4)将标志寄存器的内容传送到AX。PUSHFPOPAX(5)将标志寄存器的TF位清0PUSHFPOPAXANDAX,0FEFFHPUSHAXPOPFP47最后一行2020年2月25日星期二212020年2月25日星期二2116、写出实现下列功能的指令或程序段。(6)将双字内容逻辑右移4位。设X位双字变量。假定双字数据在变量X中;MOVAX,wordptrXMOVDX,wordptrX+2MOVCX,4NEXT:SHRDX,1RCRAX,1LOOPNEXTMOVwordptrX,AXMOVwordptrX+2,DX2020年2月25日星期二222020年2月25日星期二2216、写出实现下列功能的指令或程序段。(7)将偏移地址为0100H开始的连续100个字节的数据单元传送到同一数据段中偏移地址为0150H的数据区中。MOVSI,100HMOVCX,100AGAIN:MOVAL,[SI]MOV[SI+50H],ALINCSILOOPAGAIN2020年2月25日星期二232020年2月25日星期二2316、写出实现下列功能的指令或程序段。(8)将A单元中的内容与B单元中的内容相乘后,结果保存中在C1单元的连续两个字节中。MOVAL,AMULBMOVwordptrC1,AX第4章MASM汇编语言知识2020年2月25日星期二242020年2月25日星期二253、说明下列两条语句的区别(1)XDB12H此语句中定义的X是一个变量;此语句可为X分配相应空间,其数值在内存中占一个字节;符号X可表示一个存储单元地址;(2)XEQU12H此语句中定义的X是一个常量;此语句并不会为X分配相应空间;符号X仅代替数值12