0

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

相关线路:

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 组件?

4

1 回答 1

3
     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 (IFN)。把它们放在一起opcode = (b << 10) | (a << 4) | instr;,你会得到 0xc00d。

于 2012-04-29T12:07:19.590 回答