私はマイクロプログラミングについて学んでいますが、マイクロ命令が実際に何であるかについて混乱しています。MIPS アーキテクチャを使用しています。私の質問は次のとおりです
たとえば、ADD 命令があるとします。このマイクロ命令はどのようになりますか? add 命令に含まれるマイクロ命令の数。MIPS の基本命令のマイクロ命令のリストをオンラインで確認できる場所はありますか?
マイクロプログラムされた ADD 命令のビット文字列を特定するにはどうすればよいですか?
私はマイクロプログラミングについて学んでいますが、マイクロ命令が実際に何であるかについて混乱しています。MIPS アーキテクチャを使用しています。私の質問は次のとおりです
たとえば、ADD 命令があるとします。このマイクロ命令はどのようになりますか? add 命令に含まれるマイクロ命令の数。MIPS の基本命令のマイクロ命令のリストをオンラインで確認できる場所はありますか?
マイクロプログラムされた ADD 命令のビット文字列を特定するにはどうすればよいですか?
マイクロプログラミングは、より単純な「マイクロ命令」の観点から、複雑な命令セットアーキテクチャ(x86など)を実装する方法です。MIPSはRISC命令セットアーキテクチャであり、通常はマイクロプログラミングを使用して実装されないため、ADD命令のマイクロ命令はゼロです。
あなたの特定の質問に答えるには、あなたの特定のマイクロアーキテクチャの定義が何であるかを知る必要があります。
これは、レジスタの 1 つに をロードしEPC
、それに 4 バイトを追加する方法の例です。
lw t0, 20(sp) // Load EPC
addi t0, 4 // Add 4 to the return adress
sw t0, 20(sp) // Save EPC
使用できる命令は「たくさん」あります。MIPS 命令セットはこちらで確認できます。私の謙虚な意見では、MIPS は本当によくできていて、簡単に習得できます。楽しい事実として、最初のプレイステーションは MIPS CPU を使用していました。
指示例
lw
= ロードワードla
= ロードアドレスsw
= 単語を保存addi
= イミダートを追加次に、次のような多くの条件付き命令があります。
bne
= ブランチが等しくないbnez
= ブランチがゼロに等しくないこれらを使用j
して、アドレスにジャンプします。
これは、MIPS 用に一度書いた例外ハンドラーの例です。これは外部ソース ハンドラーです。
External:
mfc0 t0, C0_CAUSE // We could aswell use 24(sp) to load CAUSE
and t0, t0, 0x02000 // Mask the CAUSE
bnez t0, Puls // If the only character left is
// "not equal zero" jump to Puls
j DisMiss // Else jump to DisMiss
External
上記の例では、ジャンプ先となるエントリ ポイントを定義しDisMiss
ています。to ループで行っているように、通常は自分自身にジャンプします。
ここで使用される他の命令もいくつかあります。
mfc0
= コプロセッサ 0 から移動ラベルを処理するには、この質問/回答を確認することをお勧めします。
MIPS を使用したマイクロプログラミングに関するいくつかのリソースを次に示します。