这是我第一次尝试 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
我不明白为什么这两个值之间的操作数大小会发生变化
该模拟器似乎正在使用DCPU-16 规范的下一版本,该规范指定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