ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boot.txt 해설(2)
    만들면서 배우는 OS커널의구조와원리 2015. 4. 16. 20:18

       mov edi, 0

    mov byte [es:edi], 'A'

    inc edi

    mov byte [es:edi], 0x06

    inc edi

    mov byte [es:edi], 'B'

    inc edi

    mov byte [es:edi], 0x06

    inc edi

    mov byte [es:edi], 'C'

    inc edi

    mov byte [es:edi], 0x06

    inc edi

    mov byte [es:edi], '1'

    inc edi

    mov byte [es:edi], '2'

    inc edi

    mov byte [es:edi], 0x06

    inc edi

    mov byte [es:edi], '3'

    inc edi

    mov byte [es:edi], 0x06



    edi에 0을 넣는다. es에는 0xB800이 들어있어 화면의 제일 처음부분에서 시작한다는 의미를가지고있다.


    mov byte [es:edi],'A'명령으로 화면의 첫부분에 A를 출력시킨다.


    여기서 byte[]는 C의 char*와 같은 1바이트형 포인터이다. 이 주소에 한바이트만 쓰기를 하겠다는 소리이다. 


    inc edi는 edi에 1을 더한다는뜻으로 주소를 한칸뒤로 옮긴다.

    그리고 0x06이란값을 넣는데, A란 글자를 검은 바탕에 갈색글씨로 나타낸다.


    이걸 반복해서 하나하나 주소를 뒤로옮겨가며 ABC123을 출력시키게된다.


    jmp $

    msgBack db '.', 0x67


    times 510-($-$$) db 0

    dw 0xAA55



    jmp $는 이곳에서 무한루프를 돌게 만든다.


    $는 현재 이 명령이 있는 주소값을 나타내는거고, 이줄은 while(1) 즉 무한루프다.


    msgBack db '.', 0x67은 방금 사용했던 배경색을 나타내는 데이터다. 한 바이트씩 두개가 이 번지안에 들어있다는 뜻이다.


    jmp $로 무한루프를 도는데 이곳이 실행되지않는다. 실행되면 이상한 동작할것이 눈에 딱보인다.


    times 510-($-$$) db 0 해당 명령은 이번지에서부터 509번까지 0으로 채우라는 뜻이다.


    dw 0xAA55는 위에서 509까지 0으로 채웠으니 510번지에는 0x55, 511번지에는 0xAA가 들어가게된다.


    이렇게 하는이유는 부팅시, 바이오스가 MBR부분을 복사할때 프로그래머가 지정한 MBR이 맞는지 확인을하는데 MBR끝에 0xAA55값이있으면 이곳이 MBR이 맞다는것을 판단하게된다.



    '만들면서 배우는 OS커널의구조와원리' 카테고리의 다른 글

    boot.txt 해설  (0) 2015.04.16
    부트스트랩  (0) 2015.04.16

    댓글

Designed by Tistory.