Смекни!
smekni.com

Программное обеспечение встроенных систем управления на базе однокристальных микропроцессоров (МП) (стр. 4 из 4)

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

Командная строка при этом разделяется на четыре поля:

поле «МЕТКА» поле «КОД ОПЕРАЦИИ» поле «ОПЕРАНДЫ» Поле «КОММЕНТАРИИ»

Поля могут отделяться друг от друга произвольным числом пробелов, но не менее одного.

Метка. В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченная команда или операнд. Метка представляет собой буквенно-цифровую комбинацию, начинающуюся с буквы. Используются только буквы латинского алфавита. Некоторые ассемблеры допускают использование в метках символа подчеркивания (_). Длина метки не должна превышать шесть символов. Метка завершается двоеточием (:).

Псевдокоманды ассемблера не преобразуются в двоичные коды, а потому не могут иметь меток. Исключение составляют псевдокоманды резервирования памяти и определения данных (DS, DB, DW). У псевдокоманд, осуществляющих определение символических имен, в поле метки записывается определяемое символическое имя, после которого двоеточие не ставится.

В качестве символических имен и меток не могут быть использованы мнемокоды команд, псевдокоманд и операторов ассемблера, а также мнемонические обозначения регистров и других внутренних блоков МП или МК.

Код операция. В этом поле записывается мнемоническое обозначение команды МП или МК или псевдокоманды ассемблера, которое является сокращением (аббревиатурой) полного английского наименования выполняемого действия. Например: МОV – movе – переместить, JМР – jump – перейти, DВ – define bуtе – определить байт.

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

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

Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом. В некоторых МП он задается в команде.

ПРИМЕР:

MVIA,15H

LXIH,23BEH

ACI25

В МК семейства MCS 51 записывается с обязательным указанием префикса непосредственного операнда (#) (MOV A,#25 или с символическим именем: ADDC A,#OPER2). Адрес операнда может быть задан мнемоническим обозначением регистра (INC Rn; MOV A,D), символическим именем (MOV A,MEMORY). Указателем на косвенную адресацию может служить для одних МП буква М (MOV M,A; ADD M), для других префикс @ (MOV @Ri,2FH). Операндом может являться прямой адрес ячейки памяти (JMP 8324H; CALL 115BH; JNC 1F5AH), порта ввода/вывода (IN F9H, OUT BAH) или их символические имена (JMP LABEL; MOV A,P3).

Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется суффикс (буква, стоящая после числа): В – для двоичной, Q – для восьмеричной, D – для десятичной и Н – для шестнадцатеричной. Число без суффикса по умолчанию считается десятичным.

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

Выражение представляет собой совокупность символических имен и чисел, связанных операторами ассемблера. Операторы ассемблера обеспечивают выполнение арифметических ("+" – сложение, "-" – вычитание,* – умножение, / – целое деление) и логических (ОR – ИЛИ, АND – И, ХОR – исключающее ИЛИ) операций в формате 2-байтных слов.

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

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

Псевдокоманда ORG 10Н задает ассемблеру адрес ячейки памяти (10Н), в которой должна быть расположена следующая за ней команда прикладной программы.

Псевдокомандой EQU можно любому символическому имени, используемому в программе, поставить в соответствие определенный операнд. Например, запись

PETEQU13

приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя PET, оно будет заменено числом 13.

Символические имена операндов, переопределяемых в процессе исполнения программы, определяются псевдокомандой SET:

ALFASET3

. . .

. . .

ALFASETALFA+1

Ассемблер MCS-51 позволяет определить символическое имя как адрес внутренних (псевдокоманда DATA), внешних (XDATA) данных или адрес бита (псевдокоманда BIT). Например, директива

ERROR_FLAGBIT25H.3

определяет символическое имя ERROR_FLAG как третий бит ячейки ОЗУ с адресом 25Н.

Псевдокоманда DB обеспечивает занесение в ПП константы, представляющей собой байт.

Псевдокомандой END программист дает ассемблеру указание об окончании трансляции.

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

В соответствии с форматом команд для представления их объектных кодов отводятся одна, две или три ячейки памяти программ.

Пример программы на языке ассемблера:

ORG801FH;Присвоение начального адреса для

;подпрограммы DELET (задержка)

COUNTEQUXXXXH;Присвоение символического имени

;значению XXXXH (количество циклов

;в подпрограмме для формирования

;задержки)

PUSHPSW;11 тактов. Сохранение в стеке

;программно доступные регистры

; (A, F, H, L)

PUSHH;11 тактов

LXIH,COUNT;10 т. Установка счетчика циклов в

;регистровой паре (H)(L)

CICL:DCXH;5т.Уменьшение счетчика циклов на 1

MOVA,L;4т. и проверка

ORAH;4т. на “нуль”

JNZCIC1;10т. If XXXX¹0 GOTO CICL

POPH;10т. Восстановление программно-

POPPSW;10т. доступных регистров перед

; выходом из подпрограммы

RET;10т. Выход

8 Ввод, редактирование, трансляция и отладка прикладных программ

Написанием текста программы заканчивается первый этап разработки прикладного программного обеспечения – "от постановки задачи к исходной программе" и начинается следующий – "от исходной программы к объектному модулю".

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

В минимальный состав программного обеспечения кросс-средств входят:

системная программа для ввода исходного текста прикладной программы, его редактирования и записи на внешней носитель информации – так называемый редактор текстов;

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

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

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

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

ASSEMBLY COMPLETE NO ERRORS

_

или сообщение

ASSEMBLY COMPLETE NNN ERRORS<LLL>

_

с указанием числа ошибок (NNN) и номера последней ошибочной строки (LLL) при наличии синтаксических ошибок.

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

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


Литература

1. Тавернье К. PIC-микроконтроллеры. Практика применения: Пер. с фр. -М: ДМКПресс, 2008. - 272 с.: ил. (Серия «Справочник»).

2. Борзенко А.Е. IBM PC: устройство, ремонт, модернизация. – 2-е изд. перераб. и доп. – М.: ТОО фирма «Компьютер Пресс», 2006. – 344с.: ил.

3. Цифровые интегральные микросхемы: Справ./М. И. Богданович, И.Н. Грель, В.А. Прохоренко, В.В. Шалимо.–Мн.: Беларусь, 2001. – 493 с.: ил.

4. ДСТУ 3008-95. Документация. Отчеты в сфере науки и техники. Структура и правила оформления.

5. Охрана труда в вычислительных центрах. Ю.Г. Собаров и др. – М.: Машиностроение, 2000. – 192с.