2011-01-16 4 views
3

첫 번째 USB 드라이브를 나타내는 인수 (레지스터 dl)를 어떤 어셈블리 전문가가 알고 있습니까?NASM - USB 드라이브의 코드로드

나는 두 개의 NASM 튜토리얼을 통해 작업 중이며 실제 부팅을 원한다. (나는 qemu로 깨끗한 것을 얻을 수있다.)

loadkernel: 
    mov si, LMSG ;; 'Loading kernel',13,10,0 
    call prints ;; ex puts() 

    mov dl, 0x00 ;; The disk to load from 
    mov ah, 0x02 ;; Read operation 
    mov al, 0x01 ;; Sectors to read 
    mov ch, 0x00 ;; Track 
    mov cl, 0x02 ;; Sector 
    mov dh, 0x00 ;; Head 
    mov bx, 0x2000 ;; Buffer end 
    mov es, bx 
    mov bx, 0x0000 ;; Buffer start 

    int 0x13 
    jc loadkernel 

    mov ax, 0x2000 
    mov ds, ax 

    jmp 0x2000:0x00 

그것은 어떤 차이가있는 경우

, 나는 주식 델 인스 (15) BIOS를 실행 해요 :

이 디스크에서 "커널"데이터를로드 코드의 섹션입니다.


명백히 올바른 값은 0x80입니다.

BIOS가 하드 드라이브를로드하고 0x80 according to this answer부터 시작하여 레이블을 지정합니다.

내 BIOS가 USB 드라이브를 첫 번째로로드하기로 결정하고 어떤 이유로 부팅 할 수 있습니다.

답변

2

간단히 대답하면 dl의 올바른 값은 dl입니다.

행복한 대답은 int 13h, ah=8 GET 드라이브 매개 변수를 사용하여 dl 값을 사용하는 구조를 반환하고 부팅 할 수있는 BIOS/버전에서 실행할 수있는 FAT12 플로피 디스크 이미지 코드를 수 있다는 것입니다 USB 플래시 드라이브.

내 게시물보기 : USB Booting Secrets