Limetime's TimeLine
article thumbnail
Published 2024. 1. 27. 00:44
ARM64 주요 명령어 System/ARM
반응형

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

반응형
profile

Limetime's TimeLine

@Limetime

포스팅이 좋았다면 "공감❤️" 또는 "구독👍🏻" 해주세요!