0

作为一个小项目,我一直在创建一个较旧的微型计算机 CPU 仿真器,主要基于 8080 的架构。它的 8 位通用寄存器可以(根据维基百科)用作“三个 16 位寄存器对”以及正常的 8 位模式。这是我的问题。

我第一次尝试建模是单独命名的字节和短裤,在我重新阅读规格页面并发现 16 位寄存器实际上不是他们自己的东西之前,它工作得很好。哎呀。

我现在正在尝试的是一个字节数组,每个 8 位寄存器都有一个位置,两个位置为堆栈/指令指针保留。这对 8 位寄存器非常有效,而且管理起来也少了很多麻烦,但我实际上并不知道如何将两个字节转换为内存短。这甚至可能吗?如果没有,您对其他方法有什么建议吗?

4

2 回答 2

-1

通过将 16 位寄存器中第一个字节的地址转换为 void 指针,然后再转换为 short 来解决。不是很安全,但是,嘿,它有效。显然我只是在谷歌上搜索错误的东西。

于 2014-02-08T08:16:27.677 回答
-1

您可以通过执行以下操作来制作struct两个uint8_t也可以作为 a 访问的 a uint16_t

union Register
{
    uint16_t word;
    struct
    {
        uint8_t lo, hi;
    } byte;
};

这样,如果您在 scope 中有一个值Register r,那么r.word将作为单个 16 位值访问内容,r.byte.lo并且r.byte.hi将访问第一个和第二个 8 位字节。(第一个是lo因为 Intel 8080 是little-endian 架构。)

于 2019-06-21T03:52:02.780 回答