1

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

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

我正在尝试比较由

SET A, 0x1E
SET A, 0x1F

生成的代码如下:

fc01 
7c01 001f 

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

4

2 回答 2

4

该模拟器似乎正在使用DCPU-16 规范的下一版本,该规范指定a允许0xFFFF(-1) 到0x1E(30) 的值的同字文字值。这意味着要获取此范围之外的任何文字值,汇编器必须使用下一个字文字语法,这会使操作数大一个字节。

于 2012-04-29T02:50:51.460 回答
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
于 2012-04-29T08:51:11.727 回答