523bff7fce
Use makefile to build Use ld linker script to create final bin
2.1 KiB
2.1 KiB
Instruction
Build with
make
Run with
make test
Debug with
qemu-system-x86_64 -boot a -fda mbr -s -S
then
gdb
target remote localhost:1234
layout asm
b *0x7c00
c
ASM reg
In 16 bits
There is 4 main 16bits reg: AX, BX, CX, DX. You can access the 8 MSB from AX with AH and the 8 LSB with AL.( BH,BL, CH, CL)
SI and DI are 16bits index register often used for pointer but can contains data.
SP is stack pointer, BP is base pointer
AX(AH, AL), BX(BH, BL), CX(CH, CL), DX(DH, DL), SI, DI, SP, BP
In 32bits
Main register are "Extended" to 32bits but 16bits of 8bits direct access is not possible anymore.
EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP
In 64bits
Prefixed by R RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP
Bios Memory
Address range | Description |
---|---|
0x0 - 0x03FF | IVT |
0x400 - 0x4FF | BIOS Data |
0x500 - 0x7BFF | Unused |
0x7C00 - 0x7D77 | Bootloader |
0x7E00 - 0x9FFFF | Unused |
0xA0000 - 0xBFFFF | Video memory |
0xB0000 - 0xB7777 | Video memory monochrome |
0xB8000 - 0xBFFFF | Video memory color |
0xC0000 - 0xC7FFF | BIOS ROM |
0x80000 - 0xEFFFF | BIOS shadow memory |
0xF0000 - 0xFFFFF | BIOS System |
Interrupt Vector Table
INT_NUM | Short Description PM |
---|---|
0x00 | Division by zero |
0x01 | Debugger |
0x02 | NMI |
0x03 | Breakpoint |
0x04 | Overflow |
0x05 | Bounds |
0x06 | Invalid Opcode |
0x07 | Coprocessor not available |
0x08 | Double fault |
0x09 | Coprocessor Segment Overrun (386 or earlier only) |
0x0A | Invalid Task State Segment |
0x0B | Segment not present |
0x0C | Stack Fault |
0x0D | General protection fault |
0x0E | Page fault |
0x0F | reserved |
0x10 | Math Fault |
0x11 | Alignment Check |
0x12 | Machine Check |
0x13 | SIMD Floating-Point Exception |
0x14 | Virtualisation Exception |
0x15 | Control Protection Exception |