NASM - Code de charge à partir du lecteur USB
-
11-10-2019 - |
Question
les gourous Would assemblage connaissent l'argument (registre dl ) qui signifie le premier lecteur USB?
Je travaille par quelques tutoriels MSNA, et je voudrais obtenir un démarrage physique (je peux obtenir un propre avec qemu).
Ceci est la partie du code qui charge les données « du noyau » à partir du disque:
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
Si cela fait une différence, je suis en cours d'exécution d'un stock Dell Inspiron 15 BIOS.
Apparemment, la valeur correcte pour moi est 0x80.
Les BIOS charge les disques durs et les étiquettes les 0x80 à partir de d'après cette réponse .
Mon BIOS particulier décide de charger le lecteur USB comme la première, pour une raison quelconque, je peux démarrer à partir de là.
La solution
La réponse simple est que la valeur correcte pour dl
est dl
.
La réponse heureuse est que la valeur dl
avec les paramètres int 13h, ah=8
GET DRIVE renvoie la géométrie à utiliser et permet le code d'image de disquette FAT12 pour exécuter à partir de tout BIOS / version qui peut démarrer à partir d'un lecteur flash USB.
Voir mon post ici: Secrets Amorçage USB