Assembly 在DCPU 16的原始规范中,IFN A、0x10如何转换为0xc00d
我正试图为Notch的DCPU-16规范编写一个汇编程序。 可以找到此CPU的原始规格 相关线路:Assembly 在DCPU 16的原始规范中,IFN A、0x10如何转换为0xc00d,assembly,dcpu-16,Assembly,Dcpu 16,我正试图为Notch的DCPU-16规范编写一个汇编程序。 可以找到此CPU的原始规格 相关线路: SET A, 0x30 ;7c01 0030 到目前为止,我理解这些说明,但对我来说,这个说明应该至少有2个单词长,而不仅仅是0xc00d SET A, 0x10 将是7c01 0010。所以 IFN A, 0x10 应该是7c0d 0010不是吗 为什么IFN中的b参数不会导致指令需要[PC++]或nextword组件 0x1f: next word (literal) 0
SET A, 0x30 ;7c01 0030
到目前为止,我理解这些说明,但对我来说,这个说明应该至少有2个单词长,而不仅仅是0xc00d
SET A, 0x10
将是7c01 0010
。所以
IFN A, 0x10
应该是7c0d 0010
不是吗
为什么IFN
中的b
参数不会导致指令需要[PC++]或nextword组件
0x1f: next word (literal)
0x20-0x3f: literal value 0x00-0x1f (literal)
这是你要问的规范的核心部分。可以在操作码中对0和31(0x1f)之间的文字值进行编码。如果值太大,则文字值需要一个额外的字,用0x1f表示
因此IFN A,0x10
只需要一个字,因为0x10文本足够小,可以放入操作码中。16位操作码分解为6位的b操作数、6位的a操作数和4位的指令。所以b=0x30(0x20+文字),a=0x00(寄存器a),instr=0xd(IFN)。将它们与opcode=(b)放在一起
这是您要询问的规范的核心部分。0到31(0x1f)之间的文字值可以在操作码中编码。如果该值太大,则文字值需要一个额外的字,用0x1f表示
因此IFN A,0x10
只需要一个字,因为0x10文本足够小,可以放入操作码中。16位操作码分解为6位用于b操作数,6位用于A操作数,4位用于指令。因此b=0x30(0x20+文本),A=0x00(寄存器A),instr=0xd(IFN)。将它们与opcode=(b对于新规范,它实际上介于-1(0xFFFF)和30(0x1e)之间,谢谢Hans-这在我现在看到的规范中已经解释过了-doh。@ratchetfreak Aye-我想从原始版本开始,并从那里构建汇编程序-这主要是一个学习练习;)对于新规范,它实际上介于-1(0xFFFF)和30(0x1e)之间谢谢Hans-我现在看到的规范中已经解释了这一点-doh。@ratchetfreak是的-我想从原始版本开始,并从那里构建汇编程序-这主要是一个学习练习;)这是旧的规范。新的规范是感谢-我知道新的规范-但我开始实施它从旧的一开始,为了逐步学习。链接存档在第一个链接(从问题和我以前的评论)是由,第二个链接(从评论由BlueRaja-Danny Pflughoeft)令人困惑的是,它的标题是。年,我发现规范的一个更高版本,标题是。这是旧规范。新规范是感谢的-我知道新规范-但我开始从旧规范开始实施它,以便以增量方式学习。链接在第一个链接存档(来自问题和我之前的评论)第二个链接(来自BlueRaja-Danny Pflughoeft的评论)的标题是,令人困惑的是,第二个链接的标题是。
0x1f: next word (literal)
0x20-0x3f: literal value 0x00-0x1f (literal)