반응형
STP
case1. SP가 움직이는 경우
stp <xt1>, <xt2>, [<sp>, #<imm>]!
Case2. SP가 움직이지 않는 경우
stp <xt1>, <xt2>, [<sp>, #<imm>]
LDP
Case1. SP가 움직이는 경우
ldp <xt1>, <xt2>, [<sp>] #<imm>
Case2. SP가 움직이지 않는 경우
ldp <xt1>, <xt2>, [<sp>, #<imm>]
STR
Case1. SP가 움직이는 경우
str r1, [sp], #4
sp의 주소에 r1을 저장하고 난 후, sp를 4만큼 증가시킨다.
Case2. SP가 움직이지 않는 경우
str w0, [sp, #28]
sp+#28 주소에 w0 저장 (sp 안움직임)
LDR
Case1. SP가 움직이는 경우
Case2. SP가 움직이지 않는 경우
ldr r1, [sp, #16]
sp에 16바이트만큼 더한 주소에서 정수형 값을 읽어와 r1에 저장한다.
- LDRB : byte 변수 불러올 때
- LDRH : short 변수 불러올 때
- LDR : int 변수 불러올 때
RET
- Return from subroutine
X30레지스터에 담긴 값을 PC로 로딩. 즉, X30에 담긴 값으로 복귀.
CMP Vs. CMN
CMP
- 두 피연산자가 같으면 결과가 0.
- 즉, cmp a, b는 a-b다.
CMN
- 동일한 비교를 하지만, 두번째 피연산자가 음수인 경우
- 즉, cmn a, b는 a - (-b)다.
B, BL, BNE, BEQ
B there
- Label이 there인 곳으로 무조건 분기(점프)
B sub+ROM
- 계산된 위치의 서브루틴을 호출
BNE
- 0이 아니면 분기
BEQ
- 0이면 분기
Reference
- https://blog.naver.com/PostList.naver?blogId=crushhh
- StackOverflow
반응형