【问题标题】:How to understand the first line of the DCPU-16 specs assembly example?如何理解 DCPU-16 specs 汇编示例的第一行?
【发布时间】:2012-04-05 12:31:43
【问题描述】:

我试图理解specs,但无法理解给出的示例的第一行:

SET A, 0x30              ; 7c01 0030

这是我从规格中了解到的:

  • 第一个字 (7c01) 完全定义了指令
  • 操作符为0x1,即命令SET a, b
  • b = 111100 = 0x3C(当我转换为十六进制时)= 字面值 0x3C
  • a = 000000 = 寄存器 A

所以我将指令理解为 SET A,0x3C

谁能告诉我哪里出错了?

【问题讨论】:

  • b = 111100 从何而来?从我的角度来看 b = 110000 = 0x30...
  • @cli_hlt 嗯,现在我有 0x7c01 = 0111110000000001 这给了我 b=011111=1F ?!

标签: assembly dcpu-16


【解决方案1】:

嗯,好的,我终于得到了答案。

您缺少规范中的“值”部分,上面写着:

Values:
....
0x1f: next word (literal)

所以我们有:

0x7c01 = 0111110000000001

0001 = SET
000000 = register A
011111 = 1F -> next word -> [PC++]

下一个词是0x0030...瞧。

【讨论】:

    【解决方案2】:

    @cli_hlt 几乎是正确的

    dcpu 文档说:

    在基本指令中,第一个字的低五位 指令是操作码,剩下的 11 位被拆分 分为五位值 b 和六位值 a。

    b 总是在 a 之后由处理器处理,并且是低五位 位。在位(LSB-0 格式)中,基本指令具有以下格式: 啊啊啊啊啊啊啊

    所以正确答案是:

    0x7c01 = 0111110000000001
    
    00001 = SET
    00000 = register A
    011111 = 1F -> next word -> [PC++]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 2012-04-20
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多