我正在尝试为计算器编写一个简单的编译器。但是,我所有的汇编指令(加法、减法和乘法)分别在 2,147,483,647 和 -2,147,483,648 处保持上溢和下溢,而不是最大 64 位有符号值。我无法弄清楚为什么会发生这种情况并且真的很令人沮丧,所以任何帮助将不胜感激!以下是生成的汇编代码,以防有帮助:
.globl compute
compute:
movq $2147483646, %rcx
pushq %rcx
movq $2147483646, %rcx
pushq %rcx
popq %rcx
popq %r8
addq %rcx, %r8
pushq %r8
popq %rax
retq
但是,这将返回值 -4,而不是我预期的 4,294,967,292 :(。(我知道它目前没有优化,我希望稍后在解决这个问题后改进它。谢谢!)