1、计算1EF0001000H+2010001EF0H,结果存放在AX(最高16位),BX(次高16位),CX(低16位)。
答:
mov ax,001EH #第一个数的的最高位16位
mov bx,0F000H #第一个数的次高16位
mov cx,1000H #第一个数的低16位
add cx,1EF0H #cx加上第二个数的低16位,CF记录是否进位
adc bx,1000H #bx加上第二个数的次高16位,CF记录是否进位
adc ax,0020H #ax加上第二个数的最高16位,CF记录是否进位
2、下列程序片段完成什么功能,可否有更简单的方法实现同样的功能:
XCHG AX,[SI]
XCHG AX,[DI]
XCHG AX,[SI]
答:
程序实现[SI]和[DI]中的内容交换;AX中内容不变;
有,如下:
PUSH [SI]
PUSH [DI]
POP [SI]
POP [DI]
3、自己动手实验:用cmp指令,分别比较有符号数和无符号数的大小,并记录相关标志位的值。
答:
1.无符号数比较与标志位取值
思路:通过cmp 指令执行后相关标志位的值,可以看出比较的结果
指令:cmp ax,bx
2.有符号数比较与标志位取值
问题:用cmp来进行有符号数比较时,CPU用哪些标志位对比较结果进行记录
仅凭结果正负(SF)无法得出结论,需要配合是否溢出(OF)得到结论。
示例指令:cmp ah,bh
4、8086/8088的算术逻辑运算指令最多一次处理多少2进制位?当欲处理的数据长度超出该范围怎么办?
答:
8086/8088的算术逻辑运算指令最多一次处理16bit的二进制位;如果处理的数据
长度超出则分成若干部分进行逻辑运算,最后进行整合;
5、什么是除法溢出?如何解决16位被除数8位除数可能产生的溢出?
答:
除法溢出是指除数如果是0,或者在8位除数时商超过8位,或者在16位除时商超过16位,
则认为是除法溢出,引起0中断;
首先要确定8位除数不能为0,其次要确定商的最大值不能超过8位,如果超过8位,则可
采用16位的除法;