47 lines
1.8 KiB
Markdown
47 lines
1.8 KiB
Markdown
|
---
|
||
|
title: "cpu.h"
|
||
|
summary: "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](https://nerdcult.net/projects/noxos/docs/codebase/platform/cpu.h/#cpu_flags_e---enum)
|
||
|
- **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**
|