Sto seguendo questo tutorial come prima incursione in sviluppo bootloader/OS per x86 che utilizza NASM:x86 NASM 'org' significato
http://joelgompert.com/OS/TableOfContents.htm
E io sono su Lezione 4, che sta facendo il mio bootloader stampa la stringa "Hello, world". Non sto capendo il significato dell'istruzione org
(direttiva?).
Come ho capito, org
definisce dove viene caricato il programma in esecuzione. Questo è necessario quando si utilizza qualsiasi tipo di etichette o indirizzi relativi nel programma.
Supponiamo che io sono una stringa definita con un'etichetta come questo nel mio programma:
szHello db 'Hello, world!', 0
E poi cerco di riferimento che etichettare come questo (solo frammenti rilevanti):
org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello
La mia domanda è, perché non è equivalente a questo? :
org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10
Quando si esegue il primo esempio, la stringa viene visualizzata correttamente. Il secondo esempio non funziona.
Anche i riferimenti alla documentazione pertinente sarebbero molto apprezzati, se il problema è un problema concettuale da parte mia.
Eccellente, funziona, grazie. Tuttavia, non sono sicuro di aver capito appieno. 'Org' consuma un indirizzo di segmento o un offset in un segmento? –
È un offset nel segmento corrente. –
'mov ds, 0x7c0' non è un'istruzione valida. Forse intendi qualcosa come "mov ax, 0x7c0'' mov ds, ax' –