Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

мпсу / Практические занятия pdf / Практика модуль 2 МПСУ

.pdf
Скачиваний:
21
Добавлен:
10.06.2015
Размер:
5.36 Mб
Скачать

Практика №4.

СРЕДСТВА ПРОГРАММИРОВАНИЯ. УСЛОВНАЯ АДРЕСАЦИЯ ОПЕРАНДОВ.

Приступая к разработке системы управления, программист должен сделать предварительное распределение памяти. Так, например, он может первоначально решить, что основная программа управления технологическим процессом будет вся размещена в ПЗУ, имеющем емкость 128 машинных слов. Цели программа будет начинаться в точке с адресом 0000 0000 0000 (000 HEX.), то переменные процесса, которые должны записываться в ОЗУ, могут иметь адреса начиная с 0000 0100 0000 (040 HEX). Далее программист должен последовательно по порядку написать все команды программы управления. Программирование в машинных кодах означает, что каждая команда и адреса, по которым все команды и соответствующие им операнды будут загружены в память, должны быть указаны в бинарных кодах с присвоением абсолютных значений в ходе написания программы. Последнее, пожалуй, представляет наибольшую труд- ность, так как разработчик системы должен не только написать все 1 и 0, но и выполнить весь необходимый учет данных.

Иллюстративный микропроцессор

Для изучения используем иллюстративный гипотетический компьютер, имеющий минимальный состав оборудования и простейший набор команд (рис. 1). Эта машина является четырехразрядной, и в дальнейшем на ее примере можно будет увидеть недостатки малоразрядных микропроцессоров и необходимость увеличения числа разрядов.

Рис. 1 Иллюстративный микропроцессор Иллюстративный микропроцессор имеет следующий набор регистров.

Во-первых, аккумулятор, с помощью которого выполняются операции сложения и вычитания. Выполнение операций умножения и деления может быть организовано программно с использованием регистра сдвига. Аккумулятор, кроме того, является точкой сбора всех потоков данных,

1

поступающих из памяти или, наоборот, направляемых в память, а также при вводе и выводе данных. Для простоты считается, что шины не имеют буферных усилителей и сопрягаются прямо с аккумулятором.

Следующий регистр — это регистр команд, работающий совместно со схемами декодирования. Когда принимаются команды, содержащие только код операции, т. е. состоящие из одного 4-разрядного слова, то они не- посредственно записываются в регистр команд и далее декодируются. Когда же из памяти по шине данных приходят сигналы, содержащие адрес, то они принимаются в три этапа. Вызвано это тем, что с помощью четырех двоичных разрядов можно прямо адресоваться только к 16 ячейкам памяти, а это явно недостаточно даже для учебных целей. Если взять два машинных слова, т. е. 8 разрядов, то можно иметь 28 = 256 ячеек памяти. Достаточно ли это? В некоторых случаях, возможно, да, но все же надежнее еще увеличить разрядность шины адреса, и тогда следующей цифрой, кратной четырем, будет 12. Это позволит производить прямую адресацию к 4К ячеек памяти. Часть этих ячеек может относиться к ПЗУ, а другая — к ОЗУ. Отметим, что 4К (точнее, 4096) определяет предельные, потенциальные возможности данного микропроцессора, которые не обязательно использовать полностью. В реальной системе емкость памяти выбирается исходя из конкретного применения.

В результате иллюстративный микропроцессор должен иметь 12- разрядную шину адреса и 12-разрядный программный счетчик (ПС), а также 12-разрядный регистр адреса (РА). Последние выполняют отчасти сходные функции, но программный счетчик служит для сохранения адреса текущей команды и указания адреса последующей. Когда же выполняется команда со ссылкой на данные, то надо Указать адрес без изменения содержания программного счетчика, для чего и служит регистр адреса.

Система команд иллюстративного микропроцессора.

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

Все мнемонические сокращения разделены на четыре основные группы

всоответствии с типами машинных команд.

