到目前为止,我有一个相当简单的程序来启动我的仿真体验。我加载一条指令并确定有多少(如果有的话)操作数,然后我抓住那些操作数并使用它们。对于诸如跳转和推动之类的事情,在我进入寄存器之前它有点简单。我怎么知道操作数何时是寄存器?或者我怎么能判断它是否是地址的值而不仅仅是地址(即当他们使用ld (hl),a
之类的东西时)
我对模仿和所有人都很陌生,但我对装配有一点体验,即使对于z80也是如此。
我如何区分注册表的含义与地址或地址的解引用之间的区别?
答案 0 :(得分:3)
因为你解码了指令。例如,在ld (hl), a
中,即0x77或0b01110111,第一个01告诉您它是ld reg8, reg8
,并且您必须解码两组3位,每组为reg8。那么110和111,你在reg8解码表中查找它们,其中110表示(hl)
,111表示a
。或者你可以做一个Giant Switch of Death并直接将0x77解码为ld (hl), a
,但这在实现上要比任何深度或重要的更多。
指令完全指定了操作数是什么,所以这个“我怎么说”这个问题让我觉得有点傻 - 当你解码指令时,答案已经正好盯着你了。
另请参阅:decoding z80 opcodes