在 C++ 中创建虚拟寄存器的最佳方法

Best way to create virtual registers in C++

我正在尝试创建一个只能为高中项目执行 x86 汇编代码的准系统 VM,并且我想使用结构创建所有寄存器。我已经实现了所有的指令、操作码和操作数逻辑,但我担心随着项目的发展,这种创建 CPU 寄存器的拙劣做法从长远来看不会很好,我是如果这不是实现虚拟寄存器的最佳方式,我最担心的是,更不用说我编写的所有重复代码看起来都很丑陋。如果有人可以让它变得更好或更有效率,那将非常有帮助。

#include <iostream>
#include <cstdlib>

// 64-bit registers
struct ULL_REGISTER_STRUCT {
    int64_t RAX; // accumulator
    int64_t RCX; // counter
    int64_t RDX; // data
    int64_t RBX; // base
    int64_t RSP; // stack pointer
    int64_t RBP; // stack base pointer
    int64_t RSI; // source index
    int64_t RDI; // destination index
} ULL_REGISTERS;

// 32-bit registers
struct UL_REGISTER_STRUCT {
    int32_t EAX;
    int32_t ECX;
    int32_t EDX;
    int32_t EBX;
    int32_t ESP;
    int32_t EBP;
    int32_t ESI;
    int32_t EDI;
} UL_REGISTERS;

// 16-bit
struct SHORT_REGISTER_STRUCT {
    int16_t AX;
    int16_t CX;
    int16_t DX;
    int16_t BX;
    int16_t SP;
    int16_t BP;
    int16_t SI;
    int16_t DI;
} SHORT_REGISTERS;

// 8-bit registers
struct CHAR_REGISTER_STRUCT {
    int8_t AH;
    int8_t AL;
    int8_t CH;
    int8_t CL;
    int8_t DH;
    int8_t DL;
    int8_t BH;
    int8_t BL;

    int8_t SPL;
    int8_t BPL;
    int8_t SIL;
    int8_t DIL;
} CHAR_REGISTERS;

我最近用c++写了一个PDP11模拟器我就是这样做的

   uint16_t registers[8];
   uint16_t &PC = registers[0];
   uint16_t &R1 = registers[1];  
   .....

即创建一个寄存器数组,以便我可以将它们保存为一个块或其他任何内容,但为每个寄存器创建具有众所周知名称的引用