삭제요청

vov798의 이미지
Ghacker의 이미지

#define PTR(name) \
.##name: .word name

이 부분은 C 프리프로세서를 이용하기 위해 매크로를 디파인 한 부분입니다.

.file "startup.S"
.section .text.save,"ax",@progbits
.code 32
.section ".vectors", "ax"
.global vectors

이 부분은 Assembler directive 부분입니다. 자세한건 reference를 찾아보시구요.. 대강 32bit 코드이고 vectors라는 symbol을 export 하는 부분입니다.

vectors:
PTR(reset_vector)
PTR(start)

여기는 preprocessing 되는 부분인데...
.reset_vector: .word reset_vector

로 변환이 되구요.
.reset_vector라는 label에 reset_vector의 주소를 정의합니다.
아래 있는 start도 마찬가지구요..

.text
.global reset_vector
.global atexit
.type reset_vector, function

이 부분도 마찬가지로 assembler directive구요.

그 아래 코드는 귀차니즘 때문에 간략히 설명만 드리자면.. ^^;
BSS영역 -- .__bss_start label에 들어 있는 값(주소) 부터 .__bss_end label에 들어있는 값(주소) 까지 0으로 초기화를 하고 SP Register에 .StackHigh에 들어있는 값을 넣은 후 link register에 복귀주소를 넣고 StandaloneMain으로 분기하는 코드입니다.