これはdpcuでの私の最初の試みであり、dpcu-16アセンブリによって生成されたマシンコードをチェックしています
私はこのエミュレーターを使用しています:http://dcpu.ru/
によって生成されたコードを比較しようとしています
SET A, 0x1E
SET A, 0x1F
生成されるコードは次のとおりです。
fc01
7c01 001f
これら2つの値の間でオペランドサイズが変わる理由がわかりません
これはdpcuでの私の最初の試みであり、dpcu-16アセンブリによって生成されたマシンコードをチェックしています
私はこのエミュレーターを使用しています:http://dcpu.ru/
によって生成されたコードを比較しようとしています
SET A, 0x1E
SET A, 0x1F
生成されるコードは次のとおりです。
fc01
7c01 001f
これら2つの値の間でオペランドサイズが変わる理由がわかりません
そのエミュレーターは、次のバージョンの DCPU-16 仕様を使用しているようです。この仕様では、同じ単語のリテラル値が(-1) から(30)までの値をa
許可することが指定されています。これは、この範囲外のリテラル値を取得するには、アセンブラが次の単語のリテラル構文を使用する必要があることを意味します。これにより、オペランドが 1 バイト大きくなります。0xFFFF
0x1E
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