如何在 Assembly 中打印数组

How can I print array in Assembly

我想打印结果数组,它有 3000 个元素。我写了这段代码:

.intel_syntax noprefix
.text
.globl main
main:
mov ecx, 3000
mov edx, offset result
llp:

mov al,[edx]
push eax
mov eax, offset message
push eax
call printf
add esp, 8
inc edx

loop llp
mov eax, 0
ret

.data
message : 
.asciz " Wynik: %i\n"

问题是,该程序仅打印第一个元素 3000 次。我应该改变什么?

更新

已解决

ecxedx 是调用者保存的寄存器,这意味着它们可以在被调用的函数中自由使用,例如 printf。你很幸运,你甚至打印了 3000 件物品。一种可能的解决方案是使用 call printf:

周围的堆栈来保存和恢复这些寄存器
llp:

mov al,[edx]
push ecx
push edx
push eax
mov eax, offset message
push eax
call printf
add esp, 8
pop edx
pop ecx
inc edx

loop llp