(16)MUL AX,BX 错,目的操作数AX是隐含的,不能在指令中写出。应改为:MUL BX
9.设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问: (1)执行指令PUSH AX后 (SP)=?
(2)再执行PUSH BX及POP AX后 (SP)=?(AX)=?(BX)=? 答:(1)执行指令PUSH AX后 (SP)=2000H-2=1FFEH;
(2)再执行PUSH BX及POP AX后 (SP)=1FFEH, (AX)=5000H, (BX)=5000H
10.要想完成把[2000H]送[1000H]中,用指令:MOV [1000H],[2000H]是否正确?如果不正确,应用什么方法?
答:把[2000H]送[1000H]中,用指令 MOV [1000H],[2000H]不正确,应改为:MOV AX,[2000H] MOV [1000H],AX
11.假如想从200中减去AL中的内容,用SUB 200,AL是否正确?如果不正确,应用什么方法?
答:想从200中减去AL中的内容,用SUB 200,AL不正确,应改为: MOV BL,200 SUB BL,AL
12分别写出实现如下功能的程序段
(1)双字减法(被减数7B1D2A79H,减数53E2345FH)。 (2)使用移位指令实现一个字乘18的运算。
(3)使用移位指令实现一个字除以10的运算。
(4)将AX中间8位,BX低四位,DX高四位拼成一个新字。 (5)将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来 (6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中。
答:(1)双字减法的程序段是:
MOV AX,2A79H ;被减数的低位字送AX SUB AX,345FH ;低位字相减,结果送AX MOV BX,7B1DH ;被减数的高位字送BX
SBB BX,53E2H ;高位字相减处并减去低位字相减产生的借位,结果送BX
(2)使用移位指令实现一个字乘18的程序段是: MOV AX,05F7H ;被乘数送AX
SHL AX,1 ;被乘数乘以2,结果在AX中 MOV BX,AX ;被乘数乘以2的结果暂存到BX MOV CL,3 ;设置移位位数3
SHL AX,CL ;被乘数再乘以8(共乘以16),结果在AX中 ADD AX,BX ;被乘数再乘以18,结果在AX中
(3)使用移位指令实现一个字除以10的运算,必须将X/10拆分成多项的和,而每一项都应是非的某次幂的倒数。利用等比级数的前N项和公式,可求出A0=X/8,公比Q=-1/4,故X/10=X/8-X/32+X/128-X/512+...,
所求的程序段是:
MOV AX,FE00H MOV CL,3 SHR AX,CL MOV BX,AX MOV CL,2 SHR AX,CL SUB BX,AX MOV CL,2 SHR AX,CL ADD BX,AX 中
MOV CL,2 SHR AX,CL SUB BX,AX 结果在BX中
;被除数送AX 3
8,结果在AX中 8的结果暂存到BX 2
4(累计除32),结果在AX中 /8-被除数/32,结果在BX中 2
4(累计除128),结果在AX中 /8-被除数/32+被除数/128,结果在BX2
4(累计除512),结果在AX中 /8-被除数/32+被除数/128-被除数/512, ;设置移位位数 ;被乘数除以 ;被乘数除以 ;设置移位位数 ;被乘数除以 ;被除数 ;设置移位位数 ;被乘数除以 ;被除数 ;设置移位位数 ;被乘数除以 ;被除数(4) 将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中。 (5) 将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来的程序段是:
MOV AL,[BX] ;数据段中BX为偏移地址的字单元内容送AX XCHG AL,[BX+3] ;数据段中BX+3为偏移地址的字单元内容与AX的内容交换
MOV [BX],AL ;数据段中BX+3为偏移地址的字单元内容送BX为偏移地址的字单元
MOV AL,[BX+1] ;数据段中BX+1为偏移地址的字单元内容送AX XCHG AL,[BX+2] ;数据段中BX+2为偏移地址的字单元内容与AX的内容交换
MOV [BX+1],AL ;数据段中BX+2为偏移地址的字单元内容送BX+1为偏移地址的字单元