3

こんにちは、avr asm プログラミングの初心者です。以下のでは、いくつか質問があります。

1) ラベルの長さは 8 ビットですか、それとも 16 ビットですか?

2) なぜ 2 の乗算ラベルが必要なのですか?

3) 命令 LPM は結果をレジスタ R0 に配置していますか? もしそうなら、それはZと何の関係がありますか?

4)提供されたリンクから引用されたテキストを説明できますか:

「アドレスが 2 で乗算されず、ラベルがバイト アドレス 0x60 (ワード アドレス 0x30) にある場合、Z はそこに格納されているコードを指します。これでアドレッシングの問題が明確になったことを願っています。他のバージョンは」

ldi ZL, low(2*label)
ldi ZH, high(2*label)

label:
.db "Hello world", 0
lpm

ありがとう。

4

2 に答える 2

2

こんな感じです。下の図に従ってください。図は視覚化に大いに役立ちます。

ワードアドレス.................................................................バイトアドレス

|--(0d)---;--(0c)---|06                         |--------|06
|--(0b)---;--(0a)---|05                         |--------|05                          
|--(09)---;--(08)---|04                         |--------|04
|--(07)---;--(06)---|03                         |--------|03
|--(05)---;--(04)---|02                         |--------|02
|--(03)---;--(02)---|01                         |--------|01
|--(01)---;--(00)---|00                         |--------|00

したがって、0x01 ワード アドレスは 0x02 バイト アドレスに対応し、0x04 ワード アドレスは 0x08 バイト アドレスに対応することがわかります。

したがって、2 倍になります。メッセージを location に保存したとします。

.org 0x0200
message:
.db "1234567890#"

avr studio を使用している場合は、プログラム メモリ セクションを確認してください。次に、これが 0x200 ではなく 0x400 に格納されていることがわかります。

于 2014-05-04T16:12:08.393 に答える