能力值:
( LV2,RANK:10 )
|
-
-
2 楼
刚好有这样一个例子,希望可以帮助你
mov al, -3
mov bl, 6
imul bl
此刻执行的时候(-3*6)的结果存放到ax寄存器中,由于在执行imul进行有符号整数的乘法运算时,保留了乘积的符号位,也就是说乘积的高半部分是低半部分的符号扩展。 符号扩展是什么意思呢? 也就是说 如果我们的乘积是个负数则,高半部分都为1,如果乘积是个正数的话,高半部分都为0。很显然我们(-3*6)是负数,所以此时高半部分肯定是1,不信大家来计算下。
-3的16进制表示形式是0FDh
好此刻我们将0FD转换成补码的形式,大家不知道还记得16进制整数转换补码的方法吗,用15减去各个进制位,最终结果+1。
此刻
FDh
15 - F = 0
15 - D = 2
+ 1 = 03h
03*6h = 12h (注意10进制18 = 16进制12h)
此刻我们将取12h的补码则为我们最后的乘积
12h
15 - 1 = E
15 - 2 = D
+ 1 = EEh
由于EEh的最高符号位是1,所以此时高半部分将扩展为低半部分的符号位,所以此时高半部分为FF(也就是全是二进制位1)。
最终的结果是FFEEh,此时由于已经被扩展了,所以此时的of = 0。(也就是说如果没有扩展的话,of = 1)。
|
|
|