cfenollosa_os-tutorial/06-bootsector-segmentation/README.md
2014-10-05 20:41:18 +02:00

1021 B

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.