2016-03-21 1 views
2

Я хотел бы получить некоторую помощь, чтобы преобразовать это выражение в команды 4-х методов:выражения преобразования в общий регистре операционных модели

z=3*(x+2)-2*y 

здесь являются методами с моими попытками:

стеком:

push 2 
push -1 
mult 
push y 
mult 
push x 
push 2 
add 
push 3 
mult 
add 
pop z 

аккумулятором:

load y 
mult -2 
store temp 
load x 
add 2 
mult 3 
add temp 
store z 

регистр-память:

add R1, x, 2 
mult R1, R1, 3 
mult R2, y, -2 
add z, R1, R2 

регистр-регистр:

load R1, x 
add R1, R1, 2 
mult R1, R1, 3 
load R2, y 
mult R2, R2, -2 
add R1, R1, R2 
store z, R1 

это нормально? можно использовать отрицательные числа (-2 ...)?

спасибо!

ответ

1
addz, R1, R2 

Вы не хотел написать: add z, R1, R2?

Кроме этого, 4 метода выглядят нормально.


можно использовать отрицательные числа (-2 ...)?

Это во многом будет зависеть от наличия таких команд, как neg или sub.
Обратите внимание на разницу, если sub было возможно:

push 2 \ 
push y | = 2*y 
mult /
push x \ 
push 2 | 
add | = 3*(x+2) 
push 3 | 
mult /
sub  <-- Does depend on the order of the previous pushes! 
pop z 

аккумулятором версия будет выглядеть только в этом с помощью sub и положительных чисел:

load y 
mult 2 
store temp 
load x 
add 2 
mult 3 
sub temp 
store z 
+0

Спасибо, вы были правы, я имел в виду написать: «добавить z, R1, R2». Другой вопрос: знаете ли вы, какой порядок команды «под»? например: push x push y sub, какова будет операция? х-у? или y-x? есть ли разница в этой интерпретации между четырьмя методами из моего вопроса? еще раз спасибо! – user9

+0

Я не могу знать, каков порядок такой операции 'sub', так как у меня, в отличие от вас, нет руководства, которое сообщает, что делают все эти операции. В версии _by accumulator_ текущий порядок будет правильным, так как он оставляет свой результат в accu! (Я добавил это к ответу) – Fifoernik