大多数编译器如何在32位环境中对64位操作数(例如long int)执行操作?换句话说,是否有办法在单个步骤中实现这些操作,或者我们需要访问多个内存位置来实现这些操作?32位体系结构中的64位操作数的操作?
5
A
回答
5
它们使用两个寄存器来保存一个64位值。一个用于较低的32位,另一个用于高32位。
对于x86,64位加法/减法是用做附加有进位加减法,与借款说明:
add %eax, (lower 32-bits of operand)
adc %edx, (upper 32-bits of operand)
64位乘法要复杂得多,但使用也做32位乘法和32位带附加指令的组合。 (类似于2位长乘法)
对于加载和存储,是的,需要将两个32位值加载到/从两个寄存器存储/存储。
类似地,可以在64位硬件上实现128位整数。 GCC支持这个扩展。
+0
32位(x86)硬件上的128位整数是什么? – 2011-10-15 23:17:23
+1
它变得丑陋。在这一点上它与多精度算术没什么两样。另外,你会链接3'adc'指令。 (不要忘记你对进位标志有依赖性,可能会导致你的流水线瘫痪)。对于乘法运算,你必须做16×32位乘法和一堆'add'和'adc'。 ..我不知道任何支持这一点的编译器。 – Mysticial
相关问题
- 1. 32位/ 64位操作系统?
- 2. 在64位架构上的32位操作系统
- 3. 对32位系统中的64位字进行操作
- 4. 如何检测Flex中的32位或64位操作系统?
- 5. 确定从32位操作系统或64位操作系统C/C++应用
- 6. 64位操作系统上的32位ActiveX DLL的问题
- 7. 32位应用程序的64位操作系统
- 8. VM Virtual Box 64位硬件上的32位操作系统
- 9. 关于64位和32位的Mac操作系统
- 10. 64位操作系统上的32位VC++可再发行?
- 11. 在32位操作系统中使用64位dll
- 12. 64位操作系统上的32位或64位应用程序?
- 13. Linux中的do_div()在32位和64位体系结构中工作吗?
- 14. 使用arm v8运行32位和64位操作系统
- 15. JNA在64位操作系统上具有32位JVM
- 16. 在64位操作系统上调试32位CASSINI(Oracle 9)
- 17. 开在64位操作系统32位Visual C#项目
- 18. 在64位服务器上加载32位dll操作系统
- 19. 32位dll 64位操作系统与regsvr32.exe
- 20. 在64位操作系统上启动32位进程
- 21. Environment.GetEnvironmentVariable检查操作系统版本32位/ 64位
- 22. 在32位操作系统上运行64位jvm
- 23. 32位DLL不能在64位操作系统
- 24. C++:32与64位流操作
- 25. 64位操作系统上的32位Java:JVM的数量是否有限制?
- 26. 64位操作系统安装所需的条件并不是失败的32位Windows操作系统
- 27. Raspberry Pi的64位操作系统3
- 28. 64位操作系统的Microsoft.Win32.RegistryKey
- 29. 32位操作系统上的2^32位或字节
- 30. 阅读文件存储器的内容,导致32位操作系统和64位操作系统
或多个寄存器而不是 –