ARMアドレッシング
3325 ワード
ARMのいくつかのアドレス方式
イミディエイトアドレッシング
レジスタアドレッシング
レジスタ間接アドレス
ベースアドレッシング
そうたいアドレッシング
スタックアドレッシング
ブロックコピーアドレッシング
即時数アドレッシングは、即時数をopcode(命令符号化中)に直接符号化し、
レジスタ内のデータを操作し、いくつかの変数間の中間演算プロセスで使用される可能性があります.
ARMのデータ転送命令はいずれもこの方式に基づいており,Load,Storeにより(メモリ)データへのアクセス,グローバル変数へのアクセスが完了する.
配列へのアドレスはこんなものでしょう
このアドレス方式はx 86内のE 8,E 9とは差が少なく,ジャンプ位置としてオフセット量が用いられる.現在のPCに相対オフセットを加えてジャンプするのではないかと推測します.
R 13はSPポインタ
イミディエイトアドレッシング
レジスタアドレッシング
レジスタ間接アドレス
ベースアドレッシング
そうたいアドレッシング
スタックアドレッシング
ブロックコピーアドレッシング
イミディエイトアドレッシング
1 SUBS R0,R0,#1 ;R0 =R0 -1 , R0( R0 )
2
3 MOV R0,#0xFF ;R0 0xFF R0
即時数アドレッシングは、即時数をopcode(命令符号化中)に直接符号化し、
レジスタアドレッシング
MOV R1,R2 ;R2 = R1
SUB R0,R1,R2 ;R0 = R1 - R2
レジスタ内のデータを操作し、いくつかの変数間の中間演算プロセスで使用される可能性があります.
レジスタ間接アドレス
LDR R0, [R1] ;R0 <-- mem32[R1]
STR R0, [R1] ;mem32[R1] <-- R0
ARMのデータ転送命令はいずれもこの方式に基づいており,Load,Storeにより(メモリ)データへのアクセス,グローバル変数へのアクセスが完了する.
ベースアドレッシング
LDR R2, [R3, #0x0C] ;R2 <-- mem32[R3+0x0C]
STR R1, [R0,#-2] ;R1 --> mem32[R0 - 2]
LDR R1, [R0, R3, LSL #1] ;R1 <-- mem32[R0 + R3*2]
; ----------------------------------------------------------------
LDR R0, [R1, #4] ;R0 <-- mem32[R1+4]
LDR R0, [R1, #4]! ;R0 <-- mem32[R1+4] ,R1 =R1 +4
; !
; ----------------------------------------------------------------
LDR R0, [R1], #4 ;R0 <-- [R1], R1 = R1+4
配列へのアドレスはこんなものでしょう
そうたいアドレッシング
BL SUBR1 ;
;--------------------------------------------------------
BEQ LOOP ;
このアドレス方式はx 86内のE 8,E 9とは差が少なく,ジャンプ位置としてオフセット量が用いられる.現在のPCに相対オフセットを加えてジャンプするのではないかと推測します.
スタックアドレッシング
STMFD SP!,{R1-R7, LR} ; R1 R7,LR
LDMFD SP!,{R1-R7,LR} ; R1 R7,LR
R 13はSPポインタ
スタックアドレッシング
; IA IB DA DB
STMIA R9!, {R0, R1, R5}
; mem32[R9] <-- R0, R9 = R9 +4
; mem32[R9] <-- R0, R9 = R9 +4
; mem32[R9] <-- R0, R9 = R9 +4