2017-02-05 13 views
1

私は基本的にCを使ってベビー・アセンブラーを作ろうとしていますが、指示はうまく読めますが、指示を受けて正しく16進数に変換することに苦労しています。 16進数値を複数入力して16進数に変換するにはどうすればよいですか?ここでアセンブリ命令をC言語を使って16進数に変換する

は私が命令addi $t0,$t1,10のために今持っているものです。

opcode = opcode >> 2; 
rs = rs >> 1; 
rt = rt >>1; 
imm = imm >> 15; 
printf("0x%X:\t0x%X%X%X%X",list[i].a,opcode,rs,rt,imm); 
+0

表示しますか? – MotKohn

+0

はい。これは、16進数の命令フォーマットを標準出力に出力します。 –

答えて

1

まずまたは(|)それは1つの番号に。例えば、これは間違っていると確信しています。ちょうどアイデアを得るために。

その後
int hex = (opcode<<24)|(rs<<16)|(rt<<8)|(imm); 

printf("0x%X:\t0%X",list[i].a, hex); 
+0

これは私が考えていたものです。しかし、addiは8のopcodeを持っていますが、全体の2進表現のopcodeのフィールドは6ビットです。その場合、2つの先行ゼロを保存しながら、どのようにシフトしますか? –

+0

@CameronFuruseth:*値* '8'は6ビットに収まります。余裕があります。ビット値をシフトすることは、ゼロビットの「保存」を必要としない。この回答がその命令ではうまくいかない場合は、質問に追加してください。 – usr2564301

関連する問題