Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_k_kursovomu_proektu_VMSi....doc
Скачиваний:
4
Добавлен:
20.04.2019
Размер:
4.98 Mб
Скачать

Пример программы: «прибавить константу к числу в памяти и записать результат снова в память»

Номер ячейки памяти (шест-надцатерич-ный)

Команда на машин­ном языке

Команда в символиче­ской форме

Комментарий

0000

70

LDR 0

Передача содержимого ячейки

памяти

0001

00

00

000 А в аккумулятор

0002

0003

61

LRI 1

Загрузка в регистр 1 величины 3С

0004

ЗС

ЗС

0005

81

ADD 1

Сложение регистров 0 и 1, сумма в аккумуляторе

0006

74

SТR 0

Передача содержимого аккумулятора

0007

00

00

в ячейку 000В

0008

OB

0009

FA

HLT

Останов программы

000А

Исходное число

000В

Сумма

5.2. Разветвления в программах

Одно из наиболее мощных свойств компьютеров заключается в их способности принимать решения в ходе выполнения программы. Эти решения принимаются в зависимости от простых условий, сложившихся на данный момент. Обычно в результате принятия реше­ния либо сохраняется последовательный порядок выполнения прог­раммы, либо происходит переход на другую часть программы. Слож­ные решения реализуются в виде нескольких простых разветвлений. Чтобы пояснить сказанное, рассмотрим программу, которая вы­бирает наибольшее из трех 8-битовых целых положительных чисел х, у и z. Сначала определяется наибольшее из двух чисел х и у путем вычитания второго из первого и проверки заема в старший разряд. Отсутствие заема говорит о том, что х больше или равен у. С другой стороны, присутствие такого заема означает, что у больше х. Затем аналогичным образом отыскивается наибольшее из двух чисел: z и найденного ранее наибольшего из х и у.

На рис. 5.1. описанная выше процедура представлена в виде ди­аграммы. Такие диаграммы называются блок-схемами. Они весьма удобны для построения схемы вычисленного процесса.

Программа, решающая нашу задачу, приведена в табл. 5.2. Пред­полагается, что три исходных числа х, у и z расположены в ячейках 001В, 001С и 001D.

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

Рис. 5.1. Блок-схема программы выбора наибольшего из трех положительных чисел x, y и z

Таблица 5.2

Программа отыскания наибольшего из трех 8-битовых целых чисел без знаков х, у и z

Ячейка памяти

Команда на машин­ном языке

Команда в сим­волической форме

Комментарий

0000

70

LDR 0

Передача х. из памяти в аккумулятор

0001

00

00

0002

0003

71

LDR 1

Передача у из памяти в регистр 1

0004

00

00

0005

1C

1C

0006

А1

SUB 1

Вычитание у из х. Триггер С устанавливается, если у > х

0007

72

LDR 2

Передача х в регистр 2 как возможного наибольшего

0008

00

00

0009

1B

000А

JCZ

Проверка С на наличие заема. Если нет заема, то х

000В

00

00

больше у, и следующая команда пропускается

000С

10

10

000D

72

LDR 2

Передача у в регистр 2, замещающая х

000Е

00

00

если у больше х

000F

1C

1C

0010

71

LDR 1

Передача z из памяти в регистр 1

0011

00

00

0012

1D

1D

0013

12

MOV 0

from 2

Передача наибольшего из х, у на аккумулятор из регистра 2

0014

А1

SUB 1

Вычитание z из наибольшего среди х, у.

С устанавливается, если z больше

0015

12

MOV 0

from 2

Передача наибольшего из х, у в аккумулятор как возможного наибольшего

0016

JCZ

Проверка С на наличие заема. Если заем есть,

0017

00

00

то z больше; в противном случае следующая команда

0018

1A

опускается

0019

11

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.

Вообще говоря, принятие решения сводится к организации такой проверки, такого теста, по результатам которого можно было бы выб­рать ту или иную последовательность действий. Наличие команд ус­ловного перехода позволяет микропроцессору выбрать нужную аль­тернативу автоматически, без вмешательства человека. При этом зада­ча программиста — обеспечить, чтобы микропроцессор выполнял нужные действия при любом исходе теста.