作为一个小小的项目,我一直在创建一个较旧的微电脑CPU仿真器,主要基于8080的架构。它的8位通用寄存器可以(according to wikipedia)用作“三个16位寄存器对”,以及普通的8位模式。这是我的问题。
我对它进行建模的第一次尝试就是单独命名的字节和短路,这些工作正常,直到我重新阅读specs页面并发现16位寄存器实际上并不是他们自己的东西。糟糕。
我现在正在尝试的是一个字节数组,每个8位寄存器有一个位置,还有两个为堆栈/指令指针保留的位置。这对8位寄存器来说效果非常好,而且管理起来很麻烦,但我实际上并不知道如何将两个字节转换为内存中的短字节。这甚至可能吗?如果没有,你对如何做到这一点有什么建议吗?
答案 0 :(得分:-1)
通过将16位寄存器中第一个字节的地址转换为void指针并返回短路来解决。不是非常类型安全,但嘿,它的工作原理。显然我只是在搜索错误的东西。
答案 1 :(得分:-1)
您可以通过以下操作将两个struct
中的uint8_t
设为uint16_t
来进行访问:
union Register
{
uint16_t word;
struct
{
uint8_t lo, hi;
} byte;
};
这样,如果您在范围Register r
中有一个值,那么r.word
将作为单个16位值访问内容,而r.byte.lo
和r.byte.hi
将访问第一个和第二个8位字节。 (第一个是lo
,因为Intel 8080是little-endian architecture。)