Ответ 1
Они упрощают блок декодирования, если вы проверите
7F LD A,A
78 LD A,B
79 LD A,C
против
47 LD B,A
40 LD B,B
41 LD B,C
против
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
будет LD (HL),(HL)
, что делает еще меньше смысла, чем LD A,A
, поэтому существует специальная логика, чтобы поймать эту и сделать HALT
вместо этого.
Таким образом, это касается простоты декодера команд, используя одни и те же битовые шаблоны для выбора регистров источника/цели и не добавляя больше транзисторов, чтобы поймать same,same
ситуации, за исключением (HL),(HL)
(который, возможно, как источник, так и цель, требующие доступа к памяти, поэтому, возможно, дополнительная "логика" довольно проста в дизайне HW.
Имейте в виду, что ранние процессоры часто разрабатывались вручную, и количество всех транзисторов должно было оставаться низким как для установки на чипе, так и для управления схемой вручную и проверки ее правильности.
EDIT: Z80 имеет около 8500 транзисторов, вы можете проверить: https://en.wikipedia.org/wiki/Transistor_count и https://en.wikipedia.org/wiki/Zilog_Z80... и у GameBoy немного модифицированный Z80, но количество суммарных транзисторов будет очень близким к исходному значению, хотя я не искал точное значение, и я не уверен, насколько далеко в будущем Nintendo расширяет его, возможно, они могли бы пусть даже собирается что-то вроде 20-50k уже, но я в этом сомневаюсь.
Добавление: в последнее время я читал о российских клонах Sinclair ZX Spectrum, которые были сильно модифицированными машинами, добавляя дополнительную мощность, память и возможности... И некоторые из них используют эти ld same,same
коды операций для управления передачами DMA, поэтому на этих коды машин, использующие их как nop
, вероятно, не будут выполнены должным образом. Это не относится к GameBoy, но в случае, если у вас есть бинарная цель одного из "Спринтеров" или подобных русских ZX-клонов, и вы обнаружите один из них при разборке, не считайте их автоматически nop
, они могут быть частью эффективного кода на самом деле что-то (скорее всего, с DMA).