emulation - 游戏男孩 : What is the purpose of instructions that don't modify anything (e. g。和 A)?

标签 emulation opcode z80 gameboy

我一直在研究 Game Boy 模拟器,我注意到存在某些永远不会改变任何值的操作码,例如 LD A, A , LD B, B等,还有 AND A .第一个显然不会改变任何东西,因为它们将寄存器的值加载到相同的寄存器中,并且因为 AND正在与A进行比较注册,AND A将永远返回 A .这些操作有什么目的吗,或者和NOP本质上是一样的每个周期后?

最佳答案

Jeffrey BosboomHans Passant在他们的评论中指出,原因是简单 .更具体地说,硬件简单。
LD r,r'指令将源寄存器( r' )的内容复制到目标寄存器( r )。 LD r,r'操作码遵循以下形式:

        -------------------------------
BIT    | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
        -------------------------------
OPCODE | 0 | 1 |     r     |     r'    |
        -------------------------------

目标和源寄存器可以采用以下值:
 -----------
| BIT | REG |
 -----------
| 111 |  A  |
 -----------
| 000 |  B  |
 -----------
| 001 |  C  |
 -----------
| 010 |  D  |
 -----------
| 011 |  E  |
 -----------
| 100 |  H  |
 -----------
| 101 |  L  |
 -----------

为了在硬件中实现这些指令,我们只需要一个接收位 0-2 以选择源寄存器的多路复用器和另一个接收位 3-5 以选择目标寄存器的多路复用器。

如果要验证位 0-2 和位 3-5 是否指向同一个寄存器,则必须向 CPU 添加更多逻辑。众所周知,资源在 80 年代更为有限:P

请注意加载说明如 LD A,A , LD B,B , LD C,C , LD D,D , LD E,E , LD H,H , 和 LD L,L表现得像 NOP .然而AND AOR A 不要表现得像 NOP ,因为它们会影响标志寄存器,并且它们的执行可能会改变内部机器状态。

关于emulation - 游戏男孩 : What is the purpose of instructions that don't modify anything (e. g。和 A)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26416839/

相关文章:

android - 在 Mac OS X 上运行的 Android 模拟器的键盘快捷键

安卓模拟器启动失败

php - 如何检查 APC 操作码缓存是否在 PHP 中正常工作?

assembly - 将寄存器加载到自身的指令的目的是什么?

android - 我无法在 mac os 的 android 模拟器上运行 react-native-webrtc-demo

android - 开始使用 Open NFC 模拟器

c - 如何在内存中查找返回指令

assembly - 英特尔 x86 操作码引用?

assembly - 在 ti 84+ 上的 ti 基本程序中使用十六进制代码

sd-card - 与 z80 的 SPI 硬件接口(interface)