2014-02-08 49 views
0

作为一个小项目,我一直在创建一个老式的微型计算机CPU仿真器,主要基于8080的架构。它的8位通用寄存器可以(“according to wikipedia”)用作“三个16位寄存器对”,以及常规的8位模式。这是我的问题。建模微机寄存器在内存中?

我的第一次尝试建模这是个人命名的字节和短裤,它工作正常,直到我重新阅读specs页面,发现16位寄存器实际上并不是他们自己的东西。哎呀。

我现在想要的是一个字节数组,每个8位寄存器有一个位置,并且为堆栈/指令指针保留两个位置。这对于8位寄存器来说非常好用,而且管理起来很麻烦,但我实际上并不知道如何将两个字节转换为内存中的短暂内容。这甚至有可能吗?如果没有,你有什么建议如何做到这一点?

+3

考虑使用联合。或者如果你想直接使用内存表示,一个指针。 –

+0

呃,我将如何去做一个指向不同类型的两个变量的指针?我仍然在学习C++魔术。 – Lexusjjss

+1

基本上你会有两个不同类型的指针和相同的内存地址。我不确定C++有多少推荐它用于这个任务。然而,这在C中是微不足道的,因为在C中裸露的编程模型与您试图模拟的那种硬件架构之间存在相似之处。当然,这种指针方法需要你的仿真和主机结构具有相同的字节序列......在目前这个时候很有可能。 –

回答

-1

通过将16位寄存器中第一个字节的地址强制转换为空指针并返回一个short来解决。不是非常类型安全,但嘿,它的工作原理。显然,我只是在用错误的东西搜索。

+0

工会更优雅,但工作很好:) – Dougvj

+1

类型安全的传统概念将在这里开始对你不利,就像在构建仿真器一样,你需要重现这样的事实,即机器将解释一个相同的位取决于正在执行的指令的各种方式。您已经知道宽度差异。但也要注意签名/未签名的。并不是所有的ALU操作都会有直接的C/C++同行 - 例如,您可以旋转以及轮班。然后是进位 - 这可能包括或不包括在内。 –

+1

这不是类型安全的,在C++中是合法的,对不起。如果您尝试在大型机器上运行该程序,它会中断。 – Potatoswatter