Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к цифрам.doc
Скачиваний:
28
Добавлен:
06.05.2019
Размер:
2.08 Mб
Скачать

3.10. Директивы ассемблера asm-51

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

В ASM-51 имеется большое разнообразие директив предназначенных для управления ассемблером и компоновщиком. В этой работе могут потребоваться следующие:

.END – директива прекращения трансляции,

.ORG адрес – директива задания (изменения) содержимого счетчика текущего адреса.

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

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

4. Пример выполнения работы

Записать в регистр R1 число 04h, в регистр R2 число 30h, содержимое регистров R1 и R4 сложить и отобразить на статическом индикаторе.

Листинг программы:

.ORG 0 ; установка нулевого значения счетчика адреса

IND: ; метка начала программы

mov R1,#04h ; запись в регистр R1 числа 04h

mov R4,#30h ; запись в регистр R4 числа 30h

mov DPTR,#0B000h ; помещение в регистр-указатель данных адреса стат. индикаторов

mov A,R1 ; пересылка в аккумулятор (регистр накопитель) содержимого регистра R1

add A,R4 ; суммирование содержимого регистра R4 с аккумулятором (результат ; хранится в аккумуляторе)

movx @DPTR,A ; пересылка содержимого аккумулятора по внешнему адресу, ; содержащемуся в DPTR

mov A,#00h ; обнуление аккумулятора

sjmp IND ; бесконечный цикл

.END

Далее, после написания программы в любом простом текстовом редакторе, например встроенный редактор FAR, необходимо сохранить программу на жестком диске с расширением .asm . После этого, используя транслятор ASM51.exe или x8051.exe необходимо оттранслировать исходную программу в объектный файл путем набора в командной строке:

…\ASM51.exe XXX.asm

или

…\x8051.exe XXX.asm .

Результатом работы этих программ, в случае отсутствия ошибок в написании программы, является файл XXX.OBJ. Далее с помощью библиотекаря fd51.exe или link.exe необходимо получить загрузочный модуль с расширением .HEX. С помощью полученного загрузочного модуля программа загружается в стенд с использованием программы EVAL32.EXE следующим образом:

…\EVAL32.EXE –hs –com 1(2) 9600 XXX.HEX

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