mbr_asm/Readme.md

88 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2017-01-28 23:44:16 +01:00
# Instruction
2017-01-28 22:46:50 +01:00
Build with
`make`
2017-01-28 22:46:50 +01:00
Run with
`make test`
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-11-27 11:24:22 +01:00
https://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture
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