3

32 ビットの CALL 命令が CPU によってフェッチされるマイクロ操作で、フェッチ サイクルがどのように書き込まれるかを理解しようとしています。

MAR is 16 bits wide
MDR is 8 bits wide
PC is 16 bits wide
IR is 16 bits wide
Temp registers are 16 bits wide

私の質問は、命令が 32 ビットで、上位 16 ビットがオペコードを表し、下位 16 ビットがジャンプ先の宛先アドレスを表しているという事実から生じています。

フェッチ サイクルは次のようになります。

MAR <- PC

MDR <- M(MAR)

IR <- MDR opcode

MAR <- MDR address

PC <- PC + 1

MDR は 8 ビット幅しかないため、このフェッチ サイクルを調整して、オペコード全体とそれぞれ 16 ビット幅のアドレスを考慮するにはどうすればよいでしょうか?

4

1 に答える 1

0

メモリを処理するためのリトル エンディアン アーキテクチャを想定しています。また、レジスタの 1 つが SP と呼ばれ、下向きに成長するスタック ポインタであると仮定します。PCの高域と低域、TEMPとIRを独立してアクセスできます。

/* FETCH................ */
MAR <- PC
PC <- PC+1
MDR <- M(MAR)  ;low 8 bits of opcode
IRlow <- MDR

MAR <- PC
PC <- PC+1
MDR <- M(MAR)  ;high 8 bits of opcode
IRhigh <- MDR

/* DECODE AND EXECUTE................ */
if MDR is opcode for CALL...
MAR <- PC
PC <- PC+1
MDR <- M(MAR)  ;low 8 bits of destination
TEMPlow <- MDR

MAR <- PC
PC <- PC+1
MDR <- M(MAR)  ;high 8 bits of destination
TEMPhigh <- MDR

SP <- SP-1
MAR <- SP
MDR <- PChigh
M(MAR) <- MDR  ;store hi part of next instruction in stack

SP <- SP-1
MAR <- SP
MDR <- PClow
M(MAR) <- MDR  ;store low part of next instruction in stack

PC <- TEMP    ;update PC to jump to the called address
于 2013-11-21T14:52:24.930 に答える