我试图理解规范,但无法理解给出的示例的第一行:
SET A, 0x30 ; 7c01 0030
这是我从规格中了解到的:
- 第一个字(7c01)完全定义了指令
- 操作符是 0x1 这是命令
SET a, b
- b = 111100 = 0x3C(当我转换为十六进制时)= 文字值 0x3C
- a = 000000 = 寄存器 A
所以我将指令理解为 SET A, 0x3C
谁能告诉我哪里出错了?
好吧,从评论中我终于得到了答案。
您缺少规范中的“值”部分,它说:
Values:
....
0x1f: next word (literal)
所以我们有:
0x7c01 = 0111110000000001
0001 = SET
000000 = register A
011111 = 1F -> next word -> [PC++]
下一个词是0x0030
……瞧。
@cli_hlt 几乎是正确的
dcpu 文档说:
在一条基本指令中,指令第一个字的低五位是操作码,剩下的十一位被分成五位值b和六位值a。
b 总是在 a 之后由处理器处理,并且是低五位。以位为单位(LSB-0 格式),基本指令的格式为:aaaaaabbbbbooooo
所以正确答案是:
0x7c01 = 0111110000000001
00001 = SET
00000 = register A
011111 = 1F -> next word -> [PC++]