2014-10-17 1 views
7

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

+5

Я предполагаю, что они существуют по той же причине, что вы можете написать «mov eax, eax» в x86: это не стоило усложнять пространство кодирования, чтобы использовать эти кодировки для чего-то полезного. (Я недостаточно знаком с Game Boy или z80, чтобы сказать, есть ли у этих инструкций какие-либо скрытые микроархитектурные побочные эффекты, извините.) –

+2

Это относится к процессору 8008, 1970. Простота была важна, у нее было только 3500 транзисторов. Позднее 8080 и Z80 скопировали дизайн набора инструкций. Никакой цели для них, только для того, чтобы логика декодера инструкции была простой. –

ответ

10

Как Jeffrey Bosboom и Hans 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. И, как мы все знаем, Ressources были более ограничены в 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, так как они влияют на регистр флага, и их выполнение может изменить внутреннее состояние машины.

+3

Работая с точки зрения программного обеспечения, легко упускать из вида аппаратное обеспечение, которое должно быть установлено на исходной системе. Только то, что я искал, спасибо. – zchbrntmr

+0

На самом деле (по крайней мере, на Z80, процессор игрового мира не Z80, может быть, Z80 или 8080, как и только ... отсутствие многих функций Z80), единственным исключением является (HL) с комбинацией LD, LD (HL), (HL) существуют, и вместо этого это означает HALT (так что совсем другое). Но (HL) ссылка немного особенная, даже если она входит в число нормальных LD r1, r2 блоков os opcodes. – LGB

6

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

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

+0

'AND A' - это идиоматический способ сравнения с нолем, если память служит; в результате получается один байт, а не два и меньше циклов. – Tommy

+0

'LD r, r'' does * not * изменить флаги. – usr2564301

2

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

+1

Они также безоговорочно очищают флаг переноса, который полезен, если вы используете его для возврата результата (например, функция, которая возвращает значение, но сигнализирует об ошибке или условии исключения, устанавливая перенос). –

Смежные вопросы