преобразовать выражение в операцию общего регистра Модели

Я хотел бы получить некоторую помощь, чтобы преобразовать это выражение в команды из 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...)?

Благодарность!


person user9    schedule 21.03.2016    source источник


Ответы (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
person Fifoernik    schedule 24.03.2016
comment
Спасибо, вы были правы, я хотел написать: добавить z, R1, R2. Другой вопрос: знаете ли вы, каков порядок подкоманд? например: push x push y sub какая будет операция? х-у? или у-х? есть ли разница в этой интерпретации между 4 методами из моего вопроса? еще раз спасибо! - person user9; 25.03.2016
comment
Я не могу знать, каков порядок такой sub операции, поскольку у меня, в отличие от вас, нет руководства, в котором рассказывается, что делают все эти операции. В версии по аккумулятору текущий порядок будет правильным, так как он оставляет свой результат в аккумуляторе! (я добавил это к ответу) - person Fifoernik; 25.03.2016