Assembly &引用;addq";最大32位有符号整数溢出

Assembly &引用;addq";最大32位有符号整数溢出,assembly,y86,Assembly,Y86,我正在尝试为计算器编写一个简单的编译器。然而,我的所有汇编指令(加法、减法和乘法)在2147483647和2147483647处不断溢出和下溢−分别为2147483648,而不是最大64位有符号值。我不明白为什么会发生这种情况,这真的很令人沮丧,所以任何帮助都将不胜感激!以下是在这种情况下生成的汇编代码: .globl compute compute: movq $2147483646, %rcx pushq %rcx movq $2147483646, %rcx pushq %rc

我正在尝试为计算器编写一个简单的编译器。然而,我的所有汇编指令(加法、减法和乘法)在2147483647和2147483647处不断溢出和下溢−分别为2147483648,而不是最大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,而不是我预期的4294967292:(。
(我知道它目前还没有优化,我希望在我解决这个问题之后能够改进它。谢谢!)

您打印的结果是错误的,没有显示在问题中。在编译这个main.cpp文件时,它对我来说很好:
extern“C”long compute();\\\\ include\\int main(){std::我可以看一下我使用的测试吗?你们是对的!非常感谢:)