为什么X86提供了一对分割和乘法指令?
发布时间:2020-12-16 05:31:17 所属栏目:百科 来源:网络整理
导读:我注意到,unsigned int和int共享相同的指令进行加减.但是为整数除法提供idivl / imull,并且对于unsigned int提供divl / mull.我可以知道这个的根本原因吗? 解决方法 根据您的参数是签名还是无符号,乘法或除法的结果不同. 这真的是两个补码的魔力,允许我们使
我注意到,unsigned int和int共享相同的指令进行加减.但是为整数除法提供idivl / imull,并且对于unsigned int提供divl / mull.我可以知道这个的根本原因吗?
解决方法
根据您的参数是签名还是无符号,乘法或除法的结果不同.
这真的是两个补码的魔力,允许我们使用相同的操作进行有符号和无符号加法和减法.在其他表示方式中不是这样 – 一个补码和符号大小都使用与无符号算术不同的加法和减法算法. 例如,对于32位字,-1表示为0xffffffff.对此,您将获得有符号和无符号版本的不同结果: Signed: -1 * -1 = 1 = 0x00000000 00000001 Unsigned: 0xffffffff * 0xffffffff = 0xfffffffe 00000001 请注意,结果的低字是一样的.在不给高位的处理器上,只需要一个乘法指令.在PPC上,有三个乘法指令 – 一个用于低位,另一个用于高位,取决于操作数是有符号还是无符号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |