I am following this tutorial as a first foray into bootloader/OS development for x86 using NASM:
http://joelgompert.com/OS/TableOfContents.htm
And I'm on Lesson 4, which is making my bootloader print the "Hello, world" string.
I'm not understanding the meaning of the org
instruction (directive?).
As I understand it, org
defines where the program being executed is loaded into memory. This is needed when using any sort of labels or relative addresses in the program.
Suppose I have a string defined with a label like this in my program:
szHello db 'Hello, world!', 0
And I then later try to reference that label like this (only relevant snippets):
org 0x7c00
xor ax, ax
mov ds, 0
...
mov si, szHello
lodsb
...
int 0x10 ; Print first character of szHello
My question is, why is that not equivalent to this? :
org 0
mov ds, 0x7c00
...
mov si, szHello
lodsb
...
int 0x10
When I run the first example, my string appears correctly. The second example does not work.
Pointers to relevant documentation would also be greatly appreciated, if the issue is a conceptual problem on my part.
org
defines where the program in question EXPECTS to be loaded into memory. Not where it actually is loaded -- that is controlled by whoever does the loading -- but where it expects to be loaded.