2016-05-05 1 views
0

J'ai besoin de créer une extension de MAL. Alors, tout d'abord j'avais essayé d'ajouter sur mic1sim.malComment créer un IUSHR4 sur IJVM?

MAR = SP = SP + 1; rd    // read top of the stack 
H = TOS       // H will be a SP 
MDR = H = H >> 1; wr    // SHIFT 1 and write on MDR 
MDR = H = H >> 1; wr     // SHIFT 1 + 1 = 2 
MDR = H = H >> 1; wr    // SHIFT 1 + 1 + 1 = 3 
MDR = H = H >> 1: wr    // 4th shift 
TOS = MDR; goto Main1    // TOS updated 

Mais ne fonctionne pas! Quelqu'un peut-il m'expliquer où je me trompe? SP pointe vers le haut de la pile.

Répondre

0

SP + 1 pointe vers des données qui ne sont plus dans la pile. La lecture de cette valeur retournera la poubelle. Vous avez une condition où deux valeurs différentes sont écrites dans MDR dans la troisième instruction: le résultat de l'opération ALU et les données de la mémoire de la lecture dans la première instruction.

Il n'est pas nécessaire d'écrire après chaque décalage. Calculez le résultat dans H. Une fois terminé, stockez la valeur de H dans MDR et écrivez la valeur dans la pile.

TOS a déjà la valeur maximale sur la pile au début de l'instruction. Il n'est pas nécessaire de le lire.