汇编中的乘法指令

汇编中的乘法指令分为signed、unsigned指令两种。

 

unsigned:

mul source //the source can be a 8、16、32-bits unsigned register or memory value

你可能在想,只有一个数怎么进行乘法运算呢,其实还有一个乘数已经隐含的放在eax中,其中根据mul指令后缀b、w、l大小放入al,ax,eax中。

 

由于乘法运算后产生的数比其中任何一个都大,所以一般用2倍于source位长的空间存放计算结果。

例如:

1.如果source是8-bits那么,运算结果将放在ax中,ax是16-bits。

2.如果source是16-bits,那么整个eax将被使用?错!为了与以前的处理器兼容,dx:ax的register pair将被使用,dx存储高字节的16-bits,ax存储低字节的16-bits,两个register大小加起来刚好32-bits。

3.如果source是32-bits,那将怎样存储运算结果呢,依旧使用eax么,可是eax只有32-bits啊,不够存储整个运算结果……

这时候一个64-bits的edx:eax的register pair将被使用,其中edx存储计算结果的高字节的32-bits,eax存储低字节的32-bits。

 

注意,如果在32-bits乘法指令运算之前,你如果有数据保存在edx中,请提前保存好,一进行32-bits mul指令,你的edx中数据就没了……

 

测试代码:

 

 

signed:

1.imul source //用法同unsigned 的mul

2.imul source,destination //这个指令格式能让你指定结果的目的地,但是有一个缺点,如果目标register大小不 够,运算结果将被截断

3.imul immediate,source,destination //destination = immediate * source,immediate 可以是signed

 

测试代码:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值