46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
# cpu.h
|
|
|
|
Stuff related directly with the cpu.
|
|
|
|
OSDev Wiki: [x86 CPU Registers](https://wiki.osdev.org/CPU_Registers_x86)
|
|
|
|
# `cpu_state_T` - struct
|
|
- **cr3** - Control register 3, holds the current page table
|
|
- **rax** - General purpose register
|
|
- **rbx** - General purpose register
|
|
- **rcx** - General purpose register
|
|
- **rdx** - General purpose register
|
|
- **rsi** - General purpose register
|
|
- **rdi** - General purpose register
|
|
- **rbp** - The Bottom of the current stack frame
|
|
- **interrupt_id** - The ID of the interrupt, that captured the cpu state
|
|
- **error_code** - Some exceptions such as the Page fault push more detailed information into here
|
|
- **rip** - The current instruction address
|
|
- **cs** - Segment selector of the associated IDT descriptor
|
|
- **flags** - The CPU's FLAGS register, a status bitmap -> cpu_flags_E
|
|
- **rsp** - The Top of the current stack frame
|
|
- **ss** - Not totally sure, what this does, but it has to do with security rings
|
|
|
|
This struct defines a *complete* CPU state, that can be saved and restored.
|
|
Such a state is saved when the CPU fires an interrupt and restored by the interrupt handler when it's finished.
|
|
This allows multithreading and exception analysis.
|
|
# `cpu_flags_E` - enum
|
|
- **CPU_FLAG_CARRY**
|
|
- **CPU_FLAG_PARITY**
|
|
- **CPU_FLAG_AUXILIARY**
|
|
- **CPU_FLAG_ZERO**
|
|
- **CPU_FLAG_SIGN**
|
|
- **CPU_FLAG_TRAP**
|
|
- **CPU_FLAG_INTERRUPT_ENABLE**
|
|
- **CPU_FLAG_DIRECTION**
|
|
- **CPU_FLAG_OVERFLOW**
|
|
- **CPU_FLAG_IO_PRIVILEGE_0**
|
|
- **CPU_FLAG_IO_PRIVILEGE_1**
|
|
- **CPU_FLAG_NESTED_TASK**
|
|
- **CPU_FLAG_RESUME**
|
|
- **CPU_FLAG_VIRTUAL_8086**
|
|
- **CPU_FLAG_ALIGNMENT_CHECK**
|
|
- **CPU_FLAG_VIRTUAL_INTERRUPT**
|
|
- **CPU_FLAG_VIRTUAL_INTERRUPT_PENDING**
|
|
- **CPU_FLAG_CPUID**
|