私は現在、DCPU-16アセンブラをいじっています(http://0x10c.com/doc/dcpu-16.txtおよびhttp://jazzychad.net/dcpu.htmlを参照)。
アセンブラ命令が16進数/バイナリに変換される方法で私が理解していないことが1つあります。
例として、次のような命令を取ります
SET B, 0x0002
これは、レジスタBの値を10進数の2(または16進数の0x0002または2進数の0b000010)に設定することになっています。
DCPU-16の命令フォーマットは
bbbbbbaaaaaaoooo
したがって、下端のオペコード用に4ビット、最初の値用に6ビット、2番目の値用に6ビットです。
命令を手動で変換する場合、これが私が行う方法です。
SET == 0x1 == 0b0001
B == 0x01 == 0b000001
0x0002 == 0b000010
完全な命令で終わる
0b0000100000010001 == 0x811
ただし、DCPU-16の正しい値は次のとおりです。
0b1000100000010001 == 0x8811
つまり、先頭に1が追加されます-それはなぜですか?
私はアセンブラーやその他のハードコアな低レベルのマシン命令にまったく慣れていないので、これが非常に愚かな質問である場合はご容赦ください。