首页
社区
课程
招聘
汇编 有符号数乘法指令IMUL
发表于: 2011-4-26 16:11 6346

汇编 有符号数乘法指令IMUL

2011-4-26 16:11
6346
能帮忙看下这题吗?
现在的书太厉害了,没有过程只有结果

mov al,0FFH
mov bl,02H
IMUL BL

(AX)=0FFFDH

请问AX是怎么求得值为0FFFDH 的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 95
活跃值: (13)
能力值: ( 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)。
2011-4-26 17:31
0
游客
登录 | 注册 方可回帖
返回
//