微机与原理习题答案.ppt
2023/9/10,第三章作业习题课,杭州电子科技大学自动化学院,微机原理与接口技术,2023/9/10,2.DS=1000H,BX=0200H,SI=0002H(10200H10205H)依次存有10H,2AH,3CH,46H,59H,6BH(1)MOV AX,0200H;AX=0200(2)MOV AX,200H 物理地址=1000H10H+0200H=10200H,AX=2A10H(3)MOV AX,BX;AX=0200H(4)MOV AX,3BX 物理地址=1000H10H+0200H+3H=10203H,AX=5946H(5)MOV AX,BX+SI 物理地址=1000H10H+0200H+2H=10202H,AX=463CH(6)MOV AX,2BX+SI 物理地址=1000H10H+200H+2H+2H=10204H,AX=6B59H,2023/9/10,3.DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,VAL=0030H(1)MOV AX,100H 直接寻址方式,10100H 物理地址DS10H+100H=10000H+0100H=10100H(2)MOV AX,VAL 直接寻址方式,10030H 物理地址DS10H+VAL=10000H+0030H=10030H(3)MOV AX,BX 寄存器间接寻址,10100H 物理地址DS10H+BX=10000H+0100H=10100H(4)MOV AX,ES:BX 寄存器间接寻址,20100H 物理地址ES10H+BX=20000H+0100H=20100H(5)MOV AX,SI 寄存器间接寻址,100A0H物理地址=DS10H+SI=10000H+00A0H=100A0H,2023/9/10,(6)MOV AX,BX+10H 寄存器相对寻址,10110H物理地址=DS10H+BX+10H=10000H+0100H+10H=10110H(7)MOV AX,BP 寄存器间接寻址,35200H物理地址=SS10H+BP=35000H+0200H=35200H(8)MOV AX,VALBPSI相对基址变址寻址,352D0H物理地址=SS10H+BP+SI+VAL=35000H+0200H+00A0H+0030H=352D0H(9)MOV AX,VALBXDI相对基址变址寻址,10154H物理地址=DS10H+BX+DI+VAL=10000H+0100H+0024H+0030H=10154H(10)MOV AX,BPDI基址变址寻址,35224H物理地址=SS10H+BP+DI=35000H+0200H+0024H=35224H,2023/9/10,6(1)MOVDL,AX 错,寄存器寻址方式中,目的操作数与源操作数长度必须一致(2)MOV 8650H,AX 错,目的操作数不可以是立即数(3)MOVDS,0200H 错,MOV指令不允许将立即数传入段寄存器(4)MOVBX,1200H 错,MOV指令的两个操作数不能同时为存储器(5)MOVIP,0FFH 错,IP不能作为MOV指令的目的操作数(6)MOVBX+SI+3,IP 错,IP不能作为MOV指令的源操作数(7)MOVAX,BXBP 错,BX与BP不可以同时出现在源操作数当中(8)MOVAL,ES:BP 对,2023/9/10,(9)MOVDL,SIDI 错,SI与DI是两个变址寄存器,不可以同时出现在源操作数中。(10)MOV AX,OFFSET 0A20H 错,OFFSET后面跟的应该是符号地址,再把符号地址的值作为操作数。(11)MOV AL,OFFSET TABLE 错,TABLE的偏移地址是16位,目的与源长度不一致(12)XCHGAL,50H 错,交换指令可以在寄存器之间,寄存器和存储器之间进行,不可以是立即数。(13)INBL,05H 错,BL不能作为IN指令的目的操作数,只能用AL或AX(14)OUTAL,0FFEH 错,端口地址0FFEHFFH,应用DX间接寻址,同时源操作数和目标操作数的位置颠倒了,应改为OUT DX,AL。,2023/9/10,8.SS=1050H,SP=0100H,AX=4860H,BX=1287H,2023/9/10,8,10.ARRAY DB NEWDB 7 DUP(?)SUM DW 0 AVERAGEDB 0(1)MOVCX,07H MOVBX,00H NEXT:MOVAL,ARRAYBX ADDAL,5 DAA MOVNEWBX,AL INCBX LOOPNEXTHLT,2023/9/10,9,(2)MOVCX,06H MOVBX,01HMOVAH,00H MOV AL,ARRAY L1:ADD AL,ARRAYBX DAA ADCAH,00H;将进位加到AH中 INCBX LOOP L1MOVSUM,AX,2023/9/10,10,(3)MOVDX,SUM;DX=0H(BCD码)MOVBL,07HMOVAX,DX;取千位、百位数ANDAL,0F0HMOVCL,04HROLAL,CL;AX=00HAAD;ALAH10AL,AH00 DIVBL;十位商在AL中,余数在AH中MOVAVERAGE+1,AL;存平均成绩十位MOVAL,DL;取个位和数ANDAL,0FHAAD;ALAH10AL,AH00 DIVBL;个位商在AL中,余数在AH中MOVAVERAGE,AL;存平均成绩个位MOVAVERAGE+2,AH;存余数,2023/9/10,11,11.AX=2508H,BX=0F36H,CX=0004H,DX=1864H(1)ANDAH,CLAH=04H,CF=0;(0010 0101B与0000 0100B)(2)ORBL,30HBL=36H,CF=0;(0011 0110B或0011 0000B)(3)NOTAXAX=DAF7H,CF无影响;(0010 0101 0000 1000B取反后1101 1010 1111 0111B)(4)XORCX,0FFF0HCX=FFF4H,CF=0;(0000 0000 0000 0100B和1111 1111 1111 0000B异或后1111 1111 1111 0100B)(5)TEST DH,0FHTEST操作并不修改结果,CF=0;,2023/9/10,12,(6)CMPCX,00HCMP操作并不修改结果,CF=0;(7)SHRDX,CLDX=0186H,CF=0;(8)SARAL,1AH=04H,CF=0;(9)SHLBH,CLBH=F0H,CF=0;(10)SALAX,1AX=4A10H,CF=0;(0010 0101 0000 1000B 左移)(11)RCLBX,1若程序执行之前CF=0,BX=1E6CH,CF=0;若程序执行之前CF=1,BX=1E6DH,CF=0。(12)ROR DX,CLDX=4186H,CF=0。,2023/9/10,13,12.DATASEGMENT STRING DB The personal computer&TV DATA ENDSEDATA SEGMENTGET_CHARDB26DUP(?)NEW_STRDBThe computer EDATA ENDS(1)MOV SI,OFFSET STRING MOV DI,OFFSET GET_CHAR MOV CX,001AH CLD REPMOVSB,2023/9/10,14,(2)MOVSI,OFFSET STRING MOVDI,OFFSET NEW_STR MOV CX,001AH CLD REPZCMPSB;DS:SI-ES:DI JNECLR_AL MOVAL,1 JMP SET_BL CLR_AL:MOVAL,0 SET_BL:MOVBL,001AHSUBBL,CLHLT,2023/9/10,15,(3)MOVDI,OFFSETSTRING MOVCX,001AH MOVAL,用空格替换&JMPNEXT,2023/9/10,16,(4)MOV SI,OFFSET STRING;数据段,源串 MOV DI,OFFSET CAPS;附加段,大写字符 MOV BX,OFFSET CHART;附加段,其它字符 MOV CX,001AH CLD L1:LODSB;ALDS:SIMOVSI-1,00H;取出字符后该单元清零 CMPAL,A JBOTHER CMPAL,ZJAOTHERSTOSB;存大写字符JMPL2 OTHER:XCHGBX,DI;存其它字符 STOSB XCHG BX,DI L2:LOOPL1 HLT,2023/9/10,17,14.(1)JMPPROG_N 段内直接近转移,目的地址为1200H:0278H(或12278H)(2)JMPBX 段内寄存器间接转移,目的地址为1200H:0300H(或12300H)(3)JMPBX 物理地址DS10H+BX=2000H10H+0300H=20300H(20300H)=4800HIP 段内存储器间接转移,目的地址为1200H:4800H(或16800H)(4)JMPFARPROG_F 段间立接转移,目的地址为3400H:0ABCH(或34ABCH)(5)JMPDWORDPTRBX 物理地址DS10H+BX=2000H10H+0300H=20300H(20300H)=4800HIP,(20302H)=00FFHCS 段间存储器间接转移,目的地址为00FFH:4800H(或057F0H),2023/9/10,18,JMP改为CALL后,目的地址与JMP相同。(1)CALLPROG_N段内直接调用,3字节指令,0103H入栈(2)CALLBX段内寄存器间接调用,2字节指令,0102H入栈(3)CALLBX段内存储器间接调用,2字节指令,0102H入栈(4)CALLFARPROG_F段间直接调用,5字节指令,1200H和0105H分别入栈(5)CALLDWORDPTRBX段间间接调用,2字节指令,1200H和0102H分别入栈,2023/9/10,19,15.(1)LOOPNEXT(2)LOOPENEXT(3)LOOPNENEXTSTART:MOVAX,01HMOVBX,02HMOVDX,03HMOVCX,04HNEXT:INCAXADDBX,AXSHRDX,1()程序运行前 DX=00000011B(1)AX=05H BX=10H CX=00H DX=00H(2)AX=02H BX=04H CX=03H DX=01H(3)AX=03H BX=07H CX=02H DX=00H,2023/9/10,20,18.,(1)中断类型号为0040H/4=10H(2)中断服务程序的段地址为D169H,偏移地址为240BH,即D169H:240BH,物理地址为D169H10H240BHD3A9BH,