1, Assembly
Helloworld.s -----------------------------------------------------------------------
CODE32 ; ARM mode로 짰삼.
AREA Helloworld CODE, READONLY ; 이 코드 block의 이름과 속성, 이름은 HelloWorld // CODE의 모음 AREA
ENTRY ; Instruction이 제일 처음 실행할 곳.
BEGIN ; label
ADR r0, THUMB+1 ; r0에 THUMB label의 주소를 넣음.
BX r0 ; r0값으로 점프
CODE16 ; 여기서부터는 THUMB mode로 컴파일 해줘.
THUMB ; label
ADR r1, TEXT ; r1 ← "Hello World"의 주소
LOOP LDRB r0, [r1], #1 ; r1 주소에 있는 값을 1증가후 r0에 load
CMP r0, #0 ; 읽어들인 값이 0인지 비교하여 끝인지 확인하자.
BLNE print_ch ; printf_ch로 갔다 오자.
BNE LOOP ; 만약 0이 아니면 다시 하나 읽어들이기 위해 LOOP로 닥치고 돌아가
B EXIT ; 0이면 EXIT로 jump
TEXT = "Hello World ", 0 // Data > #1 이므로 +1
END ; Assembly file의 끝이여.
2.
Arm 형식
:: OP 코드 (명령어) + Operand
B : branch
L : R14 (LR) 에 넣어두기
X : ARM <> Thumb 전환
[Rn] :: C언어 * Rn 과 유사
// LDR r1, [r2] :: r2의 주소의 값을 r1에 Load
! : updata
Weak : 똑같은 이름의 Symbol이 더 있을 수 있다 (초기화 x)
calc PROC :: 함수이름이 PROC
a = a ^4 :: // 4 : 0100 // XOR