2010-07-14 2 views
2

안녕하세요, 저는 OS 작성에 많은 관심이 있습니다. 오랫동안 사용해 왔지만 여전히 그것을 삼킬 수 없었습니다. (처음에는 "무엇을 읽을 수 있는지 이해할 수 없습니까?" 그리고 PHP, HTML, AS3.0, C++과 같은 다른 모든 것들에도 잘 적용됩니다.) 더 많이) 이제 막 알아 냈습니다. 문제는 - 실제로, ASM은 지금까지 내가 특정 부트 로더가 필요하다는 것을 흥미로웠다. (GRUB와 같은 다른 것들이있다.하지만 긴 이야기 일 뿐이다.)NASM과 INT13h - 내가 뭘 잘못하고 있니?

분명히 가장 중요한 부분은 실제로 디스크에서 이미지 섹터로 뭔가를 읽고 거기로 점프하는 것입니다. 그러나, INT 0x13은 AH 0x02, 즉. 디스크에서 섹터 읽기가 실제로 작동하지 않습니다 (또는 나는 그것을 얻지 못합니다).

그래서, 나는이 정보를 발견 Click

을 그리고 Bochs와의 약간의 연구 후 I 섹터, 실린더, 헤드, 디스크에 대한 모든 수를 발견했다.

이제 테스트 해보니 첫 번째 섹터를 읽고 그 중 일부 문자를 인쇄하고 싶었습니다. 처음에는이 바로 부트 로더가 있었기 때문에 사용 된 메시지의 일부가 보였습니다.

하지만 ... 그냥 작동하지 않습니다. 버퍼를 다른 장소, 메시지, 다른 섹터에 넣으려고합니다. 아무도 나에게 지정된 지점의 읽기와 같은 예를 보여줄 수 있습니까?

감사합니다.

+0

이 코드를 실행하는 환경은 무엇입니까? 리얼 모드 DOS? –

+1

음 ... 부팅 직후 Bochs 환경에 있습니다. 그리고 저는 Protected로 전환하지 않았습니다. 그렇습니다. 아마도 그것이 진짜 일 것입니다. –

답변

0

마침내 얻었습니다!

드라이브 번호 (DL)가 잘못되었습니다 ... 플로피 대신 HDD로 전환 했으므로 0x80으로 변경하는 것을 잊었습니다. 또한 섹터 번호는 0-5가 아닌 CH의 비트 2-7입니다.

: D 감사합니다.

0

당신이 알고있는 부트 로더 중 하나의 소스 코드를 살펴볼 수 있습니다. grub ...

또는 더 간단합니다 : 작업 설치의 MBR 또는 부트 섹터를 파일에 저장하고 디스 어셈블하십시오. 이것은 공간 제약 (최소 512 바이트)으로 인해 최소로만 수행되는 로더 코드를 제공하기 때문에 좋습니다.

+0

필자는 FAT16에서 32를 쳐다 보았다.하지만 어셈블러에 익숙하지 않아 FAT32 섹터 위치로 변환하기위한 많은 opcode를 이해할 수 없었다. 누구나이 인터럽트에 대한 설명을 제공합니다 (입력 및 출력뿐 아니라 사용 방법도 포함). –

+0

그렇다면 이전 Dos OS를 설치하고 부트 레코드를 분해하면 Int에서 13h를 사용하는 HD 섹터 몇 개를 읽는 것보다 더 복잡한 작업이 수행되지 않습니다 – JeSuisse

+0

위키 백과를 확인 했습니까? http://en.wikipedia.org/wiki/INT_13 입력/출력에 대한 설명이 꽤 있습니다. * 인터럽트와 그것이 제공하는 데이터를 사용하는 방법은 당신이 성취하고자하는 것에 크게 의존하며, 디스크 포맷 방법에 따라 크게 달라집니다. –

관련 문제