2013-02-12 2 views
3

J'essaie de comprendre comment le cycle de récupération serait écrit en micro-opérations pour une instruction CALL de 32 bits qui devaient être récupérées par le processeur.Fetch Microoperations pour CALL

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 

Ma question découle du fait que l'instruction est de 32 bits, les 16 bits représentent le haut opcode et les bas 16 bits représentent l'adresse de destination que nous sautons à.

Le cycle d'extraction est comme tel:

MAR <- PC 

MDR <- M(MAR) 

IR <- MDR opcode 

MAR <- MDR address 

PC <- PC + 1 

Puisque MDR est seulement 8 bits de large, comment pouvons-nous ajustons ce cycle fetch pour tenir compte de l'ensemble opcode et adresse qui sont 16 bits de large chacun?

+0

+1 Bon à consulter sur Micro Coding. –

+1

Cela semble être une question de mise en œuvre matérielle, pas une question d'assemblage, mais si vos instructions sont de 32 bits et vos fetchs de 8 bits, vous aurez besoin de 4 fetchs par instruction ... –

Répondre

0

Je suppose une petite architecture endienne pour gérer la mémoire. Aussi je suppose que l'un des registres s'appelle SP et est un pointeur de pile, croissant vers le bas. La partie haute et la partie basse de PC, TEMP et IR peuvent être accédées indépendamment.

/* 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