問題タブ [instruction-encoding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - MIPS 命令デコード
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
あるため、どちらにも適合しません。
私は何が欠けていますか?