;; 링커가 수많은 이미지들을 분류하는 기준 -> 섹션 :AREA(시작)...~~ ...END(끝)
AREA AddReg, CODE , READONLY ;; CODE영역, 속성 : read only
ENTRY;; binary image 시작, 하나의 섹션에 올 수 있다.
main;; 레이블
ADR r0, ThumbProg + 1 ;; pc=8009
BX r0
CODE16;; 이 위치부터 어셈블러가 코드를 만들 때 Thumb코드로 만든다.
;; 0번 비트 1 -> cpst의 T비트 1로 변화
ThumbProg
;; pc가 2씩 증가
MOV r2, #2
MOV r3, #3
ADD r2, r2, r3
ADR r0, ARMProg
BX r0 ;; 0번 비트를 0으로 만들 필요 없음
CODE32;; ARM state
ARMProg
MOV r3, #4
MOV r5, #5
ADD r4, r4, r5
stop
MOV r0, #0x18
LDR r1, =0x20026
SWI 0x123456
END
;; 컴파일러 차원에서 제공되는 슈도코드 : 프로그래밍을 쉽게 하도록 하기 위함
--> ADR, LDR
ADR : address of labe -> 현재의 프로그램 카운터의 값을 기준으로 지정된 레이블의 주소값을 gpr에 저장
LDR r1, =0x.... 32bits 표현가능한 범위내의 값을 저장(mov의 한계점을 극복가능)
- code density 와는 무관함
댓글