トリック/ショートカットです。たとえば
ldr r0,=main
アセンブラは、命令の近くで命令パスの外側にデータワードを割り当てます。
ldr r0,main_addr
...
b somewhere
main_addr: .data main
次に、そのトリックを定数/即値、特に移動即値命令に収まらないものに展開します。
top:
add r1,r2,r3
ldr r0,=0x12345678
eor r1,r2,r3
eor r1,r2,r3
b top
組み立ててから分解
00000000 <top>:
0: e0821003 add r1, r2, r3
4: e59f0008 ldr r0, [pc, #8] ; 14 <top+0x14>
8: e0221003 eor r1, r2, r3
c: e0221003 eor r1, r2, r3
10: eafffffa b 0 <top>
14: 12345678 eorsne r5, r4, #125829120 ; 0x7800000
アセンブラがデータ ワードを追加し、ldr を PC 相対に変更したことがわかります。
mov 命令に適合するイミディエイトを使用する場合、おそらくアセンブラーによっては、確かに私が使用している gnu を使用すると、それが mov に変わりました
top:
add r1,r2,r3
ldr r0,=0x12345678
ldr r5,=1
mov r6,#1
eor r1,r2,r3
eor r1,r2,r3
b top
00000000 <top>:
0: e0821003 add r1, r2, r3
4: e59f0010 ldr r0, [pc, #16] ; 1c <top+0x1c>
8: e3a05001 mov r5, #1
c: e3a06001 mov r6, #1
10: e0221003 eor r1, r2, r3
14: e0221003 eor r1, r2, r3
18: eafffff8 b 0 <top>
1c: 12345678 eorsne r5, r4, #125829120 ; 0x7800000
したがって、基本的にはタイピングのショートカットです。アセンブラーに定数を貼り付ける場所を見つける権限を与えていることを理解してください。これは通常、良い仕事をしますが、安全に失敗したことがあるかどうかはわかりません。アセンブラが場所を見つけやすくするために、コードに .ltorg または .pool が必要な場合があります。