첫째,
는, 아무것도 같은 준비가 만든 C 라이브러리
당신은 부트 로더 코드를 작성할 때, 당신은 당신이 의미 CODE, 당신의 자신의 환경을 조성하는 것을 알아야한다 알고 있어야 이 이와 유사한 BIOS 서비스 (또는 인터럽트 루틴) 만 사용할 수 있습니다.
자, 여기에 "stdio.h"헤더가 없으므로 위의 코드가 부팅되지 않는다는 것을 알 수 있습니다. 즉, 컴파일 된 코드를 실행할 때 CPU가 이 헤더를 찾지 못하고 "printf"가 무엇인지 이해하지 못하게 될 것입니다 (printf는 stdio.h 헤더의 메소드이기 때문에). 그래서 문자열을 출력하려면 헤더 파일과 같은 별도의 파일에서이 함수를 작성하고 마지막 바이너리 파일을 만들 때 또는 같은 파일에 컴파일 할 때 객체 파일을 링크해야합니다. 너하기에 달렸다. 다른 방법이있을 수 있습니다, 나는 그들과 잘 친숙하지 않습니다. 그냥 연구를 해보십시오.
당신이 알아야 할 또 다른 사항은이 부팅 코드 (귀하의 경우 위 코드)를 메모리 위치 0x07C00 (0x0000h : 0x7C00 세그먼트 : 오프셋 표현)에로드하는 책임이있는 BIOS입니다. 이 메모리 위치에이 코드를 작성하는 코드, 하나
그에 해당하는 레지스터를로드하여 ORG 명령
2 또는 1-사용하여에서 (CS, DS들)
또한 세그먼트 : 오프셋 메모리 표현 체계에 익숙해 져야합니다. 그냥 Google로 읽거나 읽어야합니다. ntel 매뉴얼.
마지막으로, BIOS가 0x07C00에 코드를로드하려면 부트 코드가 512 바이트를 초과해서는 안되며 (섹터가 512 바이트이기 때문에 부트 미디어의 첫 번째 섹터에만 해당) 부트 디스크의 마지막 2 바이트를 찾아야합니다. 이 첫 번째 섹터 (바이트 510 & 바이트 511)는 부팅 서명 0x55AA이며, 그렇지 않으면 BIOS가이 코드를 AS BOOTABLE로 간주하지 않습니다. 보통이 같이 코딩 :
ORG 0x7C00
...
부팅 코드와 512 바이트가 충분하지 않기 때문에 더 많은 코드를로드 할 수 있습니다.
...
번 510 - ($ - $$) db 0x00; 그냥 알려, 나는 그것에 대해 페이지를 작성됩니다 그렇다면, 당신은 그물에 더 많은 리소스를 찾을 필요가 있기 때문에 내가 여기에 모든 것을 커버하고 있지 않다 510 바이트
dw 0xAA55 ;Boot Sector signature,written in reverse order since it
will be stored as little endian notation
까지 ZEROFILL, - 알제리
탁
http://www.brokenthorn.com/Resources/OSDevIndex.html
, 희망이 ...^_^
Khilo 당신에게 도움이 되었습니까 전부 : 여기 (어셈블리 코딩)로 시작하는 링크입니다 http://wiki.osdev.org/Main_Page와 특히 - http://wiki.osdev.org/Boot_sequence에서 컴퓨터 부팅 방법을 확인하십시오. –
맞다면 BIOS에서 USB 스틱을 직접 부팅 하시겠습니까? 이것은 엄청난 작업이며, 정상적인 프로그램이 할 수없는 많은 작업이 필요합니다 (예를 들어, printf가 사용할 운영 체제가 없음). 부트 로더 코드 및 운영 체제 개발에 대한 Google 검색을 수행해야합니다. –