汇编语言有符号乘法指令

问题描述:

汇编语言有符号乘法指令
我对那个乘法指令IMUL不懂
乘积的高一半为低一半的符号扩展则CF=0;OF=0;否则CF=1,OF=1 该怎么理解?什么叫高一半为低一半的符号扩展?
如:
mov al,0b4h ;al=b4h=-76d
mov bl,11h ;bl=11h=17d
imul bl ;ax=faf4h=-1292d,OF=CF=1
1个回答 分类:数学 2014-09-17

问题解答:

我来补答
字节乘结果16位,存于AX中,高8位AH ,低8位AL ;字乘结果为32位 存于 DX AX中,高16位DX,低16位AX .“高一半为低一半的符号扩展”的说法不确切,应该说“高位是低位的符号扩展”,低位是指积的值部分,高位指积的符号部分.常常是字节乘的结果不足16位,字乘的结果不足32位,多出的位怎么办?就进行符号扩展,由于多出的位是高位,所以叫高位符号扩展.
比如你的例子,是字节乘.
imul bl
操作为 AL * BL 结果存于 AX 中,其中 (AH) = FAH,(AL) = F4H
结果的二进制式为 1111010011111010B
显然数值部分是010011111010,加上一位符号位是不足16位的,而符号部分是1111有四位,并不是我们习惯的一位,这就是进行了高位符号扩展的结果.
为什么要进行扩展?是因为结果的位数在指令中是一定的,计算机不可能根据我们结果的实际位数而调整结果的位数,所以不足的位必须补足,这样高位扩展符号的做法是即能够满足结果位数约定,又不影响结果值的正确性的.高位扩展符号的原则是正数填0负数填1.你自己可以演算一下,1111010011111010B(高四位是符号)和1010011111010B的实际值是不一样.
符号扩展则CF=0;OF=0;否则CF=1,OF=1 是一种约定或者说是标识,在处理结果时,计算机会根据CF、OF的状态判断是否有符号扩展,从而做出相应正确处理.
 
 
展开全文阅读
剩余:2000