Программа отыскания наибольшего из трех 8-битовых целых чисел без знаков х, у и z
139
Ячейка памяти | Команда на машинном языке | Команда в символической форме | Комментарий |
LDR 0 | Передача х. из памяти в аккумулятор | ||
1В | 1В | ||
LDR 1 | Передача у из памяти в регистр 1 | ||
1C | 1C | ||
А1 | SUB 1 | Вычитание у из х. Триггер С устанавливается, если у > х | |
LDR 2 | Передача х в регистр 2 как возможного наибольшего | ||
1В | 1B | ||
000А | 7С | JCZ | Проверка С на наличие заема. Если нет заема, то х |
000В | больше у, и следующая команда пропускается | ||
000С | |||
000D | LDR 2 | Передача у в регистр 2, замещающая х | |
000Е | если у больше х | ||
000F | 1C | 1C | |
LDR 1 | Передача z из памяти в регистр 1 | ||
1D | 1D | ||
MOV 0 from 2 | Передача наибольшего из х, у на аккумулятор из регистра 2 | ||
А1 | SUB 1 | Вычитание z из наибольшего среди х, у. | |
С устанавливается, если z больше | |||
MOV 0 from 2 | Передача наибольшего из х, у в аккумулятор как возможного наибольшего | ||
7С | JCZ | Проверка С на наличие заема. Если заем есть, | |
то z больше; в противном случае следующая команда | |||
1А | 1A | опускается | |
MOV 0 from 1 | Передача z в аккумулятор как наибольшего | ||
001 А | FA | HLT | Останов программы. Наибольшее число в аккумуляторе |
001В | Число х | ||
001С | Число у | ||
001D | Число z |
Затем выполняется команда условного перехода по значению С. Переход произойдет, если С имеет нулевое значение. Если С не равно нулю, то претендент на роль наибольшего, т. е. х, заменяется на у. Это делает следующая команда, которая загружает у в регистр 2. Если С=0, то управление передается на команду, хранящуюся в ячейке 0010, и в этом случае в качестве большего значения остается х. При любом варианте в этой точке программы наибольшее значение из х и у находится в регистре 2, и оно будет аналогичным образом сравниваться сz.
Значениеz передается из памяти в регистр 1 командой LDR, находящейся в ячейке 0010. Следующая команда передает наибольшее значение из х и у в аккумулятор. Затем осуществляется сравнение путем вычитания z из содержимого аккумулятора. Если z больше, то возникает заем. Наибольшее из х и у переносится из регистра 2 в аккумулятор на случай, если z окажется меньше. Затем снова проверяется состояние триггера С командой JCZ. Если С=0, что говорит об отсутствии заема, то делается переход на команду останова. В противном случае выполняется очередная команда, загружающая в аккумулятор значение z, и после нее — команда останова. При всех условиях и конечном итоге на сумматоре оказывается значение наибольшего из трех чисел х, у и z.
Вообще говоря, принятие решения сводится к организации такой проверки, такого теста, по результатам которого можно было бы выбрать ту или иную последовательность действий. Наличие команд условного перехода позволяет микропроцессору выбрать нужную альтернативу автоматически, без вмешательства человека. При этом задача программиста — обеспечить, чтобы микропроцессор выполнял нужные действия при любом исходе теста.