Всего на сайте:
248 тыс. 773 статей

Главная | Информатика

Без знаков  Просмотрен 107

Ячейка памяти Команда на машин­ном языке Команда в сим­волической форме Комментарий
LRI 1 Установка в регистрах Н и L адреса
первого числа
LRI 2  
   
LRI 3 Установка начального значения
счетчика цикла равным 10
LRI 4 Установка частной суммы равной 0
   
LRI 5 Загрузка константы 1 для
уменьшения счетчика
000А MOV 0 from 4 Прибавление очередного числа
000В 8F ADD F  
000С MOV 0 to 4  
000D F5 IHL Увеличение Н и L
000Е MOV 0 from 3 Уменьшение счетчика
000F А5 SUB 5  
MOV 0 to 3  
7D JAN Проверка конца цикла
   
0A  
FA HLT  
  ЧИСЛО1 Суммируемые числа
  ЧИСЛО2 *  
. . .   . . .  
001Е   ЧИСЛ010  

 

Суммируется содержимое после­довательных ячеек. Первые пять команд составляют инициализирую­щую часть. Общие регистры Н и L используются в качестве 16-бито­вого указателя, содержащего адрес очередного прибавляемого числа.

Первые две команды заносят в Н и L адрес первого числа. Затем в регистр 3 помещается начальное значение, равное 10. Регистр 3 бу­дет выполнять функции счетчика количества суммируемых чисел, ко­торые программе еще предстоит обработать. Сумма накапливается в общем регистре 4. Четвертая команда в программе устанавливает в нем нулевое начальное значение. Наконец, в общий регистр 5 загру­жается константа 1, которая будет вычитаться из счетчика в процессе суммирования чисел.

Следующие три команды составляют рабочую часть цикла. Сначала текущая частная сумма передается в аккумулятор из регистра 4. Далее следует команда сложения ADD F, содержащая специальный указатель F, который на самом деле соответствует ячейке главной памяти с адресом в паре регистров Н и L. Содержимое этой ячейки прибавляется к частной сумме в аккумуляторе. После этого результат передается в общий регистр 4.

Остальные команды программы служат для тестирования конца цикла и модификации. Сначала команда IHL модифицирует регистры Н и L, так, чтобы они содержали адрес данных, которые должны обрабатываться при следующей итерации. Затем содержимое счетчика цикла передается в аккумулятор, уменьшается на 1 и снова возвра­щается в регистр 3. Поскольку значение счетчика осталось также в аккумуляторе, его можно использовать для проверки, нужно ли про­должать итерации или вычисления завершены. Счетчик показывает число еще не прибавленных чисел. Следовательно, когда вычисления завершаются, в аккумуляторе будет 0. Это условие тестируется командой «условный переход при ненулевом аккумуляторе». Если в аккумуляторе 0, тогда переход не происходит, и программа выходит на команду останова, в противном случае выполняется следующая итерация.

Обратите внимание, в описанной программе по команде ADD F вполне можно получить сумму, превышающую емкость аккумулятора, т. е. частная сумма может занять 9 разрядов. Это и есть переполне­ние, о котором мы уже упоминали. Ясно, что если переполнение может возникнуть, то оно должно детектироваться (в рассматриваемом случае при переполнении после выполнения команды ADD F ока­жется установленным в 1 триггер переноса), и нужно иметь возмож­ность работать с суммами, занимающими более 1 байта. Обычно в подобных задачах применяется процедура сложения «с двойной», «тройной» или большей «точностью».

Предыдущая статья:Программирование циклов Следующая статья:Разветвлений
page speed (0.0172 sec, direct)