2010-10-25 8 views
0

J'apprends en utilisant l'ensemble du programme MARIE, mais je ne peux pas comprendre chaud pour faire cette question du livre:MARIE diviser un nombre par un autre

Diviser un nombre par un autre et stocker le quotient et le reste dans deux emplacements de mémoire différents.

C'est ce que j'ai jusqu'ici, qu'est-ce que je fais mal? Pour info, il n'y a pas de division ou de multiplication intégrée dans le programme, donc je dois le faire en utilisant une boucle mais je suppose qu'il me manque quelque chose.

Le programme peut se trouver ici http://computerscience.jbpub.com/ecoa/2e/downloads/MarieSim-v1.3.01.zip

ORG 100 
Input   /Enter a number 
Store X  /Saves the number 
Input   /Enter a number 
Store Y  /Saves the number 
Load Zero  /Move 0 into AC 
Store Z  /Set Z to 0 
If, Load Z /Load Z 
Skipcond 400 /If AC=0 (Z=0), skip the next instruction 
Jump Endif /Jump to Endif if X is not greater than 1 
Then, Load X 
Subt Y  /X - Y 
Store X  /X = X - Y 
Endif, Load Z /Load Z into AC 
Add One  /Add 1 to Z 
Store Z  /Z = Z + 1 
Output  /Print to screen 
Halt   /Terminate program 
X, Dec 0  /X has starting value 
Y, Dec 0  /Y has starting value 
Z, Dec 0 
One, Dec 1 /Use as a constant 
Zero, Dec 0 /Use as a constant 
END 
+1

Trop de commentaires. : P – cHao

+2

Et encore vous avez cliqué sur "Ajouter un commentaire"? :) –

Répondre

0

Si vous voulez diviser en utilisant la soustraction répétée, votre programme a mieux avoir une certaine forme d'une boucle.

La façon dont votre programme est structuré, il va directement sur l'instruction Halt après avoir soustrait Y une fois de X, et Z finira par être un.

Il est préférable de parcourir manuellement le code et d'exécuter chaque étape sur une feuille de papier, puis vous verrez où vous allez mal. Et BTW, le commentaire sur le Jump Endif est faux, ce n'est pas X mais Z vous vérifiez.

Vous voudrez peut-être modifier votre code, puis votre question si elle présente toujours des problèmes.

-1
////Divide Positive numbers/ A have to be biger then B///by: E 

    ORG 100 
    Input /Input A value 
    Store A 
    Input /Input B value 
    Store B 

    If, Load A 
    Skipcond 800 
    Jump EndIf 
    Then, Load A 
    Subt B 
    Store A 
    Load C 
    Add One 
    Store C 
    Jump If 
    EndIf, Load C 

    Halt, Output 


    C, DEC 0 
    A, DEC 0 
    B, DEC 0 
    One, DEC 1 
Questions connexes