2012-08-29 157 views
0

我在x86彙編中打印數組時出現問題。打印x86彙編列表

我想打印一個數組每行一行,並在每個循環結束時使用換行符,但似乎我嘗試使用的代碼是錯誤的。在這裏它是:

SECTION .data 

Matrix: 
db "00000" 
db "00000" 
db "01110" 
db "00000" 
db "00000",10 


NewLine: db 10 


SECTION .text 

global _start 

_start: 


mov esi,2 

mov eax,4 
mov ebx,1 
mov ecx,[Matrix+esi] 
mov edx,5 
int 80h 

mov eax,4 
mov ebx,1 
mov ecx,NewLine 
mov edx,1 
int 80h 

mov eax,1 
mov ebx,0 
int 80h 

我在這個簡化的情況目的是打印矩陣的五個元素,一個換行和出口組成的第三行。我得到的輸出只是換行符。

回答

1

我覺得發生了什麼事是,而這樣的:

mov ecx,NewLine 

把新行的地址在ECX,這樣的:

mov ecx,[Matrix+esi] 

內容在地址矩陣+ ESI到ECX 。您應該將地址放入ECX中。

+0

我猜想,但我怎麼能把實際地址放在ecx中,並在改變「計數器」esi時改變它,以便分別打印不同的行? –

+1

也許像'mov ecx,Matrix;添加ecx,esi'或'lea ecx,[Matrix + esi]'。 – MRAB

+0

LEA正在工作,謝謝! –

1

爲什麼標記爲「dos」的時候顯然是Linux代碼?無論如何,MRAB建議的「lea」解決方案應該可行。隨着ESI = 2,它一定會向你移動到第一行的第二個字節 - 如果你要打印的第三行,你想ESI爲10 ...等

最佳, 弗蘭克

+0

我標記爲程序集,x86,原諒我的無知,DOS標籤在哪裏? –

+0

我的錯誤。我想,60年代的酸性閃回。 :) –