首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么DCPU-16指令的二进制表示法中有一个前导1

为什么DCPU-16指令的二进制表示法中有一个前导1
EN

Stack Overflow用户
提问于 2012-04-13 23:39:40
回答 1查看 467关注 0票数 2

我目前正在摆弄DCPU-16汇编程序(参见http://0x10c.com/doc/dcpu-16.txthttp://jazzychad.net/dcpu.html)。

在将汇编指令转换为十六进制/二进制的方式中,有一件事我不明白。

作为示例,请使用如下指令

代码语言:javascript
复制
SET B, 0x0002

应将寄存器B的值设置为十进制2(或十六进制0x0002或二进制0b000010)

DCPU-16的指令格式为

代码语言:javascript
复制
bbbbbbaaaaaaoooo

因此,4位用于低端的操作码,6位用于第一值,6位用于第二值。

在手动转换指令时,我会这样做:

代码语言:javascript
复制
SET == 0x1    == 0b0001
  B == 0x01   == 0b000001
       0x0002 == 0b000010

最终得到完整的指令

代码语言:javascript
复制
0b0000100000010001 == 0x811

但是DCPU-16的正确值是

代码语言:javascript
复制
0b1000100000010001 == 0x8811

也就是说,添加了前导1-这是为什么?

我对汇编器和其他任何类型的核心低级机器指令都是完全陌生的,所以如果这是一个非常愚蠢的问题,请容忍我。

EN

回答 1

Stack Overflow用户

发布于 2012-04-14 00:11:24

您所链接的文本描述并没有说明如何将指令汇编成可执行代码,但是您可以从所链接到的仿真器页面上的Javascript对其进行逆向工程。似乎有一个名为"pack“的内部函数来创建二进制指令。pack函数执行以下操作:

代码语言:javascript
复制
words[0] += value << (4 + operand * 6);

其针对解析的输入被迭代地调用。我建议您向供应商/发明者询问有关组装文档的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10143949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档