본문 바로가기

전체 글77

정수 승격과 형변환 문제 정수 승격과 형변환 문제정수 승격연산: 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에.. 2018. 7. 22.
다중 메모리 이동: LDM, STM Multiple Load 및 Store LDM, STM다중 메모리 이동을 위해 LDM 및 STM 사용. STMIA R0, {R1-R3, R5} STMIA 는 Store, Increment After 라는 뜻이다.값을 읽고난 후에 주소가 증가된다. 이 명령 수행 후에도 R0 레지스터 값은 0x1000번지이다.R0 레지스터 값을 업데이트시키기 위해선, '!' suffix를 사용하자. STMIA R0!, {R1-R3, R5} --> R0 레지스터 값이 0x1010으로 auto-update된다. 참고로 레지스터는, 안의 순서와 관계없이 낮은 주소에 낮은 레지스터 번호가 저장된다! LDMDB R0, {R1-R3, R5} FD Stack PUSH, POPFD 스택에 PUSHSTMDB sp!, {regs} or ST.. 2018. 7. 22.
AAPCS와 레지스터 테이블 AAPCS에 의한 각 Register의 사용법 테이블 출처: http://recipes.egloos.com/4988629 AAPCS (Procedure Call Standard for ARM Architecture)argument 전달int function(int a, int b, int c, int d) 의 경우, R0 := a, R1 := b, R2: = c, R3 := d 이런 순서대로 레지스터에 전달된다. 함수의 return 값은 R0에 들어가게된다. 따라서 R0 레지스터에 들어온 인자 a가 계속 필요하다면 스택에 대피시키는 작업도 필요하다!인자는 4B align을 준수해야하기 때문에 잘 고려해서 함수를 설계해야 한다. 가급적 인자는 4개 이하로 만들자. 8B 데이터 (long long int, .. 2018. 7. 21.
ARM의 특수 용도 레지스터 ARM의 특수 용도 레지스터R13 ( SP : Stack Pointer ) : C/C++ 에서 stack 을 관리 하기 위해 포인터관리 용도로 사용. R14 ( LR : Link Register ) : 특정 함수 호출 뒤 return 될 위치를 저장할 목적으로 사용. R14 ( PC : Program Counter ) : 실행되는 code 의 위치 저장. 다른 platform 과 동일. CPSR ( Current Porcessor Status Register ) : 연산 결과, IRQ/FIQ 금지 및 동작 모드 등을 설정함. 2018. 7. 21.