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à.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top