2012-04-29 2 views
1

Это моя первая попытка dpcu, я проверяю машинный код, генерируемый dpcu-16 узлаSET A, 0x1E против SET A, 0x1F

Я использую этот эмулятор: http://dcpu.ru/

Я пытаюсь для сравнения кода, сгенерированного

SET A, 0x1E 
SET A, 0x1F 

сгенерированного кода выглядит следующим образом:

fc01 
7c01 001f 

Я не понимаю, почему изменения размера операнда между этими двумя значениями

ответ

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 
4

кажется, что эмулятор использует the next version of the DCPU-16 spec, который указывает, что то же самое слово буквальное значение a разрешений значений из 0xFFFF (-1) до 0x1E (30) , Это означает, что для получения любого литерального значения вне этого диапазона ассемблер должен использовать синтаксис буква следующего слова, что делает операнд на один байт больше.