我目前正在摆弄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-这是为什么?
我对汇编器和其他任何类型的核心低级机器指令都是完全陌生的,所以如果这是一个非常愚蠢的问题,请容忍我。
发布于 2012-04-14 00:11:24
您所链接的文本描述并没有说明如何将指令汇编成可执行代码,但是您可以从所链接到的仿真器页面上的Javascript对其进行逆向工程。似乎有一个名为"pack“的内部函数来创建二进制指令。pack函数执行以下操作:
words[0] += value << (4 + operand * 6);其针对解析的输入被迭代地调用。我建议您向供应商/发明者询问有关组装文档的信息。
https://stackoverflow.com/questions/10143949
复制相似问题