·1·习题3参考答案1.设BX=0123H,DI=1000H,DS=3200H,试指出下列各条指令中源操作数的寻址方式,对于是存储器操作数的,还需写出其操作数的有效地址和物理地址。(1)MOVAX,[2A38H](2)MOVAX,[BX](3)MOVAX,[BX+38H](4)MOVAX,[BX+DI](5)MOVAX,[BX+DI+38H](6)MOVAX,2A38H(7)MOVAX,BX参考答案:(1)直接寻址有效地址=2A38H,物理地址=32000H+2A38H=34A38H(2)寄存器间接寻址有效地址=0123H,物理地址=32000H+0123H=32123H(3)寄存器相对寻址有效地址=0123H+38H=015BH,物理地址=32000H+015B=3215BH(4)基址变址寻址有效地址=0123H+1000H=1123H,物理地址=32000H+1123H=33123H(5)相对基址变址寻址有效地址=0123H+1000H+38H=115BH,物理地址=32000H+115BH=3315BH(6)立即寻址(7)寄存器寻址2.设AX=96BCH,BX=AC4DH,CF=0。求分别执行指令ADDAX,BX和SUBAX,BX后,AX与BX的值各为多少?并指出标志位SF、ZF、OF、CF、PF、AF的状态。参考答案:执行ADDAX,BX后,AX=4309H,BX=AC4DH,SF=0ZF=0OF=1CF=1PF=1AF=1执行SUBAX,BX后,AX=EA6FH,BX=AC4DH,SF=1ZF=0OF=0CF=1PF=1AF=13.试比较CMP指令与SUB指令的异同。参考答案:CMP指令与SUB指令的不同点有两点:4.采用三种不同的方法实现AX与DX的内容交换。参考答案:第一种:XCHGAX,DX第二种:PUSHAXPUSHDXPOPAXPOPDX第三种:MOVBX,AXMOVAX,DXMOVDX,BX5.编写程序段实现:当DL中存放的数据是奇数时使AL=0,否则使AL=-1。参考答案:TESTDL,01HJNZNEXTMOVAL,0NEXT:MOVAL,-1·2·6.用尽可能少的指令实现使DL中的高4位内容与低4位内容互换。参考答案:MOVCL,4ROLDL,CL;RORDL,CL7.编写程序段,判断AL中的带符号数是不是负数。若是负数,则将-1送给AH;否则,将0送给AH。参考答案:SUBAL,0JSFSMOVAH,0FS:MOVAH,-18.假设DX=87B5H,CL=4,CF=0,确定下列各条指令单独执行后DX中的值。(1)SHLDL,1(2)SHRDX,CL(3)SARDX,CL(4)ROLDX,CL(5)RORDX,CL(6)RCLDX,CL(7)RCRDX,1参考答案:(1)DX=876AH(2)DX=087BH(3)DX=F87BH(4)DX=7B58H(5)DX=587BH(6)DX=7B54H(7)DX=43DAH9.按下列要求编写指令序列。(1)将AX中的低4位置1,高4位取反,其它位清0。(2)检查DX中的第1、6、11位是否同时为1。(3)清除AH中最低3位而不改变其它位,将结果存入BH中。参考答案:(1)XORAX,F000HANDAX,F00FHORAX,000FH(2)MOVAX,DXANDDX,0842HXORDX,0842HJZZERO┆ZERO:…DX中的第1、6、11位同时为1的情况┆·3·10.分析下面的程序段完成什么功能?(提示:请将DX与AX中的内容作为一个整体来考虑)MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL参考答案:实现将DX与AX中的32位数据逻辑左移4位11.设SS=1000H,SP=2000H,AX=345AH,BX=F971H,Flags=4509H,试分析执行以下指令PUSHBXPUSHAXPUSHFPOPCX之后,SP、SS、CX的值各为多少?参考答案:SP=1FFCHSS=1000HCX=4509H12.指出下列指令中哪些是错误的,并说明错误原因。(1)MOVDL,CX(2)MOVDS,1000H(3)MOV[DI],[BX](4)MOVDL,[BX][BP](5)XCHGAX,[5000H](6)PUSH3541H(7)INC[BX](8)POPCS(9)MOVA[BX+SI],0(10)MOVAL,300参考答案:(1)数据类型不匹配(2)立即数不能送段寄存器(3)两个存储器操作数之间不能直接传送数据(4)源操作数寻址不能为基址加基址(5)正确(6)PUSH指令的操作数不能为立即数(7)存储器操作数类型不明确(8)CS不能作为目的操作数使用(9)目的操作数类型需明确(10)操作数数据类型不匹配13.已知各寄存器和存储单元的状态如图3.19所示,请阅读下列程序段,并将中间结果填入相应指令右边的空格。·4·图3.19各寄存器和存储单元的当前状态值MOVDX,[BX+4];DX=(1A87H)PUSHDS;SP=(FFFEH)[SP]=(2050H)TESTAX,DX;AX=(8E9DH)SF=(0)ADCAL,[DI];AL=(DBH)XCHGAX,DX;AX=(1A87H)DX=(8eDBH)XORAH,BL;AH=(1EH)SARAH,1;AH=(0FH)CF=(0)15.假设以1000H为起始偏移地址的内存单元内容显示如图3.20所示,请指出在DEBUG下如下每条指令的寻址方式及执行后的结果。MOVAX,1000HMOVBX,AXMOVAX,[BX]MOVAX,10[BX]图3.20偏移地址为1000H处的内存单元内容参考答案:MOVAX,1000H;立即寻址,AX=1000HMOVBX,AX;寄存器寻址,BX=1000HMOVAX,[BX];寄存器间接寻址,AX=3412HMOVAX,10[BX];寄存器相对寻址,AX=8877H