2015-12-13 111 views
1

我想打印包含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次。我应该改变什么?

UPDATE

解决

回答

3

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 
+0

工作,非常感谢你 – Movart