您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 微机原理第四章习题答案
1.8086语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?答:数据操作数的寻址方式有七种,分别为:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对基址变址和相对基址变址寻址。其中寄存器寻址的指令执行速度最快。2.若DS=6000H,SS=5000H,ES=4000H,SI=0100H,BX=0300H,BP=0400H,D=1200H,数据段中变量名NUM的偏移地址为0050H,试指出下列源操作数的寻址方式和物理地址是多少?(1)MOVAX,[64H]答:寻址方式为直接寻址;PA=60064H(2)MOVAX,NUM答:寻址方式为直接寻址;PA=60005H(3)MOVAX,[SI]答:寻址方式为寄存器间接寻址;PA=60100H(4)MOVAX,[BX]答:寻址方式为寄存器间接寻址;PA=60300H(5)MOVAX,[BP]答:寻址方式为寄存器间接寻址;PA=50400H(6)MOVAL,[DI]答:寻址方式为寄存器间接寻址;PA=61200H(7)MOVAL,[BX+1110H]答:寻址方式为寄存器相对寻址;PA=61410H(8)MOVAX,NUM[BX]答:寻址方式为寄存器相对寻址;PA=60305H(9)MOVAX,[BX+SI]答:寻址方式为基址变址寻址;PA=60400H(10)MOVAX,NUM[BX][DI]答:寻址方式为相对基址变址寻址;PA=61505H3.设BX=637DH,SI=2A9BH,位移量为C237H,试确定由这些寄存器和下列寻址方式产生的有效地址。(1)直接寻址答:有效地址为EA=C237H(2)用BX的寄存器间接寻址答:有效地址为EA=637DH(3)用BX的相对寄存器间接寻址答:有效地址为EA=125B4H(4)基址加变址寻址答:有效地址为EA=8E18H(5)相对基址变址寻址答:有效地址为EA=1504FH其中,(3)和(5)中产生进位,要把最高位1舍去。4.指出下列指令是否正确,若不正确情说明原因。(1)MOVDS,2010H;立即数不能传送到DS(2)PUSHAL;栈操作,操作数类型必须为WORD类型(3)MOVDX,[SP];SP寄存器不能做间址寄存器(4)INAL,0A00H;I/O指令的直接寻址,地址只能为8位(5)XCHGCL,CH;正确(6)SHRAX,3;移位超过一位时,应采用CL寄存器间址(7)AAACX;非组合的BCD码加法调整AAA指令应为隐含操作数(8)ADD[BP+DI];加法指令ADD,缺少源操作数(9)OUTDX,CL;I/O指令操作数只能用AX、AL提供,端口地址可以是8位的直接地址或用DX间址(10)CBWBH;符号扩展指令为隐含操作数(11)ADD03ECH;加法指令应为双操作数指令,立即数不能做目的操作数(12)MOVBX,[SI+DI];源操作数形式错误,SI和DI不能同时做为间址寄存器(13)MOVDI,[AX];AX不能做为间址寄存器(14)OUT258H,BX;I/O指令格式错误,见(9)题的解释(15)SHLAX,3;移位指令,位移位数大于1时,应用CL来指明(16)MOV64H,AL;立即数不能做为目的操作数(17)ADDAL,6600H;源、目的操作数的类型不一致(18)MOV[BX],[SI];传送指令中,两个操作数不能同时为存储器操作数(19)XCHGAX,8800H;交换指令的操作数不能使用立即数(20)MOVAX,[BX+DX];传送指令的源操作数,不能使用立即数(21)LEABX,1000H;有效地址传送指令的源操作数不能为立即数,必须是存储器操作数(22)DIV0010H;正确(23)LEADX,DI;同(21)题,源操作数不能为寄存器操作数(24)MULAX,200H;乘法指令的目的操作数是隐含的,不能出现在指令中(25)MOVAX,[BX+BP];传送指令中源操作数格式错,BX和BP不能同时为间址寄存器(26)CMP[BX],[SI];比较指令的两个操作数不能同时为存储器操作数(27)OUTDX,BX;I/O指令中,源操作数只能使用AL或AX寄存器(28)ANDOFH,AL;“与”指令中,目的操作数不能使用立即数(29)SAL[BX],CX;移位指令,移位位移不能用CX寄存器指明(30)JMPFAR[BX+SI];转移指令中转移的目标地址表达方式错误;如果是段内间接转移,应为:JMPWORDPTR[BX+SI];如果是段间间接转移,应为:JMPDWORDPTR[BX+SI](31)JNZAAA;不相等转移指令中,符号地址(标识符)不能使用系统中的保留字(32)JMPNEXT;正确(33)SBCAX,[DX];指令助记符错,源操作数表示方式错(34)MOVCS,DS;段寄存器之间不能传送数据,CS寄存器也不能做为目的操作数(35)ADDDS,AX;加法指令中段寄存器不能做为操作数(36)MOVAL,CX;源、目的操作数的类型不一致,见(17)题(37)INC[BX];没有指定存储器操作数类型(38)MOVCL,A8H;源操作数为16进制的立即数,16进制数以字母开头时应在前面加“0”(39)MOVES,DS;错同(34)题(40)INAL,BX;I/O指令端口地址表示错误,只能用8位立即数或DX间址5.设一个字节数据X存放AL寄存器中,试说明下列程序的功能:XORAH,AH;AH清零SALAX,1;AX左移一位,相当于2XMOVBX,AX;2X送BX暂存MOVCL,2SALAX,CL;AX左移二位,2X×4=8XADDAX,BX;2X+8X=10X该段程序实现了字节数据X乘10,结果在AX中。6.试编程实现:(1)AL寄存器的低4位清0(2)BL寄存器的低4位置1(3)CL寄存器的低4位取反(4)测试DL寄存器的最低2位是否同时为0,若是,将0送入BL寄存器;否则将1送入BL寄存器。;①AL寄存器的低4位清0;②BL寄存器的低4位置1;③CL寄存器的低4位取反;④测试DL寄存器答:程序段如下ANDAL,0F0HORBL,0FHXORCL,0FHTESTDL,03HJZNEXTMOVBL,1JMPNEXT1NEXT:MOVBL,0NEXT1:HLT7.若有两个4字节的无符号数相加,这两个数分别存放在2000H和3000H开始的存储单元中,得到的和存放在2000H开始的内存单元。试编程完成。答:程序段如下MOVAX,[3000H]ADD[2000H],AXMOVAX,[3002H]ADC[2002H],AX8.设从2000H为首址的内存中,存放着10个带符号的字节数据,试编程完成:找出其中最大的数,并存入2000H单元。答:程序段如下MOVBX,2000HMOVCX,9MOVAL,[BX]N2:INCBXCMPAL,[BX]JGEN1MOVAL,[BX]N1:LOOPN2MOV[2000H],ALHLT9.用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?用这4个寄存器分别组合间接寻址时,物理地址是怎样计算的?举例说明。答:BX、SI、DI用于在数据段寻址,BP用于在堆栈段寻址。在数据段物理地址为:PA=DS×10H+BX/SI/DI或者为:PA=DS×10H+BX+SI或(BX+DI)在堆栈段物理地址为:PA=SS×10H+BP或者为:PA=SS×10H+BP+SI或(BP+DI)举例如下:MOVAX,[BX+SI];在数据段寻址,PA=DS×10H+BX+SIMOVAX,[BP+DI];在堆栈段寻址,PA=SS×10H+BP+DI;答:执行完该条指令后AX=1400H;答:执行完该条指令后AX=0300H;答:执行完该条指令后AX=4C2AH;答:执行完该条指令后AX=3412H10.已知:DS=2000H,BX=0300H,SI=0002H,(20300H)=12H,(20301)=34H,(20302H)=56H,(20303H)=78H,(21400H)=2AH,(21401H)=4CH,(21402H)=B7H,(21403H)=65H试说明下列各条指令执行完后AX寄存器的内容。(1)MOVAX,1400H(2)MOVAX,BX(3)MOVAX,[1400H](4)MOVAX,[BX]11.根据以下要求,试写出相应的汇编语言指令。(1)把BX寄存器和DX寄存器的内容相加,结果存入BX寄存器中。答:指令为ADDBX,DX(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。答:指令为ADDAL,[BX+SI](3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX相加,并把结果存回存储器中。答:指令为ADD[BX+0B2H],CX(4)用位移量为0524H的直接寻址方式把存储器中的一个字与立即数3C5AH相加,并把结果送回该存储单元。答:指令为ADD[0524H],3C5AH12.已知堆栈段寄存器SS的内容是0FF0AH,堆栈指针寄存器SP的内容是0008H,先执行两条把8057H和0F7CH分别进栈的PUSH指令,再执行一条POPBX指令。试画出堆栈区和SP的内容过程变化示意图(标出存储单元的物理地址)。答:将8057H和0F7CH分别进栈后,SP=0004H,再执行一条POPBX指令后,SP=0006H,BX=0F7CH。堆栈区和SP的内容过程变化示意图如下:SP=0006HSS=0FF0AHSP→SP=0004HSP=0008HSP→SP→13.字节扩展指令和字扩展指令用在什么场合?举例说明。答:用在除法运算中,对带符号数的被除数进行扩展;例如:当被除数在AX中,除数在BX中时CDWIDIVBX14.写出执行以下计算的指令系列。其中X、Y、Z、R、W均为存放16位带符号数单元的地址。(1)Z←W+(Z-X)答:指令系列如下7CH0FH57H80H××H××H××H7CH0FH57H80H××H××H××H0FF0A0H0FF0A1H0FF0A2H0FF0A3H0FF0A4H0FF0A5H0FF0A6H0FF0A7H0FF0A8H××H0FF0A9H××H0FF0AAH××HMOVAX,ZSUBAX,XADDAX,WMOVZ,AX(2)Z←W-(X+6)-(R-9)答:指令系列如下ADDX,6SUBR,9MOVAX,WSUBAX,XSUBAX,RMOVZ,AX(3)Z←(W×X)/(Y+6),R←余数答:指令系列如下MOVAX,WIMULXMOVBX,YADDBX,6IDIVBXMOVR,DX(4)Z←((W-X)/5×Y)×2答:指令系列如下MOVAX,WSUBAX,XCDWIDIV5IMULYIMUL2ADDDX,CFMOVZ,AX15.写出完成以下操作的程序段。假设各变量的值均为用压缩BCD码表示的二位十进制数(1)U←V+(S-6)答:程序如下MOVAL,SSUBAL,6DASADDAL,VDAAMOVU,AL(2)U←(X+W)-(Z-V)答:程序如下MOVAL,ZSUBAL,VDASMOVBL,ALMOVAL,XADDAL,WDAASUBAL,BLDASMOVU,AL16.移位指令和循环移位指令在执行操作时,有什么差别?在编制乘除法程序中,为什么常用移位指令来代替乘除法指令?试编制一个程序段,实现CX中的数除以4,结果仍放在CX中。答:逻辑移位指令用于无符号数的移位,左移时,最低位补0,右移时,最高位补0。算术移位指令用于对带符号数的移位,左移时,最低位补0,右移时,最高位的符号在右移的同时,且保持。小循环移位指令ROL、ROR是只对目标操作数进行循环,即不含CF的左、右移循环移位。大循环移位指令RCL、RCR是把标志位CF也包含在循环中的左、右移循环移位。对于二进制数,左移一位相当于乘二,右移一位相当于除二,所以可以用移位指令来代替乘除法指令。SARCX,1;CX算术右移一位,除二SARCX,1;CX算术右移一位,除二17.在0628H单元处有一条二字
本文标题:微机原理第四章习题答案
链接地址:https://www.777doc.com/doc-2470057 .html