【发布时间】:2013-03-09 19:31:17
【问题描述】:
我想模拟register上的工作,我声明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;
有什么帮助吗?
【问题讨论】:
-
什么不起作用?任何错误消息?
-
真的有效吗?
-
没有错误和编译,但是
cout << res.al() << endl;什么都不打印! -
哦,那是很久以前的事了。在 uC 域中搜索代码,您会找到现成的解决方案。如果您想自己做,请了解联合和 : as - 变量定义中的位数限制,例如无符号字符 B1:1;表示 B1 只有一位。使用结构、联合和 : 您将能够访问 16 位寄存器的任何位、半字节、字节。希望对您有所帮助。
标签: c++ cpu-registers