x86 architecture notes
    real mode
        registers
                     0              15
            ax      | ah     | al    |
            bx      | bh     | bl    |
            cx      | ch     | cl    |
            dx      | dh     | dl    | general-purpose registers
            bp      |        .       | stack frame base pointer
            sp      |        .       | top of stack pointer
            si      |        .       | source index
            di      |        .       | destination index
            ip      |        .       | instruction pointer
            sw      |        .       | status word (flags)
            cs      |        .       | code segment register
            ss      |        .       | stack segment register
            ds      |        .       | data segment register
            es      |        .       | extra segment register
        segment combinations
            cs:ip  code to execute
            ss:sp  top of stack
            ds:si  typically, src string pointer
            es:si  typically, dst string pointer
        memory map
            0x00000 (1k)
                lowmem, real mode interrupt vector table
             
            0x00400 (256k bytes)
                lowmem, bios data
            0x00500 (~30k)
                available ram
            0x07c00 (512 bytes)
                os boot sector
            0x07e00 (480k)
                available ram
            0x80000 (128k)
                extended bios data area
            0xa0000 (64k)
                ega/vga graphics modes
            0xb0000 (32k)
                monochrome text mode
            0xb8000 (32k)
                colour text mode
            0xc0000 (128k)
                rom of video card and/or network cards
            0xe0000 (128k)
                rom of bios
            .
        bda / ebda maps
            See https://wiki.osdev.org/Memory_Map_(x86)