c++ - 模拟CPU寄存器?

标签 c++ cpu-registers

我想模拟注册的工作,我声明Register类如下

class Register{
    uint8_t reg_ax[2];
    Register(){
        reg_ax[0] = reg_ax[1] = 0;
    }
    uint16_t &ax(){ return (uint16_t &)reg_ax[0]; }
};

现在我可以打印和编辑 ax 的值(16位)像这样:

Register regs;
cout << regs.ax() << endl;
regs.ax() = 5;
cout << regs.ax() << endl;

效果很好,但现在如果我想打印和编辑 al & ah ax 的低位和高位部分(8 位)我应该怎么办 ?! 我尝试过这个,但它不起作用!

uint8_t &al(){ return reg_ax[1]; }
uint8_t &ah(){ return reg_ax[0]; }

现在这样做不会显示任何输出:

cout << regs.al() << endl;

有什么帮助吗?

最佳答案

也许问题是您正在尝试打印 unsigned char作为unsigned char ,因此 cout << regs.ah();打印字符零或类似的字符?

这对我有用:

#include <iostream>
#include <cstdint>

using namespace std;

class Register{
    uint8_t reg_ax[2];
public:
    Register(){
        reg_ax[0] = reg_ax[1] = 0;
    }
    uint16_t &ax(){ return (uint16_t &)reg_ax[0]; }
    uint8_t &al(){ return reg_ax[1]; }
    uint8_t &ah(){ return reg_ax[0]; }
};


int main()
{
    Register regs;
    regs.ax() = 500;
    cout << regs.ax() << endl;
    cout << (int)regs.ah() << endl;
    cout << (int)regs.al() << endl;
    return 0;
}

我正在发布一个完整的示例,就像您应该做的那样。然后,您可以看到您拥有的内容,以及与您的代码相比我必须猜测的其他内容。

关于c++ - 模拟CPU寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314963/

相关文章:

c++ - 检查文件是否在 Makefile 中使用某些标志编译

assembly - 什么是被调用者和调用者保存的寄存器?

optimization - 什么是桌面 CPU 上的 8 位寄存器?

assembly - NASM 错误 : invalid operands in non-64-bit mode

x86 - Intel i7 处理器上的 CPUID

c++ - 加密和序列化 STL 字符串和其他容器

python - 使用调用策略创建属性 - boost::python

c++ - "do"循环而条目 <> 0

assembly - 将值加载到 LC3 中的寄存器中

c++ - 是否有仅返回其参数的标准函数?