我正在尝试为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组件?
答案 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。