0

x86アセンブリで配列を印刷する際に問題が発生しました。

すべてのサイクルの終わりに改行を含む配列を一度に1行ずつ出力したいのですが、使用しようとしているコードが間違っているようです。ここにあります:

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

この単純化されたケースでの私の目的は、改行と終了の5つの要素で構成されるMatrixの3行目を印刷することです。出力として取得するのは改行だけです。

4

2 に答える 2

1

何が起こっていると思いますが、これは次のとおりです。

mov ecx,NewLine

NewLine のアドレスを ECX に入れます。これは次のとおりです。

mov ecx,[Matrix+esi]

アドレス Matrix+ESIの内容を ECX に入れます。代わりに、アドレスを ECX に入れる必要があります。

于 2012-08-29T22:23:31.083 に答える
1

明らかに Linux コードであるのに、なぜ「dos」とタグ付けされているのですか? いずれにせよ、MRAB が提案する「リー」ソリューションは機能するはずです。esi = 2 では、最初の行の 2 番目のバイトに移動するだけです。3 行目を印刷したい場合は、esi を 10 にする必要があります...など。

ベスト、フランク

于 2012-08-29T23:45:28.233 に答える