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

0 ответов

Другие вопросы по тегам