123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #ifndef REGISTERS_H
- #define REGISTERS_H
-
- #include "stdint.h"
- #include "compiler.h"
-
- /* Basic 16-bit and 32-bit register types */
- typedef union {
- struct {
- union {
- uint8_t l;
- uint8_t byte;
- };
- uint8_t h;
- } PACKED;
- uint16_t word;
- } PACKED reg16_t;
-
- typedef union {
- reg16_t;
- uint32_t dword;
- } PACKED reg32_t;
-
- /* As created by pushal / read by popal */
- struct i386_regs {
- union {
- uint16_t di;
- uint32_t edi;
- };
- union {
- uint16_t si;
- uint32_t esi;
- };
- union {
- uint16_t bp;
- uint32_t ebp;
- };
- union {
- uint16_t sp;
- uint32_t esp;
- };
- union {
- struct {
- uint8_t bl;
- uint8_t bh;
- } PACKED;
- uint16_t bx;
- uint32_t ebx;
- };
- union {
- struct {
- uint8_t dl;
- uint8_t dh;
- } PACKED;
- uint16_t dx;
- uint32_t edx;
- };
- union {
- struct {
- uint8_t cl;
- uint8_t ch;
- } PACKED;
- uint16_t cx;
- uint32_t ecx;
- };
- union {
- struct {
- uint8_t al;
- uint8_t ah;
- } PACKED;
- uint16_t ax;
- uint32_t eax;
- };
- } PACKED;
-
- /* Our pushal/popal equivalent for segment registers */
- struct i386_seg_regs {
- uint16_t cs;
- uint16_t ss;
- uint16_t ds;
- uint16_t es;
- uint16_t fs;
- uint16_t gs;
- } PACKED;
-
- /* All i386 registers, as passed in by prot_call or kir_call */
- struct i386_all_regs {
- struct i386_seg_regs;
- struct i386_regs;
- uint32_t i386_flags;
- } PACKED;
-
- #endif /* REGISTERS_H */
|