为什么X86提供了一对分割和乘法指令?

前端之家收集整理的这篇文章主要介绍了为什么X86提供了一对分割和乘法指令?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我注意到,unsigned int和int共享相同的指令进行加减.但是为整数除法提供idivl / imull,并且对于unsigned int提供divl / mull.我可以知道这个的根本原因吗?

解决方法

根据您的参数是签名还是无符号,乘法或除法的结果不同.

这真的是两个补码的魔力,允许我们使用相同的操作进行有符号和无符号加法和减法.在其他表示方式中不是这样 – 一个补码和符号大小都使用与无符号算术不同的加法和减法算法.

例如,对于32位字,-1表示为0xffffffff.对此,您将获得有符号和无符号版本的不同结果:

Signed: -1 * -1 = 1 = 0x00000000 00000001
Unsigned: 0xffffffff * 0xffffffff = 0xfffffffe 00000001

请注意,结果的低字是一样的.在不给高位的处理器上,只需要一个乘法指令.在PPC上,有三个乘法指令 – 一个用于低位,另一个用于高位,取决于操作数是有符号还是无符号.

猜你在找的C&C++相关文章