|
2 years ago | |
---|---|---|
core | 2 years ago | |
drivers | 2 years ago | |
Makefile | 2 years ago | |
Readme.md | 3 years ago | |
linker.ld | 3 years ago | |
mbr.asm | 2 years ago |
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
https://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture
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
Main register are "Extended" to 32bits but 16bits of 8bits direct access is not possible anymore.
EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP
Prefixed by R RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP
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 |
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 |