В архитектуре IA-32 как суммировать / вычитать два 32-битных значения со знаком и сохранять результат в 64-битном (EDX: EAX) при управлениизнак?
Для этого 32-битные значения:
A = 97
B = 232
C = 2147483600
D = 200
Как мне сделать C + A - D + B и вернуть 64-битное значение в Assembly ?
Примечание: результат от C + A переполняет 32-битный реестр.
Я пытался использовать функцию adc , чтобы добавить перенос к edx после добавления C к A, но, поскольку он подписан, он не делает то, что я притворяюсь.
То, что я пробовал для C + A, но оно не сохраняет знак:
#Prologue
pushl %ebp
movl %esp, %ebp
#Body
movl $0, %edx
movl $0, %ecx
movl $0, %eax
movb 8(%ebp), %al #
movsx %al, %eax #move with sign extention to 32 bit eax
addl 16(%ebp), %eax #adding C + A
adcl $0, %edx
У меня также есть та же проблема, если C было -97, а A было -2147483600 (для отрицательных значений).