2014-12-08 1 views
1

Я пытаюсь написать это выражение A = (B × (C + D × (E × F))) ÷ (E × (C + D)), используя набор команд, где каждая инструкция не имеет операндов (кроме два, которые должны иметь каждый).Как написать выражение в сборке без операндов?

Это пример из книги, что я следовал: Выражение г = х * у + ш * и

Код:

PUSH x 
PUSH y 
MULT 
PUSH w 
PUSH u 
MULT 
ADD 
STORE z 

То, что я сделал:

PUSH E 
PUSH F 
MULT 
PUSH D 
MULT 
PUSH C 
ADD 
PUSH B 
MULT 
STORE Z (store the result) 
PUSH C 
PUSH D 
ADD 
PUSH E 
MULT 
PUSH Z 
DIVIDE 
STORE A 

Я не уверен в том, как я записал результат, и деление кажется неправильным. Есть ли лучший способ написать выражение?

Обновлено:

PUSH C 
PUSH D 
ADD 
PUSH E 
MULT 
PUSH E 
PUSH F 
MULT 
PUSH D 
MULT 
PUSH C 
ADD 
PUSH B 
MULT 
DIVIDE 
STORE A 
+0

Правильно ли обновленная версия? –

ответ

1

Вам не нужно Z: вычислить Ex(C+D), затем вычислить (B×(C+D×(E×F))); теперь у вас есть значения, необходимые для окончательного деления, которые затем могут быть сохранены в A. Фактически, за исключением исключения избыточных вычислений, вам никогда не придется использовать STORE до самого конца.

Если ваше подразделение неверно (вы не укажете, какой язык ассемблера это, поэтому я не могу сказать), то, скорее всего, у вас есть аргументы назад. В этом случае вы хотите оставить первые STORE Z и PUSH Z.

+0

Я обновил свой ответ, это то, что вы точно имеете в виду? – user4337133

+0

Проблема в том, что я не могу проверить свой код, задание касается использования «обратной польской нотации» (RPN) « – user4337133

+0

. Тогда почему вы говорите« деление кажется неправильным »? –

Смежные вопросы