본문 바로가기
한국으로/ARM

정수 승격과 형변환 문제

by 영킴. 2018. 7. 22.

정수 승격과 형변환 문제

정수 승격

연산: A + B
작은 타입이 큰 타입으로 변환된다.

대입: A = B
우변이 좌변 타입에 맞게 변환된다.

호출: f(int x) 함수에 f(3.14) 호출
argument가 parameter에 맞게 변환된다.



LDR, STR 명령 데이터 타입 지정하기

LDR  -->  int 로드

LDRB  -->  unsigned byte 로드


LDRSB  -->  signed byte 로드


LDRH  -->  unsigned short 로드


LDRSH  -->  signed short 로드



STR-->  int 로드

STRB-->  unsigned byte 저장


STRH-->  unsigned short 저장




LDRD, STRD 명령

double load, store

주의사항:
1. 연속한 레지스터 Rn, Rn+1에 저장할 것.
2. Rn은 반드시 짝수번호.
3. 메모리 주소는 반드시 4의 배수 (4B align).
4. LDRD, STRD 명령은 shift 옵션 사용 불가.



UXT, SXT 명령

char나 short를 쉽게 signed int로 승격시킬 수 있는 명령!

UXTH r0, r0  -->  하위 16비트를 추출하고 상위 비트에 0 확장.

SXTH r0, r0  -->  signed int로 부호 확장


UXTB r0, r0  -->  하위 8비트 추출하고 상위 비트에 0 확장.

SXTB r0, r0  -->  부호 확장.


'한국으로 > ARM' 카테고리의 다른 글

Cortex-A9 Coprocessor  (0) 2018.07.29
Interrupt Controller  (0) 2018.07.29
ARM Mode(모드) and Exception(예외)  (0) 2018.07.24
Tail Call  (0) 2018.07.24
다중 메모리 이동: LDM, STM  (0) 2018.07.22
AAPCS와 레지스터 테이블  (0) 2018.07.21
ARM의 특수 용도 레지스터  (0) 2018.07.21
호출 규약 __cdecl 과 __stdcall의 차이점  (0) 2018.07.21