1.Команды перемещения данных. В качестве мнемонического сокращения от слова ПЕРЕМЕСТИТЬ можно взять МСТ, которое будет являться кодом операции. В зоне операндов команд перемещения должно быть указано, во-первых, откуда идет информация, т. е. источник данных, во- вторых, куда направляется информация, т. е. получатель, или адрес прибытия. В системе команд микропроцессора получатель стоит на первом месте, а источник на втором (табл. 2.3).

2.Команды преобразования данных (арифметические и логические). Таблица 2.3. Система команд иллюстративного микропроцессора

2

3. Команды управления.

3

4.Команды ввода-вывода.

5.Специальные.

Команды СЛЖ, ВЫЧ, МСТ ПА, МСТ АП, ПЕР, ПНЕН и ВЗВП

связаны с обращением к памяти и потому требуют указания адреса операнда. Так как для указания адреса используется 12 разрядов, обеспечивающие воз- можность прямой адресации 4К слов, для каждой такой команды требуется 4 последовательных машинный слова. Первое слово (4 бит) содержит код операций, а следующие три содержат адрес операнда.

В качестве примера программирования с использованием абсолютной адресации рассмотрим процедуру считывания значений одного из параметров технологического процесса. Надо периодически считывать значение параметра, определять, сохранилось ли оно прежним или изменилось и, если изменилось, сообщить об этом в Центральное устройство системы управления (рис. 2.11, табл. 2.4). Так как данный пример служит для демонстрации использования абсолютных адресов, то приведено содержание операций на естественном (разговорном) языке. Все адреса даются в шестнадцатеричном коде. По этой программе загружаются в аккумулятор данные, находящиеся во входной цепи, затем предыдущее значение параметра сохраненное в ячейке памяти с адресом 040, вычитается из содержимого аккумулятора. Если старое и новое значения одинаковы, то результат вычитания будет равен нулю, поэтому ход программы не изменится и она будет продолжаться в точке 003. Если же результат вычитания в точке 001 не будет равен нулю, т. е. на значение параметра изменилось, то произойдет переход на другую ветвь программы и управление будет передано ячейке с адресом 009, где содержится подпрограмма

Рис. 2.11. Алгоритм считывания значений параметров

Таблица 2.4. Программирование с абсолютными адресами

4

пересылки нового значения параметра на центральный пульт. Одним из шагов этой подпрограммы должно был запоминание нового значения параметра в ячейке с адресом 040.

Продолжение программы с точки 003 содержит последовательные команды, образующие цикл выдержки времени. Когда пройдет заданное время, определяемое числом тактов, необходимых для выполнения всех команд цикла, содержимое аккумулятора окажется равным нулю выполнение передается ячейке 006, которая содержит команду перехода в начальную точку 000 для повторения всего процесса.

Даже в таком простом примере программист сталкивается с большими трудностями: он должен задать начальные точки своей программы в ОЗУ и ПЗУ, не изменяя при этом других данных; он должен помнить, где хранятся константы и все текущие значения переменных величин; ему нужно знать, сколько времени требует выполнение программы и ее отдельных частей. Наконец, нужно помнить адреса и объем всех подпрограмм, чтобы можно было надлежащим образом разместить их в памяти, не перекрывая отдельные части и не оставляя слишком больших неиспользованных участков.

Машинное кодирование с абсолютной адресацией обычно применяется только для очень простых и коротких программ длиной не более 40—50 машинных слов. Разработка программы значительно облегчается, если для кодирования всех команд использовать мнемокоды, а для операндов применить условные (символические) адреса. Иными словами, мнемокоды применяются не только для системы команд, но и для адресов. В дальнейшем мнемонические сокращения переводятся в машинные коды, чтобы получить те данные, которые можно вводить в память микропроцессора.

Условные наименования можно присваивать всем величинам в

5

операндной зоне команды. Такое наименование величины, или ее идентификатор, представляет собой произвольную последовательность букв

