我正在尝试为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,不是吗?
为什么IFN中的b参数不会导致指令需要PC++或nextword组件?
发布于 2012-04-29 20:07:20
0x1f: next word (literal)
0x20-0x3f: literal value 0x00-0x1f (literal)这是您所询问的规范的核心部分。可以在操作码中编码0到31 (0x1f)之间的文字值。如果值太大,则文字值需要一个额外的单词,用0x1f表示。
因此IFN A, 0x10只需要一个单词,因为0x10字面量足够小,可以放入操作码中。16位操作码分为6位用于b操作数,6位用于a操作数和4位用于指令。因此b= 0x30 (0x20+literal),a= 0x00 (寄存器A),instr = 0xd (干扰素)。将它们与opcode = (b << 10) | (a << 4) | instr;放在一起,就会得到0xc00d。
https://stackoverflow.com/questions/10371672
复制相似问题