0

x86 アセンブリ (AT&T) に問題があります。

アセンブラで配列ルックアップを実装する必要があるため、レジスタ %ebx に配列の最初の項目 (arr[0] など) があり、arr[1] を指すために、たとえば次のように書きました。

mov -4(%ebx), %eax

問題は、ebx のアドレスを取得しようとするとセグメンテーション違反が発生することです。ebx の値 (arr[0] の値) を問題なく取得できるため、これは非常に奇妙です.. アドバイスはありますか?

編集:わかりました、エラーを理解したと思います。配列を宣言するとき、変数 arr に最初の要素のアドレスを設定する必要があります。

mov -4(%ecx), %eax

しかし、この命令では、アドレスではなく値を入力します。では、どうすれば住所を入れることができるでしょうか?

4

1 に答える 1

0

arr[1]実際には にある可能性はかなり低く、 にある-4[%ebx]可能性がはるかに高くなります+4

しかし、あなたの質問に基づいて、あなたが理解しているかどうかはわかりません。が配列の最初の要素%ebxアドレスである場合にのみ機能します。あなたのテキストは、をロードarr[0]したことを示しているようです。ebxその場合、そこから他の要素を取得する方法はありません。

実際に何をしようとしているのかを確認できるように、もう少しコードを投稿する必要があるかもしれません。コードは通常、プログラミングの問題の説明テキストよりも優先されます:-)

于 2012-04-13T08:21:41.287 に答える