2016-04-27 5 views
2

このコードはMS ARM形式で書かれています。 psxRegsという変数を定義する必要があります。この変数は、regからintCycleまでの変数のスペースを正確にとり、エクスポートすることができます。しかし、私はそれを達成する方法を知らない。これはどうすればできますか?いくつかの他の変数のスペースを取る変数を定義する方法は?

AREA |.bss|,DATA,READWRITE,ALIGN=4 

invc_ptr   SPACE 4 
address   SPACE 4 

;psxRegs 
reg    SPACE 128 
lo    SPACE 4 
hi    SPACE 4 
reg_cop0   SPACE 128 
reg_cop2d   SPACE 128 
reg_cop2c   SPACE 128 
pcaddr   SPACE 4 
        SPACE 4 
        SPACE 4 
        SPACE 4 
intCycle   SPACE 256 

rcnts    SPACE 7*4*4 
mem_rtab   SPACE 4 
+2

私はこのアセンブラに慣れていませんが、通常は 'psxRegs:'と書くだけです。これらのシンボルは通常サイズ情報を持たないことに注意してください。 – Jester

+0

1つのラベルとオペランドが含まれない複数の行を入力できる必要があります。すべての行は現在の場所の値を取ります。 –

答えて

2

アセンブラを使用する場合、名前付き変数として考えているのは、実際にはメモリ位置を参照するラベルだけです。特定の(組立後)のアドレスを取得するために、あなたのコード内で使用することができるという名前のラベルを定義するために使用されている

psxRegs: 
reg    SPACE 128 
lo    SPACE 4 
hi    SPACE 4 

reglohi:これが意味することは、このようなものは、以下に説明する効果を有することですメモリの場所。同様の方法で、psxRegs:はラベルを定義しますが、メモリは予約しません。実際、定義されているときはメモリが予約されていないので、regのエイリアスです。

これは、あなたのケースでは他の意味を持つ場合があります。 regのエイリアスを探しているのか、lohiも参照しようとしているのかどうかは不明です。 [psxRegs+128][psxRegs+132]にそれぞれアクセスして、lohiにアクセスできます。ただし、同じ値を[reg+128][reg+132]にアクセスできるため、これはまったく必要ありません。

:トレーリングpsxRegsは、アセンブラで必要な場合とそうでない場合があります。私はそれを試してみることをお勧めします最初にコロン。それがアセンブルできない場合は、コロンを追加します。

+0

私はあなたが正しいと思います。しかし、loとhiにアクセスするときに[psxRegs + 128]と[psxRegs + 132]にするべきではありませんか?そして、MS ARMアセンブラの後ろにpsxRegsがなくてはなりません。 –

+0

ああ、そうだよ。私はそれを修正しましょう。 –

関連する問題