Skip to content

Commit

Permalink
Fix explanation.
Browse files Browse the repository at this point in the history
  • Loading branch information
karino2 committed Dec 12, 2018
1 parent 6eecc02 commit a487ab6
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions arm_asm.md
Original file line number Diff line number Diff line change
Expand Up @@ -1930,13 +1930,13 @@ andsneなんて知らないよ!と思うかもしれませんが、ここで
movの即値は12ビットです。
12ビットで何が扱えるかは4ビットローテートの話が必要なので後回しにしますが、32ビットの値を全部扱う事は当然出来ません。

そこで32ビットの値を代入したい時は、コードの中にこの値を埋め込んでおいて、それがメモリ上にロードされたら、そのロードされた定数のあるアドレスを読む、という方法で定数をレジスタに読み込む事を実現している訳です
そこで32ビットの値を代入したい時は、この代入したい値をコードのフリをして埋め込んでおいて、コードがメモリ上にロードされたら、そのロードされた定数のあるアドレスをメモリとして読む、という方法で定数をレジスタに代入する事を実現している訳です

![定数の埋め込み](embed_literal.png)

アドレスも32ビットではそのアドレスを即値で指定する事が出来ない、という問題になりますが、そこでpcからの相対アドレスを使えば、コードのそばに埋め込んであればそれが触れる、という訳です。

また、ldrのイコール表記が、実際は以下の2つの事をやっている事が分かります。
以上の事とobjdumpの内容を合わせると、イコール表記のldrは、実際は以下の2つの事をやっている事が分かります。

1. イコールの後の値をコードの末尾に埋め込む
2. そこへのアドレスへのldr命令に変換する
Expand Down

0 comments on commit a487ab6

Please sign in to comment.