Gameboy (z80) назначение кода операции

Я работал над эмулятором Gameboy и заметил, что существуют определенные коды операций, которые никогда не изменят никаких значений, такие как LD A, A, LD B, Bи т. д., а также AND A, Первые, очевидно, ничего не меняют, поскольку они загружают значение регистров в одни и те же регистры, и поскольку AND сравнивается с A регистр, AND A всегда вернется A, Есть ли какая-либо цель для этих операций, или они по сути такие же, как NOP после каждого цикла?

3 ответа

Решение

Как отметили Джеффри Босбум и Ханс Пассант в своих комментариях, причина в простоте. Точнее аппаратная простота.

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 на один и тот же регистр, вам придется добавить больше логики в ЦП. И, как мы все знаем, ресурсы были более ограничены в 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 A а также OR A НЕ веди себя как NOP, поскольку они влияют на регистр флага, и их выполнение может изменить внутреннее состояние машины.

Инструкции как LD A,A а также AND A может показаться NOPs, но они также могут изменять флаги процессора и использоваться для проверки значения регистра.

Обязательно внимательно ознакомьтесь с документацией к набору инструкций на наличие таких побочных эффектов.

На самом деле есть цель в AND A (так же как OR A) инструкция - устанавливает флаг Z когда A ноль и очищает в противном случае. Так что оба AND A а также OR A часто используются для этой цели.

Другие вопросы по тегам