MIPS バイナリ命令をデコードする方法を理解しようとしています。
gcc を使用して Debian MIPS システムで C 言語で hello world プログラムをコンパイルし、objdump を実行すると、.text セクションの最初の命令は次のようになります。
600: 03e00025 move zero,ra
MOVE
これが命令であるとどのように判断するのかわかりません。
03e00025
は00000011111000000000000000100101
バイナリです。私が正しく理解している場合、ここの最初の 6 ビットはオペコードであり、この場合はすべて 0 であり、R タイプの命令であることを意味するため、最後の 6 ビットを調べる必要があり100101
ます。MIPS Instruction Set Manualを見ると、これが命令であるように見えますOR
。MOVE
私はそのマニュアルでさえ見つけることができません。
これをグーグルで調べたところ、明らかにアセンブリに「疑似」命令があり、おそらく にmove $t, $s
展開されていることがわかりましたaddiu $t, $s, 0
が、マニュアルを見るとADDIU
opcode があり001001
ます。私が見つけた別の結果は、それがに変換されると主張してADD
いますが、の最後の6ビットは であるADD
必要が100000
あるため、どちらにも適合しません。
私は何が欠けていますか?