본문 바로가기

카테고리 없음

[2]부트로더 코딩


소스-----------------

;부트로더, bootsect.asm
times 510-($-$$) db 0x00
dw 0xaa55

소스-----------------



헤헤....쉽죠..?
참고로 ;은 주석처리를 하는거에요. C언어에는 //가 있듯이. 

그러므로


어셈블리도 주석을 달고 싶을때는 ;를 쓰면 됩니다.


 소스를 한번 보세요


times는 같은 동작을 반복하는 명령어라고 하는군요.

$는 현재 주소입니다


$$는 세그먼트의 시작주소 이에요.
 

$-$$는 처음과 현재의 차이이고

510-($-$$)는 현재부터 510번째까지.. 가됩니다. 저도 이해가 안됩니다. 그냥 그런가보다 하면되요.

그럼 현재부터 510번재 까지 db 0x00을 반복합니다. times는 같은 동작을 반복한다고 말씀드렸을거에요.

db는 1바이트입니다. 결국 전부 1바이트씩 0x00으로 차게 됩니다.

dw 0xaa55 이군요. dw는 2바이트 입니다. word입니다.

그런데 이상하죠? 분명 55 aa로 끝나야 한다고 했는데, 여기선 aa55라고 적었습니다.

인텔이나 AMD CPU는 리틀엔디안이라는 방식을 사용합시다. 저장을 거꾸로 하지요. 결국 55 aa가 들어가겠죠!

끝으로 작성한 파일은 boot.asm으로 저장!

이렇게 모두 다 끝마쳤으면
이미지 파일을 만들어 QEMU 로 실행을 해보면 됩니다.

그럼 다음 강의에서 만나요.