ицифр, которая обязательно должна начинаться с буквы. Присвоение условных наименований находится полностью в Руках программиста. Это могут быть нейтральные символы А, В, С или X, У, Z, но чаще выбирают наименования, Указывающие на смысл идентифицируемой величины, как правило, наименования сокращают до минимального, и все же сохраняющего первоначальный смысл значения, которое облегчает запоминание. Различные идентификаторы могут отличаться одной буквой или цифрой, например ТП1, ТП2, ТОП ит. д.

При трансляции программы в машинный код условные наименования (символические адреса) заменяются абсолютными адресами. При непосредственном использовании абсолютных адресов у программиста всегда возникают трудности, когда необходимо что-то добавить или, наоборот, изъять, так как все команды обычно связаны друг с другом, с текущими данными и константами. При использовании относительной адресации, если нужно что-то изменить, то программист просто добавляет нужные команды с новыми символическими адресами.

Условные обозначения применяются также для отдельных частей программы. Такие обозначения называются метками, они задаются программистом, который в ходе написания программы как бы приклеивает ярлыки с названиями к различным программным модулям. В качестве меток удобно (хотя и не обязательно) использовать символические обозначения, соответствующие данным частям программы, например СТАРТ, ВРЕМЯ, ЗАДЕРЖКА и т. д. Метка ставится перед кодом операции, и после нее принято ставить двоеточие. В процессе трансляции программы (ручном или машинном) каждой, метке присваивается текущее значение счетчика команд

итем самым фиксируется определенное место в программе. Поэтому когда в программе встречаются команды переходов или разветвлений, то в зоне операнда можно указывать непосредственно метку: это является символическим адресом, на который передается дальнейшее управление программой. Таким путем можно организовать переход в нужную точку программы, многократное повторение ее отдельных частей и т. д.

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

Та же самая программа, которая была приведена в табл. 2.4, теперь может, быть записана с мнемокодами вместо описания операций и с адресами не в абсолютной, а в символической форме и с присвоением каждой величине условных наименований (табл. 2.5).

6

Таблица 2.5. Программирование в мнемокодах с относительными адресами

Строки от 1 до 7 при кодировании в символических адресах представляют собой то же самое, что и строки с 1 до 7 в табл. 2.4, но в зоне операндов теперь содержатся последовательности букв, образующие условные наименования. Каждому из них затем будет приписана величина. соответствующая его позиции в программе. Команды в строках 8, 9 и 11 дают указание зарезервировать в памяти три адреса для хранения данных. Первые два (007 и 008) содержат константы, используемые для образования цепи выдержки времени. Адрес в строке 11 (040). первоначально содержит 0, а затем текущее значение параметра технологического процесса.

После того как все команды данной программы написаны, к ней должна быть добавлена подпрограмма, к которой есть обращение в строке 3 основной программы. Этой подпрограмме дано символическое наименование ВЫХОД. Последней командой такой подпрограммы должно быть БРТ (ОБРАТНО), т. е. возвращение к основной программе.

2.5. Ассемблирование программы

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

Основную часть ассемблера составляет мнемоника машинных команд данного микропроцессора, но наряду с этим в состав ассемблера входят специальные команды, которые не выполняются ЭВМ, а только управляют трансляцией исходной программы на машинный язык. Эти команды называют директивами ассемблера или псевдокомандами. Директивы ассемблера содержат информацию о начале и конце программы и другие

7

сведения, необходимые для формирования данных и размещения их в памяти. Директивы записываются так же. как машинные команды, в частности, используются мнемонические сокращения, но содержимое директив имеет некоторые особенности.

Перевод программы с ассемблера на машинный язык может быть выполнен одним из трех способов: 1) вручную самим программистом; 2) аппаратно, при помощи специальных кодирующих устройств; 3) программно, при помощи ЭВМ, снабженной специальной программой-транслятором .

Ручная трансляция, представляет собой процесс последовательной подстановки шестнадцатеричных кодов операций, адресов ячеек памяти и чисел (константы и начальные значения переменных) вместо мнемокодов операций и символических наименований.

