第3章习题参考答案分别指出下列指令中的源操作数和目的操作数的寻址方式。答:源操作数目的操作数(1)MOVAX,[SI]寄存器寻址寄存器间接寻址(2)MOVDI,100寄存器寻址立即寻址(3)MOV[BX],AL寄存器间接寄存器(4)MOV[BX][SI],CX基址+变址寄存器(5)ADDDX,106H[SI]寄存器变址(6)PUSHAX寄存器(7)ADDDS:[BP],AX带段超越寄存器间接寻址寄存器(8)ORAX,DX寄存器寄存器2.设寄存器(DS)=2000H,(SS)=1500H,(ES)=3200H,(SI)=0A0H,(BX)=100H,(BP)=10H,数据段中变量VAL的偏移地址为50H。试指出下列各条指令中源操作数的寻址方式是什么?对于存储器操作数,其物理地址是多少?答:操作数的寻址方式存储器操作数PA(1)MOVAX,[100H]直接寻址20100H(2)MOVCX,ES:[BX]带段超越的寄存器间接寻址32100H(3)MOVDX,[BX][SI]基址+变址寻址200F0H(4)MOVAX,VAL[SI]变址寻址200F0H(5)MOVBX,1234[BX]基址寻址205D2H(6)MOVAX,[BP]寄存器间接寻址15010H3.判断下列指令有误错误,若有,则改之。答:(1)PUSHCL有错,对堆栈操作数总是16位的。改为:PHSHCX(2)ADCAX,0ABH无,只是CF的值是不确定的(0或1)(3)OUT3EBH,AX有,输出设备的端口地址若超过8位,应使用DX间接寻址。改为:MOVDX,3EBHOUTDX,AX(4)MULAL,CL有错。乘法指令中有AX或AL寄存器是隐含的。改为:MULCL(5)MULAX,25有错。乘法指令中不能用立即数。改为:MOVBX,25MULBX(6)ROLDX,5有错。移位的次数由CL寄存器控制。改为:MOVCL,5ROLDX,CL(7)CALLFARSUM无错。(8)POPFR有错。寄存器FR是不能单独操作的,改为:POPF(9)MOV234H,BX有错。立即数不能作为目的操作数。改为:MOVBX,234H(10)INC[SI]有错。该错误主要是针对汇编程序的。由于翻译这条指令时,不知是8位的还是16位的目标码,故要加入宏汇编的综合运算符PTR。改为:INCBYTEPTR[SI](11)ADD[BX],456H有错。改为:ADDWORDPTR[BX],456H(12)INTO有错。这条指令是没有的(13)DIVAX,BX有错。除法指令中,AX或DX.AX作为被除数是隐含的。改为:DIVBX(14)DEC[BP]有错。与题(10)有类似的错误。改为:DECWORDPTR[BP](15)XLATBXXLAT的操作数是隐含的,它是一条复合指令,在执行该指令之前,将BX指向表的手地址,AL中存入被转换的码,然后执行该指令。(16)ADDCX+1有错。操作数CX+1是完全错误的。改为:INCCX(17)DAAAX有错。调整指令是专门对AL寄存器的内容进行调整的,故指令中操作数是隐含的。改为:DAA4选择题(1)带符号数-86所表示的二进制数值是(A)A.10101010BB.01100101BC.10011101BD.11001011B(2)执行MOVDL,2AH和SHRDL,1两条指令后,DL寄存器与CF标志分别为(D)A.DL=10110110CF=1B.DL=00110101CF=0C.DL=00110100CF=1D.DL=00010101CF=1(3)可将AX寄存器中D0,D5,D8和D11位求反,其余位不变的指令是(C)A.ANDAX,921HB.ORAX,910HC.XORAX,0921HD.XORAX,0110H(4)某存储单元物理地址为3B4FH,其段地址和偏移地址可选为(B)A.3B4FH和104EHB.3B40H和00FEHC.2A00H和114FEHD.3B4FH和0H(5)两个8位二进制数00110101及10110110做“异或”操作后,寄存器FR的下面3个状态标志分别是(C)A.PF=1SF=1ZF=0B.PF=0SF=1ZF=1C.PF=0SF=1ZF=0D.PF=1SF=1ZF=1(6)当执行存储器写指令时,如MOV[SI],AX,则CPU的外部管脚状态是(D)A.WR=1RD=1M\IO=0B.WR=0RD=1M\IO=1C.WR=1RD=0M\IO=1D.WR=0RD=1M\IO=15:已知(DS)=2000H,(BX)=100H,(SI)=02H,从物理地址20100H单元开始,依次存放数据12H,34H,56H,78H,而从物理地址21200H单元开始,依次存放数据2AH,,4CH,8BH,98H。试说明下列各条指令单独执行后AX寄存器的内容。答:(1)MOVAX,3600H3600H(2)MOVAX,[1200H]4C2AH(3)MOVAX,BX0100H(4)MOVAX,[BX]3412H(5)MOVAX,1100H[BX]4C2AH(6)MOVAX,[BX][SI]7856H6.设堆栈指针SP的初值为2400H,(AX)=4000H,(BX)=3600H,问:(1)执行指令“PUSHAX”后,SP=?(2)再执行“PUSHAX”和”POPAX”后,(SP)=?(AX)=?(BX)=?试画出堆栈变化示意图。答:(1)执行指令“PUSHAX”后,则将AX的内容推入堆栈,SP先减2((SP)=23FEH),以指示栈顶位置,AL的内容推入23FEH,而AH的内容推入23FFH(2)再执行“PUSHAX”,SP先减2((SP)=23FCH),BL的内容推入23FCH,而BH的内容推入23FDH(3)再执行“POPAX”,从SP指针指示的单元(23FCH)中弹出数据,存入AX中,SP加2((SP)=23FEH),指示栈顶位置。故3条指令执行完毕,(SP)=23FEH(AX)=3600H(BX)=3600H7.指出下面指令序列的执行结果。答:(1)MOVDX,2000HMOVBX,1000HXHGHBX,DX(BX)=2000H,(DX)=1000H(2)MOVAX,1234HPUSHAXPOPBX(AX)=1234H,(BX)=1234H(3)LEADX,[2000H]MOVBX,DX(BX)=2000H(4)MOVAL,08ADDAL,08AAA(AX)=0106(5)MOVAL,48HADDAL,39HDAA(AL)=87H(6)ANDAL,ALMOVAL,80ADCAL,AL(AL)=0A0H(7)MOVDX,OFFFHNEGDX(DX)=0001H(8)MOVBL,OB8HRORBL,1(BL)=5CH,CF=0(9)SUBAX,AXANDDX,AX(DX)=0(10)MOVCL,3MOVAH,42HSHRAH,XL(AH)=08H,CF=0(11)MOVAX,34EBHMOVCL,5FHDIVCL(AX)=8FH(12)MOVAL,08HMOVBL,09MULBLAAM(AX)=0702H(13)MOVBL,9MOVAX,0702HAADDIVBL(AX)=0008H(14)MOVAL98HCBW(AX)=0FF98H(15)MOVAH,2MOVDL,`W`INT21H结果=执行DOS的2号功能调用,在屏幕上显示字母W