NASM - загрузка кода с USB-накопителя - PullRequest
3 голосов
/ 16 января 2011

Знает ли какой-нибудь гуру сборки аргумент (регистр dl ), который обозначает первый 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

Если это имеет какое-либо значение, я использую стандартную версию BIOS Dell Inspiron 15.


Очевидно, правильное значение для меня - 0x80.

BIOS загружает жесткие диски и маркирует их, начиная с 0x80 в соответствии с этим ответом .

По какой-то причине мой конкретный BIOS решает загрузить USB-накопитель первым, поэтому я могу загружаться с него.

1 Ответ

2 голосов
/ 20 августа 2011

Простой ответ заключается в том, что правильное значение для dl находится в dl.

Счастливый ответ заключается в том, что значение dl сint 13h, ah=8 GET DRIVE PARAMETERS возвращает используемую геометрию и позволяет коду образа дискеты FAT12 запускаться с любой BIOS / версии, которая может загружаться с USB-накопителя.

См. Мой пост здесь: USBСекреты загрузки

...