Для записи программы принято, хотя и не обязательно, придерживаться формата, получаемого при машинной трансляции называемого распечаткой программы или листингом. Каждая строка такого формата разделена на 6 полей. Вертикальные последовательности полей образуют столбцы. В первый столбец записывают адрес, а во второй — шестнадцатеричный код команды. Каждому байту адреса или команды должны соответствовать два шестнадцатеричных символа. В поле 3 ставится метка, поэтому оно заполняется только в том случае, если метка имеется. В поле 4 указывается мнемоника выполняемой команды, а в поле 5 — операнд. Поле 6 отведет для комментариев. При написании программы первоначально заполняют поля с 3-го по 6-е, а в столбцы 1 и 2 ставятся адреса и коды операций при трансляции.

При ручной трансляции выполняется ряд последовательных действий. Во-первых, заполняется поле адресов. При этом для всех команд,

связанных с обращением к памяти и требующих указания адреса операнда, пишутся все номера ячеек памяти в соответствии с длиной машинного слова. Так, например, для программы, представленной в табл. 2.5, с использованием системы команд иллюстративного четырехразрядного микропроцессора первая команда ВВОД не нуждается в операнде. Вторая команда программы ВЫЧИТАНИЕ должна иметь операнд, который адресует операцию к месту хранения в памяти текущего значения параметра. Следующая команда ПНЕН (ПЕРЕХОД, если в аккумуляторе НЕ НОЛЬ) также содержит операнд (адрес перехода) и потому тоже имеет четыре машинных слова. Это значит, что последовательность слов памяти, составляющих данную программу, будет иметь вид

и т. д.

В позициях 002—004, 006—008, ... должны стоять адреса

8

соответствующих операндов.

На практике, чтобы упростить и сократить запись программы, для многословных команд пишут только первый адрес.

Поэтому в рассматриваемом случае получается такая последовательность операторов:

и т. д.

В установлении последовательности адресов может помочь таблица последовательности адресов (табл. 2.6). Чтобы упростить последующий перевод, эти адреса лучше сразу писать в шестнадцатеричной системе кодирования.

Во-вторых, каждое мнемоническое сокращение кода операции заменяют шестнадцатеричным кодом машинной команды. Для команд, связанных с обращением к памяти, все операндные поля (зоны операндов) пока не заполняются. Для записи кодов надо иметь перечень всех машинных команд того конкретного микропроцессора, Который предполагается использовать в системе (табл. 2-7). Пользуясь таблицей, определяют код каждой операции и записывают в качестве первого знака в Колонке объектного кода. Последующая часть машинного кода (в рассматриваемом примере три символа) содержит адрес операнда в памяти. Для удобства ручной трансляции программы в машинные коды можно сделать специальную таблицу фактических адресов всех символических наименований (табл. 2.8). В этой таблице все символические наименования и метки пишут в каком-либо имеющем смысл порядке, например в алфавитном или в том, в котором они появляются в программе.

Таблица 2.6. Счет по четверкам в шестнадцатеричных кодах

Такая таблица дает относительные адреса всех наименований, так как они соответствуют тому месту, где данное условное название появляется впервые. Аналогично строится и таблица меток. При некотором навыке специальной таблицы идентификаторов можно не составлять, а адреса всех операндов брать непосредственно из программы.

Затем производят необходимые вычисления и присваивают

9

абсолютные адреса вместо относительных.

Таблица 2.7. Система команд иллюстративного микропроцессора

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

Таблица 2.8. Адреса идентификаторов и констант

На этих листках пишут относительные адреса. Затем, после окончания кодирования, все листки складываются по порядку и образуют абсолютные адреса без пропусков ячеек и без перекрытия отдельных зон.

Таблица 2.9. Программа считывания значений параметров технологического процесса

В-третьих (последний этап), во втором столбце все ранее пропущенные поля операндов теперь заполняются соответствующими значениями из таблицы идентификаторов или непосредственно из самой программы.

10