1

Y86 割り当てでグローバル変数を正しく機能させるのに苦労しています。残念ながら、私たちが提供した唯一の例は、IA-32 アセンブリーのものです。過去数時間検索しましたが、役に立ちませんでした。これは私が知っている非常に基本的なことですが、私は Y86 の完全な初心者です。

次のように変数を「宣言」しています

.align 4
x: .long 1
y: .long 4

それらを操作で使用するirmovl x, %edxと、値4ではなく値380がedxレジスタに割り当てられていることがわかります。何が起こっているのかは、値ではなくレジスタにメモリ位置が割り当てられていることだと思います。グローバル変数の値をレジスタに設定する正しい構文は何ですか?

代わりに mrmovl を使用してみましたが、グローバル変数を使用した mrmovl の構文がわかりません。

mrmovl x, %edx で「x は数値ではありません」というエラーが表示される

4

1 に答える 1

1

irmovl名前が示すように、はすぐに登録できます。登録するメモリmrmovlとして必要です

構文に関しては、y86 はディスプレイスメントをサポートしているので、うまくいくと思いmrmovl x, %edxます。回避策として、次の 2 つの命令を使用できます。

irmovl x, %edx     # load address
mrmovl (%edx), %edx # fetch value
于 2015-11-14T22:50:34.723 に答える