Пример 2. Условный оператор.
1. Составим теперь программу, реализующую условный оператор присваивания. Пусть целочисленная переменная y принимает значение в зависимости от вводимой целочисленной переменной x в соответствии с правилом:
В данном примере при записи программы на месте кода операции мы будем для удобства вместо числа указывать его мнемоническое обозначение. Разумеется, потом, перед вводом программы необходимо будет заменить эти мнемонические обозначения соответствующими им числами.
Для определения того, является ли значение переменной x больше, меньше или равным константе 2, мы будем выполнять операцию вычитания x–2, получая в регистре w значение 0 при x=2, 1 при x<2 и 2 при x>2. При этом сам результат операции вычитания нам не нужен, но по нашему формату команд указание адреса ячейки для записи результата является обязательным. Для записи таких ненужных значений мы будем чаще всего использовать ячейку с номером 0. В соответствии с принципом однородности памяти, эта ячейка ничем не отличается от других, то есть, доступна как для записи, так и для чтения данных. В некоторых реальных ЭВМ этот принцип нарушается: при считывании из этой ячейки всегда возвращался нуль, а запись в ячейку с адресом ноль физически не осуществляется (на практике такой принцип работы c с этой ячейкой иногда удобнее).
Для хранения переменных x и y выделим ячейки 100 и 101 соответственно. Программист сам определяет порядок размещения в программе трёх ветвей нашего условного оператора присваивания. Мы будем сначала располагать вторую ветвь (x=2), затем первую (x<2), а потом третью (x>2). На рис. 3.2 приведён текст этой программы.
№ | Команда | Комментарий | |||
ВВЦ | Read(x) | ||||
СЛЦ | 011 | y := x+2 | |||
ВЧЦ | 011 | <000> := x–2; формирование w | |||
УСЛ | 007 | Case w of 0: goto 005; 1: goto 007; 2:goto 009 end | |||
ВЫЦ | 011 | Write(2) | |||
СТОП | Конец работы | ||||
ВЫЦ | Write(y) | ||||
СТОП | Конец работы | ||||
УМЦ | 011 | y := 2 * y | |||
БЕЗ | Goto 007 | ||||
Целая константа 2 |
Рис 3.2. Текст программы второго примера.
Обратите внимание, что константа 2 неотличима от команды пересылки содержимого второй ячейки памяти в нулевую ячейку, именно такая команда и будет выполняться, если эта константа будет выбрана на регистр команд устройства управления.
Дата добавления: 2015-10-05; просмотров: 813;