М.А.Р.И.Е. делим одно число на другое - PullRequest
1 голос
/ 25 октября 2010

Я изучаю ассемблер с помощью программы MARIE, но не могу понять, как ответить на этот вопрос из книги:

Разделите одно число на другое и сохраните частное и остальное вдве разные ячейки памяти.

Это то, что у меня так далеко, что я делаю не так?К вашему сведению, в программу не встроено деление или умножение, поэтому я должен сделать это с помощью цикла, но я предполагаю, что чего-то не хватает.

Программа может быть здесь 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

Ответы [ 2 ]

0 голосов
/ 09 ноября 2015
////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
0 голосов
/ 30 ноября 2011

Если вы хотите разделить с помощью повторного вычитания, ваша программа должна иметь некоторую форму цикла.

При структурировании вашей программы она будет выполняться прямо по инструкции Halt после вычитания Y из X только один раз, и в результате Z будет единица.

Лучше всего вручную пройтись по коду и выполнить каждый шаг на листе бумаги, тогда вы поймете, в чем дело. И кстати, комментарий к Jump Endif неправильный, это не X, а Z, на который вы проверяете.

Возможно, вы захотите изменить свой код, а затем свой вопрос, если он все еще вызывает проблемы.

...