mbr.asm | ||
Readme.md |
== Instruction ==
Build with nasm -f bin mbr.asm -o mbr
Run with qemu-system-x86_64 -boot a -fda mbr
Debug with qemu-system-x86_64 -boot a -fda mbr -s -S 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 ==
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 | Virtualization Exception |
0x15 | Control Protection Exception |
== BIOS IRQ == https://en.wikipedia.org/wiki/BIOS_interrupt_call