1

これはdpcuでの私の最初の試みであり、dpcu-16アセンブリによって生成されたマシンコードをチェックしています

私はこのエミュレーターを使用しています:http://dcpu.ru/

によって生成されたコードを比較しようとしています

SET A, 0x1E
SET A, 0x1F

生成されるコードは次のとおりです。

fc01 
7c01 001f 

これら2つの値の間でオペランドサイズが変わる理由がわかりません

4

2 に答える 2

4

そのエミュレーターは、次のバージョンの DCPU-16 仕様を使用しているようです。この仕様では、同じ単語のリテラル値が(-1) から(30)までの値をa許可することが指定されています。これは、この範囲外のリテラル値を取得するには、アセンブラが次の単語のリテラル構文を使用する必要があることを意味します。これにより、オペランドが 1 バイト大きくなります。0xFFFF0x1E

于 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 に答える