Je suivais ce tutoriel comme une première incursion dans le développement bootloader/OS pour x86 en utilisant MSNA:x86 MSNA directive « org » signifie
http://joelgompert.com/OS/TableOfContents.htm
Et je suis sur la leçon 4, ce qui fait mon bootloader affiche la chaîne "Hello, world". Je ne comprends pas la signification de l'instruction org
(directive?). Si je comprends bien, org
définit où le programme en cours d'exécution est chargé en mémoire. Ceci est nécessaire lors de l'utilisation de toute sorte d'étiquettes ou d'adresses relatives dans le programme.
Supposons que j'ai une chaîne définie par une étiquette comme celui-ci dans mon programme:
szHello db 'Hello, world!', 0
Et je puis essayer plus tard à la référence cette étiquette comme celui-ci (seulement des extraits pertinents):
org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello
Ma question est la suivante: pourquoi cela n'est-il pas équivalent? :
org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10
Lorsque je cours le premier exemple, ma chaîne apparaît correctement. Le deuxième exemple ne fonctionne pas.
Les pointeurs vers la documentation pertinente seraient également grandement appréciés, si le problème est un problème conceptuel de ma part.
Excellent, ça marche, merci. Cependant, je ne suis pas sûr de bien comprendre. Est-ce que 'org' consomme une adresse de segment, ou un décalage dans un segment? –
C'est un décalage dans le segment actuel. –
'mov ds, 0x7c0' n'est pas une instruction valide. Peut-être que vous voulez dire quelque chose comme "mov ax, 0x7c0'' mov ds, ax' –