Переполнение "addq" при максимальном 32-битном знаковом числе
Я пытаюсь написать простой компилятор для калькулятора. Тем не менее, все мои инструкции по сборке (сложение, вычитание и умножение) продолжают переполняться и уменьшаться до 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, как я ожидал, это будет:(. (Я знаю, что это не оптимизировано в данный момент, я надеюсь улучшить это позже, когда выясню эту проблему. Спасибо!)