現在、DCPU-16アセンブラを使用しています(http://0x10c.com/doc/dcpu-16.txtおよびhttp://jazzychad.net/dcpu.htmlを参照)。DCPU-16命令のバイナリ表現に先行する1がある理由
アセンブラの命令が16進/ 2進に変換される方法がわかりません。 DCPU-16のための例として
、2(又は六角0×0002またはバイナリ0b000010)を小数にレジスタBの値を設定することになっている
SET B, 0x0002
ような指示を取る
命令フォーマット
したがって、下端のオペコードは4ビット、第1の値は6ビット、第2の値は6ビットです。
手で指示を変換すると、これは私はそれを行うだろうかです:
SET == 0x1 == 0b0001
B == 0x01 == 0b000001
0x0002 == 0b000010
完全な命令が
0b0000100000010001 == 0x811
ことで終わるが、DCPU-16の正しい値が
です0b1000100000010001 == 0x8811
つまり、先頭に1が追加されます - それはなぜですか?
私はアセンブラや他のハードコアの低レベルの機械教材にはまったく新しいので、これは非常にばかげた質問であれば私にご負担ください。
もちろん、私はそれを手に入れます。 CPUは、レジスタまたは値が意味されるかどうかを区別する方法がありません。どうもありがとう! –
私は完全にgrokかどうか見てみましょう - このオフセットを使用して、私は命令のbbbbbbビットブロックにリテラル小数点値0を書くことができます - しかし、もし私が10進数40をレジスタaに入れたいなら、 SET B、0x0028'の場合、命令 'bbbbbbaaaaaaoooo'は、 'SET'の場合はoooo =' 00001'、 'B'の場合はaaaaaa =' 000001'、次の単語(リテラル)の場合はbbbbbb = '011111'、次の単語に '0000000000101000'(= 40)? –
@ManuelKiessling:右のように聞こえます。 –