我想模拟注册的工作,我声明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/