ARMアドレッシング

3325 ワード

ARMのいくつかのアドレス方式
イミディエイトアドレッシング
レジスタアドレッシング
レジスタ間接アドレス
ベースアドレッシング
そうたいアドレッシング
スタックアドレッシング
ブロックコピーアドレッシング
 

 


 
 
 
 
 
 
 
 
 
 
  • イミディエイトアドレッシング

  • 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