第5章 80868088指令系统习题参考答案

第5章 80868088指令系统习题参考答案
第5章 80868088指令系统习题参考答案

5.1

答:(1)在指令 MOV AX,0ABH 中,源操作数字段的寻址方式是立即数寻址,其物理地址值=(CS)*10H+(IP);

(2)在指令 MOV AX,BX 中,源操作数字段的寻址方式是寄存器寻址,操作数在BX中,无物理地址;

(3)在指令 MOV AX,[100H] 中,源操作数字段的寻址方式是直接寻址,其物理地址值=(DS)*10H+100 =29000H+100H=29100;

(4)在指令 MOV AX,VAL 中,源操作数字段的寻址方式是直接寻址,其物理地址值=(DS)*10H+50H =29000H+50H=29050H;

(5)在指令 MOV AX,[BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(DS)*10H +(BX)=29000H+100H=29100H;

(6)在指令 MOV AX,ES:[BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(ES)*10H+(BX)=21000H+100H=21100H;

(7)在指令 MOV AX,[BP] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(SS)*10H +(BP)=15000H+10H=15010H;

(8)在指令 MOV AX,[SI] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(DS)*10H +(SI)=29000H+0A0H=290A0H;

(9)在指令 MOV AX,[BX+10] 中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=(DS)*10H+(BX)+0AH= 29000H+100H+0AH =2910AH;

(10)在指令 MOV AX,VAL[BX] 中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=(DS)*10H+(BX)+50H= 29000H+100H+50H= 29150H;

(11)在指令 MOV AX,[BX][SI] 中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=(DS)*10H+(BX)+(SI) =29000H+100H+0A0H =291A0H;

(12)在指令 MOV AX,[BP][SI] 中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=(SS)*10H+(BP)+(SI)=15000H+10H+0A0H =150B0H

5.2

答:

(1)AX寄存器的内容为1200H;

(2)AX寄存器的内容为0100H;

(3)将物理地址=(DS)*10H+1200H=21200H开始的两个单元内容送AX,执行完后AX寄存

器的内容为4C2AH;

(4)将从物理地址=(DS)*10H+(BX)=20100H开始的两个单元内容送AX,故执行完后AX

寄存器的内容为3412H;

(5)将从物理地址=(DS)*10H+(BX)+1100H=21200H开始的两个单元内容送AX,故执行

完后AX寄存器的内容为4C2AH;

(6)将从物理地址=(DS)*10H+(BX)+(SI)=20102H开始的两个单元内容送AX,故执行

完后AX寄存器的内容为7856H;

(7)将从物理地址=(DS)*10H+(BX)+(SI)+1100H=21202H开始的两个单元内容送AX,

故执行完后AX寄存器的内容为65B7H;

5.3

答:(1)MOV AL,BX 错,源操作数为字类型,目的操作数为字节类型,二者不一致。应改为:

MOV AX,BX 或 MOV AL,BL ;

(2)MOV AL,SL 错,SI寄存器不能分为高8位和低8位使用,即没有SL寄存器。应改为:

MOV AX,SI

(3)INC [BX] 错,未指定操作数的类型。应改为:INC BYTE PTR [BX] (4)MOV 5,AL 错,目的操作数使用了立即数,在指令中一般不允许。应改为:MOV DS:[5],AL

(5)MOV [BX],[SI] 错,源操作数和目的操作数均为内存单元,不允许。

应改为:MOV AX,[SI]

MOV [BX],AX

(6)MOV BL,F5H 错,源操作数错,以A~F开头的数字前应加0。应改为:MOV BL,0F5H

(7)MOV DX,2000H 正确。

(8) POP CS 错,不能将栈顶数据弹至CS中。

(9)MOV ES,3278H 错,立即数不能直接送ES寄存器。应改为:MOV AX,3278H

MOV ES,AX

(10)PUSH AL 错,栈操作不能按字节进行。应改为:PUSH AX

(11)POP [BX] 正确。

(12)MOV [AX],23DH 错,不能用AX寄存器间接寻址。应改为:MOV BX,AX

MOV [BX],23DH

(13)SHL AX,5 错,不能用大于己于1的立即数指出移位位数。应改为:

MOV CL,5

SHL AX,CL

(14)MUL AX,BX 错,目的操作数AX是隐含的,不能在指令中写出。应改为:MUL BX

5.4什么是堆栈?堆栈的工作原理是什么?堆栈的基本操作有两个,是什么指令?

堆栈是存储器中的一个特殊的数据存储区,采用“后进先出”的原则存放数据,通常它的一端(栈底)是固定的,另一端(栈顶)是浮动的,信息的存入和取出都只能在浮动的一端进行。PUSH与POP是一对常用的堆栈操作指令。PUSH指令是将寄存器、段寄存器或内存数据压入堆栈;POP指令功能与PUSH相反,是将堆栈中的栈顶位置的数据弹出到指定的寄存器、段寄存器或内存单元中。

5.5

答:(1)执行指令PUSH AX后 (SP)=2000H-2=1FFEH; (SP)= 1FFEH-2=1FFCH;

(2)再执行PUSH AX及POP BX后 (SP)=1FFCH, (AX)=3000H, (BX)=3000H

5.6

答:把[2000H]送[1000H]中,用指令 MOV [1000H],[2000H]不正确,应改为:MOV AX,[2000H] MOV [1000H],AX

5.7答:想从200中减去AL中的内容,用SUB 200,AL不正确,应改为:

MOV BL,200 SUB BL,AL

5.8 端口号为20H的8位数据为正数时(最高位为0)

5.9 (1)说明程序的功能。乘以10

(2)若从82H读入的数据为05H,执行程序段后(AX)=32H

5.10 64K

5.11

(1)双字减法的程序段是:

MOV AX,2A79H ;被减数的低位字送AX

SUB AX,345FH ;低位字相减,结果送AX

MOV BX,7B1DH ;被减数的高位字送BX

SBB BX,53E2H ;高位字相减处并减去低位字相减产生的借位,结果送BX (2) 将AX中间8位,BX低四位,DX高四位拼成一个新字的程序段是:

AND DX,0F000H ;将DX的低12位清零,高4位不变

AND AX,0FF0H ;将AX的低4位清零,高4位清零,中间8位不变AND BX,0FH ;将BX的高12位清零,低4位不变

ADD AX,BX

ADD AX,DX ;按要求组成一个新字,结果放在AX中

相关主题
相关文档
最新文档