Сборка MARIE с одной функцией подпрограммы и одной основной функцией - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь сделать сборку MARIE для следующего только для практики:

int main(){
   int product1;
   product1 = multiplication(3,5);
   cout << product1;

 return 0;
}

int multiplication(int x, int y){

   int i, tempprod = 0, num = y;

   if(y < 0)
       num = -y;

   for(i=0; i < num; ++i){

       if(y > 0)
            tempprod = tempprod + x;

       else
            tempprod = tempprod - x;
   }

return tempprod;
}

Результат должен быть 15, но я получаю -6. Я пытался много раз, но продолжаю получать неправильные результаты. Хотел бы получить несколько подсказок.

Я изменил skipcond несколько мест, но моя логика где-то не так. Хотя не знаю где.

Org 100

load three
Store x
Load  five
Store  y
JnS subr
Store product1
Output
Halt

subr, hex 0
Load y
store num
load y
Subt zero
Skipcond  000
Jump  loop
Load num
clear
Subt y
Store num

/loop, Load  y
loop, Subt zero
Skipcond  800
Jump else
Load  tempprod
Add x
Store  tempprod
load i
Add one
Store i
Subt num
Skipcond 800
Jump loop
Load tempprod
JumpI subr

else, Load tempprod
Subt x
Store tempprod
Load  i
Add one
Store i
Add one
Store i
Subt num
Skipcond 800
Jump loop
Load tempprod
JumpI subr

three, dec 3
five, dec 5
product1, dec 0
x, dec 0
y, dec 0
i, dec 0
zero, dec 0
one, dec 1
num, dec 0
tempprod, dec 0

Ожидаемый результат должен быть AC -> 000F, но с получением FFFA

...