如何在 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 次。我应该改变什么?
更新
已解决
ecx
和 edx
是调用者保存的寄存器,这意味着它们可以在被调用的函数中自由使用,例如 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
我想打印结果数组,它有 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 件物品。一种可能的解决方案是使用 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