如果您正在用Java编写仿真器,您会使用INT或字节作为CPU寄存器和内存吗?为什么?

如果您正在用Java编写仿真器,您会使用INT或字节作为CPU寄存器和内存吗?为什么?,java,emulation,Java,Emulation,首先是的,我知道int比bytes更原生,所有关于bytes的数学和逻辑运算实际上都是在int上完成的。当然,这意味着如果使用字节,则会有扩大和缩小的成本。然而,在平衡点上,这也意味着内存字节实际上包含字节,并且可能不大于字节值,例如256 我猜这两种情况都有优点和缺点,但在我看来,我是在听取意见。我会使用最容易模仿硬件的任何类型 如果它是一台8位计算机,那么可能是字节。对于像x86-64这样的东西,我想长(64位)会更有意义。在这两种情况下,选择的大小更可能与寄存器操作和cpu与内存之间传输的

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


我猜这两种情况都有优点和缺点,但在我看来,我是在听取意见。

我会使用最容易模仿硬件的任何类型

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

所有通用寄存器(GPRs)都从32位扩展到64位 位,以及所有算术和逻辑运算,要注册的内存 和注册到内存的操作等,现在可以直接操作了 64位整数。堆栈上的推送和弹出总是以8字节为单位 步幅和指针的宽度为8字节


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


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

即使是64位x86也会读写8位字节。如果您将所有内容保持为64位长,那么提取和替换实际8位字节时就会出现问题。我说的最简单,不是“用Java中的单个方法支持所有操作”。对不起,我想的是内存而不是内部寄存器,幸好您澄清了。嗯,没有BitSet.subXXX方法。我理解为什么您需要一个很好的字节抽象,但java.util.BitSet不能累加,int)