SET A,0x1E vs SET A,0x1F

时间:2012-04-29 02:38:04

标签: stack dcpu-16

这是我第一次尝试dpcu,我正在检查由dpcu-16程序集生成的机器代码

我正在使用此模拟器:http://dcpu.ru/

我正在尝试比较

生成的代码
SET A, 0x1E
SET A, 0x1F

生成的代码如下:

fc01 
7c01 001f 

我不明白为什么操作数大小会在这两个值之间发生变化

2 个答案:

答案 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