如果你用Java编写一个模拟器,你会使用int或字节用于CPU寄存器和内存吗?为什么?

时间:2012-05-10 02:53:01

标签: java emulation

首先是的,我知道int比字节更原生,并且字节上的所有数学和逻辑运算实际上是在int上完成的。这当然意味着如果使用字节则存在扩大和缩小的成本。但是在平衡时,这也意味着内存字节实际上保存了字节,并且可能不会大于字节值,例如256.

我猜这两种情况都有利有弊,但我会在意见之后。

2 个答案:

答案 0 :(得分:2)

我会使用最简单的类型来模拟有问题的硬件。

如果它是8位计算机,可能是字节。对于像x86-64这样的东西我想象一个长(64位)会更有意义。在这两种情况下,选择的大小更可能匹配寄存器操作和在cpu和内存之间传输的数据“字”的大小:

  

所有通用寄存器(GPR)都从32位扩展到64位   位,以及所有算术和逻辑运算,存储器到寄存器   和寄存器到存储器操作等现在可以直接操作   64位整数。堆栈上的推送和弹出始终为8字节   步幅,指针宽8个字节。

from wikipedia

答案 1 :(得分:0)

当我写一个mips处理器时,我使用BitSet类来保存各个位,以便使用子集方法轻松分割位数组。我写了一个类来将它们从int转换为bitset,所以我可以对整数进行算术运算。

这不是一种性能有效的方法,但在这种情况下并不重要。