2017-01-28 23:44:16 +01:00
|
|
|
# Instruction
|
2017-01-28 22:46:50 +01:00
|
|
|
|
|
|
|
Build with
|
2017-01-28 23:44:16 +01:00
|
|
|
`nasm -f bin mbr.asm -o mbr`
|
2017-01-28 22:46:50 +01:00
|
|
|
|
|
|
|
Run with
|
2017-01-28 23:44:16 +01:00
|
|
|
`qemu-system-x86_64 -boot a -fda mbr`
|
2017-01-28 22:46:50 +01:00
|
|
|
|
2017-01-28 23:31:26 +01:00
|
|
|
Debug with
|
2017-01-28 23:44:16 +01:00
|
|
|
`qemu-system-x86_64 -boot a -fda mbr -s -S`
|
|
|
|
then
|
|
|
|
`gdb`
|
|
|
|
```
|
2017-01-28 23:31:26 +01:00
|
|
|
target remote localhost:1234
|
|
|
|
layout asm
|
|
|
|
b *0x7c00
|
|
|
|
c
|
2017-01-28 23:44:16 +01:00
|
|
|
```
|
2017-01-28 23:31:26 +01:00
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
# ASM reg
|
2017-01-28 23:40:54 +01:00
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
## In 16 bits
|
2017-01-28 23:40:54 +01:00
|
|
|
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
|
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
## In 32bits
|
2017-01-28 23:40:54 +01:00
|
|
|
Main register are "Extended" to 32bits but 16bits of 8bits direct access is not possible anymore.
|
|
|
|
|
|
|
|
EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP
|
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
## In 64bits
|
2017-01-28 23:40:54 +01:00
|
|
|
Prefixed by R
|
|
|
|
RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP
|
|
|
|
|
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
# 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
|
2017-01-28 22:46:50 +01:00
|
|
|
|
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
# Interrupt Vector Table
|
2017-01-28 22:46:50 +01:00
|
|
|
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
|
2017-01-28 23:44:16 +01:00
|
|
|
0x14 | Virtualisation Exception
|
2017-01-28 22:46:50 +01:00
|
|
|
0x15 | Control Protection Exception
|
2017-01-28 22:58:59 +01:00
|
|
|
|
2017-01-28 23:44:16 +01:00
|
|
|
# BIOS IRQ
|
2017-01-28 22:58:59 +01:00
|
|
|
https://en.wikipedia.org/wiki/BIOS_interrupt_call
|