Калабеков Б.А. Микропроцессоры и их применение в системах передачи и обработки сигналов (1988) (1092085), страница 21
Текст из файла (страница 21)
Вторые пригодны при применении определенных серий МПК. Для программирования устройств, построенных с использованием комплекта серии КР580, разработан язык высокого уровня 'Р(. М-80, относящийся к классу машинно-зависимых языков высокого уровня. Языки высокого уровня требуют более сложных трансляторов для перевода программы на язык кодовых комбинаций (для машинно-независимых языков они сложнее, чем для машинно-зависимых языков), кроме того, полученная после трансляции программа занимает больший объем памяти (на (0...100 %) и медленнее исполняется, чем в том случае, когда зта программа составляется непосредственно в кодовых комбинациях.
При этом эффективность программы, для составления которых используются машинно-независимые языки, обычно ниже, чем 'в случае использования машинно-зависимых языков программирования. ыз Для относительно несложных программ (например, объемом до одной тясячи команд) целесообразно использовать языки низкого уровня: язык кодовых комбинаций, язык Ассемблера или язык Макроассемблера. ЯЗЫК АССЕМБЛЕРА Метка Код Операнд Комментарии ; Блок 1: А (В) ; Блок 2: А СЦП (А) ; Блок Э: УсП при (Тс) = ! ; Блок 4: А -(С) ; Безусловный переход ; Блок 5: А -(О) ; Блок б; Ан-(А) + (В) ; Блок Т: В -(А) МОЧ Я)1С 1С МОЧ 1МР МОЧ АБО МОЧ А, В М! А, С М2 А, 0 В В, А М!.' М2: Программа на языке Ассемблера представляется в виде последовательности предложений, каждое из которых занимает отдельную строку.
В табл. 3.14 показана запись на языке Ассемблера той же программы, которая на языке кодовых комбинаций приведена в табл. 3.9. Каждое предложение языка Ассемблера содержит четыре фиксированных поля: поле метки, поле кода, поле операнда и поле коммента. рия. Поле метки. Если предложение снабжается именем, то оно записывается в поле метки и после имени ставится двоеточие.
Имя строится в виде произвольно выбранной последовательности заглавных букв латинского алфавита и цифр, причем первым символом в имени должна быть буква. В приведенной в табл. 3.14 программе использованы имена М1 и М2. Обычно именами снабжаются предложения, на которые производится условный либо безусловный переход. Одно и то же имя не может встречаться в поле метки более одного раза.
В противном случае возникаег неясность, к какому предложению должен производиться переход по соответствующим командам условного и безусловного перехода. Поле кода. В этом поле записывается мнемоническое обозначение кода операции, приводимое в системе команд микропроцессора. Поле операнда. В поле операнда приводятся участвующие в операции числа (непосредственные данные), указания об источниках и приемниках данных, участвующих в операции; в предложениях условных и безусловных переходов в этом поле указывается имя (метка) предложения, на которое осуществляется переход. Числовые данные могут представляться в различных системах счисления. Для указания выбранной для представления числа системы счисления после шестнадТаблица Д14 цатеричного числа ставится символ Н (а еслн число начинается с букв А, ..., Г, то перед числом ставится цифра 0), после десятичного числа можно ставить символ Р (либо не записывать никакого символа), восьмеричное число заканчивают символом Я, двоичное — символом В.
Например, пусть требуется загрузить в регистры Е, С, Р соответственно числа 101101„ 21?„ 37„ и в пару регистров Н1. число А!95„. Указанные действия описываются следующими предложениями на языке Ассемблера: Код Операнд Комментарий МЧ! Е, 10110(В; загрузка регистра Е МЧ1 С„217Я; загрузка регистра С МЧ! Р, 37 ; загрузка регистра Р ЕХ1 Н, ОА195Н ; загрузка пары регистров Н!. Метка Вместо идентификаторов (нмен) внутренних регистров микропроцессора В, С, Р, Е, Н, 1., М, А допустимо применять их адреса в любой системе счисления. Например, приведенные выше действия можно записать следующими предложениями: Комментарий ; загрузка регистра Е ; загрузка регистра С : загрузка регистра Р ; загрузка пары регистров Н1. Метка Код Операнд МЧ1 3, 10110! В МЧ! 1, 217Я МЧ! 10 В, 37 (.Х! 1ООВ, ОА195Н ыз Здесь в первом и втором предложениях адреса регистров Е (01!а) и С (001а) представлены в десятичной системе счисления; в третьем и четвертом предложениях в поле операнда адреса регистров Р и Н записаны в двончной системе счисления.
В качестве операндов могут быть указаны счетчик команд идентификатором РС и двухбайтовое содержимое аккумулятора вместе с регистром признаков — идентификатором Р5%. В командах ввода (15)) и вывода (0()Т) в поле операнда указывается номер устройства, с которым процессор обменивается данными. В поле операнда допускается использование выражений, которые строятся путем связывания рассмотренных выше данных символами арифметических операций: + (сложенне),— (вычнтанне), ч (умножение), 1(деление с выделением целой насти частного), МОР (целый остаток от деления) н символами логических операций; КРТ (инвертирование всех разрядов), Ай)Р (поразрядная конъюнкция), 0)! (поразрядная днзъюнкция), ХО(! (поразрядное суммирование по модулю 2), ЯНВ и 5Н! (сдвиг первого операнда соответственно вправо н влево на число разрядов, задаваемое значением второго операнда; освобождающиеся при сдвиге разряды заполняются нулями).
Например, Метка Код Операнд Комментарий МП Е, ОАН+!7*3/2; загрузка в регистр ; числа 1О -1- 17. 3/2 =-- 10 + 51/2 -.= 10 + 25 = 35 ЯМР М1+ 2; переход к команде ; с адресом, на две единицы ббльшим адреса предложения с ; меткой М1 Однако использование выражений лишает программу на языке Ассемблера наглядности, простоты ее чтения. Поэтому выражения при программировании на языке Ассемблера применяются редко и в данном пособии не рассматриваются.
Поле комментария. Начинается символом; (точка с запятой). Оно служит для записи любых пояснений смысла выполняемых действий, которые могли бы облегчить чтение программы. Под комментарий можно выделять полные строки, начиная их символом;. Приведенная в комментарии запись нужна лишь программисту, при трансляции она игнорируется Ассемблером.
ПРИМЕРЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ АССЕМБЛЕРА Таблица Д/б мегнв Ков Операнд Коннентврна ; Блок ; Блок ; Блок ; Блок : Блок : Блок ; Блок ; Блок /: Обнуление НЕч-О 2: Подготовка счетчика бч Сдвиг влево Н 4: Сдвиг влево А б; Условный переход 6: Суммнрованне Т: Счет 8: Условный переход Н, О В, 8 Н !.Х! М1/! 0А0 ЯА1. !НС 0А0 0Сй !Н2 ьООР2: 1 ООР! 0 В ЕООР2 1.00 Р1: 116 В табл. 3.15 показана программа умножения, представляющая собой перевод иа язык Ассемблера программы, приведенной в кодовых комбинациях в табл.
3.11. Сложение многобайтных чисел. Пусть требуется сложить два четырехбайтных числа, каждое из которых занимает в ОП четыре ячейки с последовательно нарастающими адресами; адреса младших байтов первого и второго числа хранятся соответственно в парах регистров ВС и Н!.. Результат сложения необходимо поместить в память на место второго слагаемого. Таблица Д!6 Метка Код Омеранд Комментарма Установка Тс О Подготовка счетчика Блок 6 Блок 4 Блок 6 Блок 6 Блок 7 Блок 8 Блок 9 Беауслоаныя переход А!ЧА МЧ1 ЕОАХ СУСЕЕ: АОС МОУ ОСВ 12 1!чх 1!ЧХ 1МР А 0,4 В М М,А 0 К! В Н СУСЕЕ К1е !!7 Принцип сложения таких многобайтных чисел состоит в том, что вначале в микропроцессор вызываются младшие байты слагаемых.
Байты суммируются, результат суммирования помещается в память на место младшего байта второго слагаемого; возникающий в процессе суммирования перенос из старшего разряда запоминается в триггере Тс регистра признаков. Затем в парах регистров ВС и НБ формируется адрес вторых байтов слагаемых, которые затем вызываются в микропроцессор и суммируются вместе с хранящимся в триггере Тс переносом, возникшим при сложении первых байтов, и т.
д. Выполнение операции завершится после четырехкратного повторения указанных действий. На рис. 3.!б приведена схема алгоритма и в табл. 3.16 — программа иа языке Ассемблера. Программа деления. Операция алгебраического деления чисел содержит действия, связанные с определением знака частного, и действия, связанные с определением модуля частного и положительного остатка. Знак частного может быть определен выделением из чисел содержимого знаковых разрядов, затем суммированием их по модулю 2 н введением в знаковый разряд частного после того, как будет найден модуль частного. Ниже будем рассматривать наиболее сложную часть алгоритма деления, связанную с нахождением модуля частного.