我目前正在摆弄 DCPU-16 汇编器(参见http://0x10c.com/doc/dcpu-16.txt和http://jazzychad.net/dcpu.html)。
在将汇编程序指令转换为十六进制/二进制的方式中,我不明白一件事。
例如,采取类似的指令
SET B, 0x0002
应该将寄存器 B 的值设置为十进制 2(或十六进制 0x0002 或二进制 0b000010)
DCPU-16 的指令格式为
bbbbbbaaaaaaoooo
因此,低端的操作码占 4 位,第一个值占 6 位,第二个值占 6 位。
手动转换指令时,我会这样做:
SET == 0x1 == 0b0001
B == 0x01 == 0b000001
0x0002 == 0b000010
以完整的指令结束
0b0000100000010001 == 0x811
但 DCPU-16 的正确值是
0b1000100000010001 == 0x8811
也就是说,添加了前导 1 - 为什么?
我对汇编程序和任何其他类型的硬核低级机器指令完全陌生,所以如果这是一个非常愚蠢的问题,请多多包涵。