임베디드/임베디드 레시피

4장 ,안한부분 끝 // 완

twoweeks-within 2025. 1. 28. 14:59

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 

'임베디드 > 임베디드 레시피' 카테고리의 다른 글

2장 이어서 ~ 3장까지 (완)  (0) 2025.01.26
2장 이어서  (0) 2025.01.25
2장 정리  (0) 2025.01.24
1장 이어서  (0) 2025.01.22
1장 정리안된부분  (0) 2025.01.20