Я пытаюсь сделать сборку 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