2014-01-05 3 views
2

Я работаю на эмуляторе GameBoy в C. Прямо сейчас я работаю над файлом CPU.c и я немного запутался некоторые инструкции, которые я вижу, перечисленные здесь:GameBoy ISA (Пишем Emulator)

http://realboyemulator.files.wordpress.com/2013/01/gbcpuman.pdf

Если вы обратитесь к странице 66 выше PDF, и посмотреть на инструкции, соответствующей Opcode 0x7E - LD, R1, R2, мне интересно об этом isntruction ..

GB имеет восемь 8 бит, A, B, C, D, E, F, H, L. 16 Бит-регистры могут быть сделаны путем объединения двух: AF, BC, DE, HL.

Я запутался в Opcode 0x7E, потому что похоже, что он пытается сохранить 16-битное значение (HL) в 8-битный регистр (A).

LD, A, (HL)

Могу ли я искажая этот документ? Может кто-нибудь объяснить, почему такая инструкция будет существовать? Не удалось ли его заменить на LD, A, L?

+0

Вы знаете значение HL? Я немного ржавый на собрании, но разве он не будет хранить верхнюю половину или нижнюю половину в зависимости от больших или маленьких контуров? –

+1

HL - это 16-битное значение, состоящее из 8-битных регистров H и L, где H содержит верхние 8 бит, а L - нижнее – Bubo

+1

. Я предполагаю, что это адрес HL, как вы упомянули, тогда вы читаете ячейку памяти, на которую указывает HL , то 8-битное значение, считываемое на этом адресе, затем переходит в регистр A. Это, вероятно, то, для чего есть (скобки), чтобы указать уровень косвенности. –

ответ

3

Адрес 16 бит, но он указывает на 1 байт (8 бит), который он помещает в регистр A (регистр D в приведенном ниже примере).

LD D, (HL) 

Эта инструкция загружает D с байтом, расположенным по адресу в паре регистра HL.

Нашел в http://gameboy.mongenel.com/dmg/lesson1.html

Здесь все уроки http://gameboy.mongenel.com/asmschool.html

+2

Общее примечание: на языках ассемблеров парны обычно означают загрузку из памяти. Некоторые ISA CISC даже имеют инструкции, которые будут загружаться дважды, обозначенные как «X (Y (RA))» или «X (Y [RA])». – Potatoswatter

+1

Замечание Z80 о примечании Potatoswatter: инструкция 'JP (HL)' нарушает нормальное правило, загружая значение 'HL' непосредственно в счетчик программ, не читая ничего из ОЗУ. Поэтому, если это было согласовано с непосредственными инструкциями «JP 1234h», у него не было бы скобок. Следите за этим, когда вы доберетесь до него, если эта инструкция реализована на не-вполне-z80 GB. – Tommy

+1

@Tommy: это код операции E9? В документах pan/koopa/nocash (http://nocash.emubase.de/pandocs.htm#cpuinstructionset) это написано как «JP HL» – ninjalj

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