2

NASM で 2D 配列の要素を取得する必要があります。配列は 50x60 文字で、静的に割り当てられています。r13 には配列の幅が格納され、rsi には先頭のアドレスが格納され、r8 と r9 はインデックスです (これらは、1 番目と 2 番目の座標に対応します)。私は実行してみました:

imul r8, r13
mov rax, [rsi + (r8 + r9) * 8]

しかし、うまくいきませんberoset-p-603-invalid effective address。修正方法は?

4

1 に答える 1

3

大丈夫、私はこれを行うことができました。このコードは、動的に割り当てられたメモリを使用していたこのプログラムの古いバージョンからのコピー ペーストを変更したものです。したがって、他の誰かがこのエラーを受け取った場合は、次の方法で解決しました。

mov r15, rsi ; duplicate the pointer, so it's not destroyed by the following operation
imul r8, r13
add r15, r8
mov rax, [r15 + r9]

コンパイルして動作するようです

于 2013-06-14T12:51:21.837 に答える