这是我第一次尝试dpcu,我正在检查由dpcu-16程序集生成的机器代码
我正在使用此模拟器:http://dcpu.ru/
我正在尝试比较
生成的代码SET A, 0x1E
SET A, 0x1F
生成的代码如下:
fc01
7c01 001f
我不明白为什么操作数大小会在这两个值之间发生变化
答案 0 :(得分:4)
该仿真器似乎正在使用the next version of the DCPU-16 spec,它指定a
的同一字面值允许从0xFFFF
(-1)到0x1E
的值(30 )。这意味着要获得超出此范围的任何文字值,汇编器必须使用下一个字的文字语法,这使操作数大一个字节。
答案 1 :(得分:3)
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