《80X86/Pentium微型计算机原理及应用》教材课后习题参考答案第三章3-5(1)MOV SI, 2100H 源:立即数;目标:寄存器(2)MOV CX, DISP[BX] 源:基址,EA=BX+DISP,PA=DS×16+BX+DISP;目标:寄存器(3)源:寄存器;目标:寄存器间接寻址EA=SI,PA=DS×16+SI(4)源:基址加变址,EA=BX+SI,PA=DS×16+BX+SI;目标:寄存器(5)源:寄存器;目标:寄存器(6)源:基址,EA=BX+10H,PA= DS×16+BX+10H;目标:寄存器(7)源:寄存器间接,EA=BX,PA= ES×16+BX;目标:寄存器(8)源:带位移量的基址加变址,EA=BX+SI+20H,PA= DS×16+BX+SI+20H;目标:寄存器(9)源:寄存器;目标:寄存器间接,EA=BP,PA= SS×16+BP(10)源:寄存器;目标:存储器,EA=SP-2,PA= SS×16+SP-23-7(1)源操作数错,基址+基址不能用在存储器寻址方式中,只能基址+变量,改成MOV AX, [BX+SI](2)错,V ALUE1和V ALUE2一般为自己定义的变量名称,则此两操作数的组合形式为存储器和存储器,ADD指令无此组合形式(3)错,立即数不能直接传给段寄存器(4)错,CS不能作为目标操作数(5)错,立即数不能作为目标操作数,两个操作数互换位置即可(6)如果V ALUE1是用DW定义的WORD型变量,则此题正确,否则错误(7)错,段寄存器不能直接传给段寄存器(8)错,移位次数超过1时,应该先将移位次数送给CL,改成MOV CL, 3; ROL [BX][DI],CL(9)错,NOT操作符只有一个操作数(10)对,CS不能作为目标操作数,但可以作为源操作数(11)错,不能直接将立即数压入堆栈(12)错,两处错误,1:IN指令应该AL在前,端口地址在后;2:端口地址100H超过8位数能表示的范围,应该先将100H送给DX,改成MOV DX, 100H; IN AL, DX(13)错,LEA指令的第二操作数必需为存储器寻址方式(14)错,CX不能作为寄存器间接寻址方式,应将CX改成BX/BP/SI/DI之一3-8(1)AX=3355H, SP=1FFEH(2)AX=3355H, DX=4466H, SP=1FFCH3-9 BX=4154H, [2F246H]=6F30H3-10 BX=139EH3-11 SI=0180H, DS=2000H3-12(1) CL=F6H(2) [1E4F6H]=5678H(3) BX=9226H, AX=1E40H(4) SI=9226H, [SI]=[1E4F6]=0024H(5) AX=5678H, [09226H]=1234H3-13 AF=0, CF=1, OF=1, SF=0, ZF=03-14(1) MOV AX, 0 XOR AX, AX SUB AX, AX(2) MOV CL, 4ROL BL,CL (或ROR BL, CL)(3) 题中没规定N1和N2是8位还是16位数,现假定都8位数(也可假定是16位数,程序不一样)MOV AH, 0MOV AL, N1IDIV N2MOV M1, ALMOV M2, AH(4) 题目的意思即使BX的b4,b6,b11位清零AND BX, 0F7AFH(5) XOR AX, 4020H(6) TEST DX, 0201H(7) TEST CL, 1JNZ NEXTINC CL (或DEC CL)NEXT:3-15 假设题目的意思理解为编号从1开始(1) LEA BX, BLOCK+(6-1)*2MOV AX, [BX](2) LEA BX, BLOCKMOV AX, 10[BX](3) LEA BX, BLOCKMOV SI, 0MOV AX, 10[BX][SI](4) MOV AX, BLOCK+103-16(1) 结果存在地址是580H端口中,[580H]=60H(2) 结果存在地址是580H端口中,[580H]=8060H(即[580H]=60H, [581H]=80H)(3) 结果存在AL中,AL=[40H]=4FH(4) 结果存在AX中,AL=[40H]=4FH, AH=[41H](题目中没有给出端口41H中的值)(5) 结果存在地址是45H端口中,[45H]=60H(6) 结果存在地址是45H端口中,[45H]=8060H(即[45H]=60H,[46H]=80H)3-17 假定每小题中NUM1和NUM2都是和题中指定的操作数等长,即(1)中NUM1和NUM2为字变量,(2)(3)中为字节变量,(4)中为双字变量(1) MOV AX, NUM2ADD NUM1, AX(2) MOV CX, 4LEA BX, NUM1XOR AL, AL ; AL清零L1: ADD AL, [BX]INC BXLOOP L1MOV RES, AL(3) MOV CX, 8LEA BX, NUM1XOR AX, AXL1: ADD AL, [BX]JNC L2INC AHL2: INC BXLOOP L1MOV AX, WORD PTR RES(4) MOV AX, WORD PTR NUM1ADD WORD PTR NUM2, AXMOV AX, WORD PTR NUM1+1ADC WORD PTR NUM2+1, AX ; (MOV指令不影响CF标志位,否则不能这么写) 3-18(1) MOV CX, 8LEA BX, NUM1XOR AX, AXL1: ADD AL, [BX]DAAJNC L2INC AHL2: INC BXLOOP L1MOV AX, WORD PTR RES(2) MOV AL, NUM1SUB AL, NUM2DASMOV RES, AL差=90H, CF=13-19(1) MOV AL, NUM1MUL NUM2 ; 8位乘8位MOV WORD PTR RES, AX(2) MOV AX, NUM1IMUL NUM2 ;16位乘16位MOV WORD PTR RES, AXMOV WORD PTR RES+2, DX(3)MOV AL, NUM1MOV BL, 46CBWDIV BLMOV WORD PTR RES, AX(4) MOV AX, NUM1CWDIDIV NUM2 (或DIV NUM2)MOV WORD PTR RES, AXMOV WORD PTR RES+2, DX3-20(1)53乘以2MOV AL, 53SHL AL, 1结果106(2) -49乘以2MOV AL, -49 ; -49补码为CFHSHL AL, 1 ;AL=9EH, 真值即为-98结果-98除以2类似3-21(1) BX=009AH(2) BX=15CH(3) BX=8071H(4) BX=10F7H(5) BX=FF1CH3-22(1) DX=[20506]=0006H BX=0004H(2) SP=1FFEH, [SP]=CX=FFFEH(3) CX=BX=0004H(4) AX=8094H, CF=0(5) AL=[20508H]=87H(6) AL=94H+37H+1=CCH, CF=0, AL=32H(7) SI=9(8) DI=9(9) [DI]=[2050A]=AL=94H(10) AX=17C6H, DX=8094H(11) AH=84H, BL=4(12) IP=DX=17C6H3-23(1) 将存储器中以FIRST为起始地址连续10个字节复制到以SECOND为起始地址的地方(2) 将存储器中数据段中以偏移地址0404H为起始地址,连续80H个字节的空间清零3-24MOV BX, 5MUL BXMOV BX, 2DIV BX3-26 MOV BX, 0A80HMOV AL, 5XLAT3-27(1) IP=1256(2) IP=3280H(3) IP=2450H3-28 IP=009A, CS=2000, [SP]=8F, [SP+1]=3DH, [SP+2]=50H, [SP+3]=40H3-29CMP AL, 1JNZ LAB1CMP AL, 2JNZ LAB2CMP AL,4JNZ LAB3最后一个条件(若位0至位2都是0,则顺序执行),相当于没有,因为不管符不符合这个条件,程序都会按顺序执行。
3-31MOV AX, XCMP AX, 50JG N_HIGHSUB AX, YJO OVERFLOWJNS NEXTNEG AXNEXT: MOV RESULT, AX3-32(1) MOV AX, ZADD AX, XSUB W, AXMOV AX, WMOV Z, AX(2) MOV AX, XADD AX, 6ADD AX, WADD R, 9SUB AX, R(3) MOV AX, WMUL XADD Y, 6DIV YMOV Z, AXMOV R, DX。