マイクロコントローラー (FRDM-KL25Z128 を使用) に関するこのラボ クラスを受講していますが、ディレクティブ .word および .equ に問題があります。
まず、教授から提供されたサンプル コードは、FRDM ボードの赤い LED を点滅させるためのもので、次のとおりです。 exp2.s
コードを修正して 3 つの LED を同時に点滅させて白色光を生成する前に、いくつかの質問に答えなければなりませんが、それはここでは問題ではありません。
コードの下部では、すべてのレジスタ アドレスが .word ディレクティブで定義されています (32 ビット ワードを使用しているため)。質問の 1 つは、ディレクティブ .word を .equ に置き換えることができるかどうかということです。
私の最初のことは、はい、最後のディレクティブが定数値をラベルに割り当てているため、.equ の代わりに .word を使用できるということでした。これらのラベルの値を変更したくないので、.equ を使用しても問題ありません。
しかし、私がそれをテストしたとき、それらの行にコメントを付けて:
SIM_SCGC5: @ Endereço do SIM_SCGC5
.word 0x40048038
そして書く:
.equ SIM_SCGC5, 0x40048038
SIM_SCGC5 ラベルに値 0x40048038 を割り当てる必要があります。しかし、コードは機能しません。次の行でエラーが発生します。
ldr r3,SIM_SCGC5
言います:
無効なオフセット、値が大きすぎます
したがって、.equ ディレクティブを間違えたのか、それともデフォルトで .equ が LDR が処理できるよりも多くのビットを占有する値を割り当てているのかはわかりません。
ここで何が問題になる可能性がありますか?
いくつかのメモ:
マイクロコントローラーと一緒に Assembly でコーディングを開始しているため、ハードウェアの制限など、まだ多くの情報が不足しています。だから、知らないうちにたくさんのランダムな単語を書いたかもしれません。
準備期間が長くなり申し訳ありません。長い投稿が Stack Overflow (または一般的な Stack Exchange) のお気に入りではないことはわかっていますが、文脈のない質問を投げたくなかったのです。