# 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**