x86 NASM 'org' - Richtlinie Bedeutung
Ich bin nach diesem tutorial sowie einen ersten Ausflug in den bootloader/OS-Entwicklung für x86 mit NASM:
http://joelgompert.com/OS/TableOfContents.htm
Und ich bin auf Lektion 4, die so ist mein bootloader print "Hallo, Welt" string.
Ich bin nicht das Verständnis der Bedeutung der org
Weisung (Richtlinie?).
Wie ich es verstehe, org
definiert, wo das Programm ausgeführt wird, in den Speicher geladen wird. Dies ist erforderlich, wenn Sie jede Art von Etiketten oder relative Adressen im Programm.
Angenommen ich habe einen string definiert ein label, wie dies in meinem Programm:
szHello db 'Hello, world!', 0
Ist und ich dann später versuchen zu verweisen, dass das label wie folgt aus (nur relevanter Beispiele):
org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello
Meine Frage ist, warum ist das nicht äquivalent zu dieser? :
org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10
Wenn ich das erste Beispiel, mein string richtig angezeigt. Das zweite Beispiel funktioniert nicht.
Zeiger auf entsprechende Dokumentation wäre auch sehr dankbar, wenn das Problem ist ein konzeptionelles problem von meiner Seite.
Du musst angemeldet sein, um einen Kommentar abzugeben.
0000:7C00 ist nicht äquivalent zu 7C00:0000. Das segment Teil gezählt wird in den Absätzen, nicht bytes. Versuchen Sie dies:
org
verbrauchen segment-Adresse oder ein offset in einem segment?mov ds, 0x7c0
ist keine gültige Anweisung. Vielleicht meinst du so etwas wiemov ax, 0x7c0
mov ds, ax
org
definiert, wo das Programm in Frage ERWARTET werden in den Speicher geladen. Nicht dort, wo es tatsächlich geladen wird -- das kontrolliert wird, wer übernimmt den laden-aber wo es erwartet geladen werden.org
überhaupt?