为何x86-64等架构未实现直接除以10的指令?
关于x86-64未提供除以10专用指令的疑问
我了解编译器会将常量除法与取模(如x/10)替换为乘以魔法数的操作,例如(x * 0xcccccccd) >> (32 + 3),对应的汇编实现示例如下:
movl $1717986919, %edx addl $12, %esp movl %ecx, %eax imull %edx movl %ecx, %eax sarl $31, %eax sarl $2, %edx subl %eax, %edx leal (%edx,%edx,4), %eax addl %eax, %eax subl %eax, %ecx
但我感到疑惑的是,x86-64为何没有提供能直接完成以下功能的指令:
edx <= eax % 10 eax <= eax / 10
除以10在整数转字符串或其他十进制相关操作中相当常见。x86-64以提供部分小众指令著称,其中不少指令是多个常用操作的组合(例如融合乘加扩展指令)。从硬件层面来看,这类专用指令似乎可以比编译器的魔法数实现更高效?
我希望能找到带有文档或历史背景的答案(而非仅猜测),尽管我理解要找到架构开发者为何未做某件事的解释可能很难。
相关参考方向:
- 为何GCC用特殊数字乘法实现整数除法?
- 实模式支持BCD操作
- 复古计算:是否有CPU提供乘10或除以10的专用指令?
内容的提问来源于stack exchange,提问作者Kaia
相关产品推荐
相关产品推荐

