如果你检查的话,它们简化了解码单元
7F LD A,A
78 LD A,B
79 LD A,C
vs
47 LD B,A
40 LD B,B
41 LD B,C
vs
4F LD C,A
48 LD C,B
49 LD C,C
您可以注意到,底部 3 位是为源寄存器保留的(值 0-7 为B,C,D,E,H,L,(HL),A
),它们旁边的 3 位是目标寄存器,同样具有相同的 0-7 含义(因此 0 vs 0 创建LD B,B
) 和前两位01
选择LD
,从快速浏览中不确定我是否完美地破译了它。
那时人们也会期待76
to be LD (HL),(HL)
,这甚至比LD A,A
,所以有特殊的逻辑来捕获那个并执行HALT
反而。
因此,这是关于指令解码器的简单性,使用相同的位模式来选择源/目标寄存器,以及不添加更多晶体管来捕获same,same
情况,除了(HL),(HL)
(这可能会在需要内存访问的源和目标上发生内部失败,因此额外的“逻辑”在硬件设计中可能相当简单。
请记住,早期的 CPU 通常是手工设计的,晶体管总数必须保持在较低水平,以便适合芯片,并且易于手工绘制电路并验证其正确性。
编辑:Z80 有大约 8500 个晶体管,您可能需要检查:https://en.wikipedia.org/wiki/Transistor_count https://en.wikipedia.org/wiki/Transistor_count and https://en.wikipedia.org/wiki/Zilog_Z80 https://en.wikipedia.org/wiki/Zilog_Z80...并且GameBoy对Z80进行了一些修改,但是晶体管总数将非常接近原始值,尽管我没有搜索确切的值,并且我不确定未来多远任天堂正在扩展它,也许他们已经可以负担得起 20-50k 的价格,但我对此表示怀疑。
附录:最近我读到了有关俄罗斯 Sinclair ZX Spectrum 克隆机的信息,它们是经过大量修改的机器,增加了额外的功率、内存和功能......其中一些正在使用这些ld same,same
控制 DMA 传输的操作码,因此在这些机器代码上将它们用作nop
可能无法正确执行。这与 GameBoy 无关,但如果您有针对“Sprinter”或类似的俄罗斯 ZX 克隆之一的二进制目标,并且您在反汇编中发现其中之一,请不要自动考虑它们nop
,它们可能是实际执行某些操作的有效代码的一部分(最有可能使用 DMA)。