我正在尝试对Assembly 32上带有符号的整数列表求和,但我只需要对没有符号的整数求和。你知道一些方法吗?
我的程序尝试对整数求和并存储在 中resultado
,其大小为 64 位,因此为了能够做到这一点,我使用了两个 32 位寄存器(EAX 和 EDX),并检查总和何时产生进位。
毕竟,我在 resultado 上加入了 EAX 和 EDX。
# sum.s Sumar los elementos de una lista.
# llamando a función, pasando argumentos mediante registros
# retorna: código retorno 0, comprobar suma en %eax mediante gdb/ddd.
# as --32 -g sum.s -o sum.o
# ld -m elf_i386 sum.o -o sum
# DATA SECTION
.section .data
lista:
.int 4294967295, 4294967295, 4294967295, 4294967295
longlista:
.int (.-lista)/4
resultado:
.quad -1
.section .text
_start: .global _start
mov $lista, %ebx
mov longlista, %ecx
call suma
mov %eax, resultado
mov %edx, resultado+4
mov $1, %eax
mov $0, %ebx
int $0x80
suma:
push %esi
mov $0, %eax
mov $0, %edx
mov $0, %esi
bucle:
add (%ebx,%esi,4), %eax
jc .L1
bucle1:
inc %esi
cmp %esi,%ecx
jne bucle
pop %esi
ret
.L1:
inc %edx
jmp bucle1
这给出了一个 64 位和,将输入视为无符号 32 位,这不是我想要的。