【发布时间】:2012-04-29 02:38:04
【问题描述】:
这是我第一次尝试 dpcu,我正在检查 dpcu-16 程序集生成的机器代码
我正在使用这个模拟器:http://dcpu.ru/
我正在尝试比较由
生成的代码SET A, 0x1E
SET A, 0x1F
生成的代码如下:
fc01
7c01 001f
我不明白为什么这两个值之间的操作数大小会发生变化
【问题讨论】:
这是我第一次尝试 dpcu,我正在检查 dpcu-16 程序集生成的机器代码
我正在使用这个模拟器:http://dcpu.ru/
我正在尝试比较由
生成的代码SET A, 0x1E
SET A, 0x1F
生成的代码如下:
fc01
7c01 001f
我不明白为什么这两个值之间的操作数大小会发生变化
【问题讨论】:
该模拟器似乎正在使用the next version of the DCPU-16 spec,它指定a 的同字文字值允许从0xFFFF (-1) 到0x1E (30) 的值。这意味着要获取此范围之外的任何文字值,汇编器必须使用下一个字文字语法,这会使操作数大一个字节。
【讨论】:
0x1F (dec:31) 不再是短文字(值 -1 到 30),因此必须将其视为“下一个单词”参数。
操作码如下:
SET A, 0x1E
SET = 00001
A = 00000
1E = 111111
op = 1111110000000001 = fc01
SET A, 0x1F
SET = 00001
A = 00000
NW = 011111
op = 0111110000000001 = 7c01 + 001f
【讨论】: