Мне нужна помощь с добавлением двух больших чисел (по большому, я имею в виду, что не вписываются в eax
, например). Я знаю, что мне нужно использовать adc
, но это не дает мне хороших результатов.Добавление двух больших чисел в сборке x86
SYSCALL = 0X80
STDIN = 0
STDOUT = 1
SYSREAD = 3
SYSWRITE = 4
SYSEXIT = 1
.section .data
a1: .long 4000000000
a2: .long 4000000000
equals: .long 0
.section .text
.globl _start
_start:
xor %edx, %edx
movl a1, %eax
movl a2, %ebx
adc a2, %eax
movl %eax, equals
mov $SYSEXIT, %eax
int $SYSCALL
Я проверяю результат при печати равным gdb.
Если они не подходят в EAX, они не будут вписываться в 32-разрядный '.long'. В каком формате вы пытаетесь получить результат? –
a1 и a2 подходят в расширенном регистре, выход - нет. Я знаю, что добавление двух чисел в размер слова должно быть сделано каким-то образом. Я просто не знаю, как это сделать. –
Напишите сборку marco (используя struct) для больших чисел и сохраните цифры в массиве: D –