estoy siguiendo este tutorial como una primera incursión en el desarrollo del gestor de arranque/OS para x86 usando NASM:x 86 NASM 'org' Directiva significa
http://joelgompert.com/OS/TableOfContents.htm
Y yo estoy en la lección 4, que está haciendo mi bootloader imprime la cadena "Hello, world". No entiendo el significado de la instrucción org
(¿directiva?).
Según tengo entendido, org
define dónde se carga el programa que se está ejecutando en la memoria. Esto es necesario cuando se utiliza cualquier tipo de etiquetas o direcciones relativas en el programa.
Supongamos que tengo una cadena definida con una etiqueta como esta en mi programa:
szHello db 'Hello, world!', 0
Y luego intenta hacer referencia a esa etiqueta como esta (sólo fragmentos relevantes):
org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello
Mi pregunta es, ¿por qué eso no es equivalente a esto? :
org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10
Cuando ejecuto el primer ejemplo, la secuencia aparece correctamente. El segundo ejemplo no funciona.
Los punteros a la documentación relevante también serían muy apreciados, si el problema es un problema conceptual de mi parte.
Excelente, eso funciona, gracias. Sin embargo, no estoy seguro de entender completamente. ¿'Org' consume una dirección de segmento, o una compensación en un segmento? –
Es un desplazamiento en el segmento actual. –
'mov ds, 0x7c0' no es una instrucción válida. Tal vez te refieres a algo como 'mov ax, 0x7c0'' mov ds, ax' –