Self-Improvement

** ARM Instruction 설명 (지속적 추가 예정) ** 본문

ARM

** ARM Instruction 설명 (지속적 추가 예정) **

JoGeun 2021. 1. 14. 16:21

틀린점이 있다면 지적 바랍니다.

 

LDR

= 메모리에 있는 값을 레지스터에 저장한다.

ex)
LDR	R2, [R11, #s]
// R2 = s

 

LDRB

= 메모리에 있는 값 1byte를 레지스터에 저장한다

ex)
MOV	R3, #0x61
STRB	R3, [R11,#var_5]
LDRB	R3, [R11,#var_5]
// var_5 = 0x61, R3 = 0x61

 

STR

= 레지스터에 있는 값을 메모리에 저장한다

ex)
MOV	R3, #5
STR	R3, [R11,#var_68]
// var_68 = 5

 

STRB

= 레지스터의 값 1byte를 메모리에 저장한다

ex)
MOV	R3, #0x61
STRB 	R3, [R11,#var_5]
// var_5 = 0x61

 

SUB

* 주소를 줄때 자주 사용된다. *

ex)
SUB	R3, R11, #-s
// R3 = &s

 

STRH

= 레지스터에 있는 값 2byte를 저장한다

ex)
MOV	R3,#0
STRH	R3, [R11,#var_7C]
// var_7C = 0(2byte)

 

LDMIA

= 레지스터에 있는 값을 각 {레지스터}에 대입한다

ex) 
ADD	R2, PC, R2	; "abcdefg"
LDMIA	R2, {R0, R1}
// [R0] = [R2], [R1] = [R2+4]
// [R0] = "abcd", [R1] = "efg"

 

STMIA

= {레지스터}에 있는 값을 레지스터에 저장한다

ex)
SUB	R3, R11, #-var_84
STMIA	R3, {R0,R1}
// [R3] = "abcd", [R3+4] = "efg"

 

REV

= 엔디안을 변경하다.
LDR     R8, [SP,#0xE8+buf]
REV     R8, R8

 

MOVGT

= 크다

 

MOVLE

= 같거나 작다

 

MOVLS

= 작다.(Unsigned)

 

RSB

= SUB와 동일하지만 순서가 반대로 된다 
SUB R0 R1 #0
= R0 = R1-0

RSV R0 R1 #0
= R0 = 0 - R1