| .. | ||
| boot_sect_segmentation.asm | ||
| README.md | ||
Concepts you may want to Google beforehand: segmentation
Goal: learn how to address memory with 16-bit real mode segmentation
If you are comfortable with segmentation, skip this lesson.
We did segmentation
with [org] on lesson 3. Segmentation means that you can specify
an offset to all the data you refer to.
This is done by using special registers: cs, ds, ss and es, for
Code, Data, Stack and Extra (i.e. user-defined)
Beware: they are implicitly used by the CPU, so once you set some
value for, say, ds, then all your memory access will be offset by ds.
Read more here
Furthermore, to compute the real address we don't just join the two
addresses, but we overlap them: segment << 4 + address. For example,
if ds is 0x4d, then [0x20] actually refers to 0x4d0 + 0x20 = 0x4f0
Enough theory. Have a look at the code and play with it a bit.
Hint: We cannot mov literals to those registers, we have to
use a general purpose register before.