IFN A,0x10如何在DCPU 16的原始规范中转换为0xc00d

时间:2012-04-29 11:17:05

标签: assembly dcpu-16

我正在尝试为Notch的DCPU-16规范编写汇编程序。 可以找到此CPU的原始规范here

相关部分:

SET A, 0x30 ;7c01 0030

...

IFN A, 0x10 ;c00d

我理解到目前为止的说明,但对我来说这个说明应至少为2个字而不仅仅是0xc00d

SET A, 0x10 

将是7c01 0010。所以

IFN A, 0x10 

应该是7c0d 0010不应该吗?

为什么b中的IFN参数不会导致指令需要[PC ++]或nextword组件?

1 个答案:

答案 0 :(得分:3)

     0x1f: next word (literal)
0x20-0x3f: literal value 0x00-0x1f (literal)

这是您要询问的规范的核心部分。可以在操作码中编码0到31之间的文字值(0x1f)。如果该值太大,则字面值需要一个额外的字,用0x1f表示。

所以IFN A, 0x10只需要一个字,因为0x10字面值足够小以适应操作码。对于b操作数,16位操作码分为6位,操作数为6位,指令为4位。所以b = 0x30(0x20 +文字),a = 0x00(寄存器A),instr = 0xd(IFN)。将它们与opcode = (b << 10) | (a << 4) | instr;放在一起,得到0xc00d。