我想打印结果数组,它有 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 次。我应该改变什么?
更新
已解决
最佳答案
ecx
和 edx
是调用者保存的寄存器,这意味着它们可以在 printf
等被调用函数中自由使用。您很幸运,甚至打印了 3000 件元素。一种可能的解决方案是使用调用 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
关于assembly - 如何在Assembly中打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34257617/