如何从字节值中将操作数作为寄存器?

时间:2014-08-12 19:16:19

标签: emulation z80

到目前为止,我有一个相当简单的程序来启动我的仿真体验。我加载一条指令并确定有多少(如果有的话)操作数,然后我抓住那些操作数并使用它们。对于诸如跳转和推动之类的事情,在我进入寄存器之前它有点简单。我怎么知道操作数何时是寄存器?或者我怎么能判断它是否是地址的而不仅仅是地址(即当他们使用ld (hl),a之类的东西时)

我对模仿和所有人都很陌生,但我对装配有一点体验,即使对于z80也是如此。

问题

我如何区分注册表的含义与地址或地址的解引用之间的区别?

1 个答案:

答案 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