SET A, 0x1E против SET A, 0x1F

Это моя первая попытка dpcu, я проверяю машинный код, сгенерированный сборкой dpcu-16

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

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

SET A, 0x1E
SET A, 0x1F

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

fc01 
7c01 001f 

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

2 ответа

Решение

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

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

Другие вопросы по тегам