Лабораторная работа №5
Тема: Управление трансляцией программ МК-51
Цель работы: изучение принципов управления трансляцией программ при помощи директив языка АСМ51.
Указания по выполнению работы
1.Изучение директив языка АСМ51
Директивы в отличие от команд ассемблерного языка не преобразуются в объектный код и применяются для управления процессом трансляции исходной МК-программы.
Рассмотрим основные директивы языка АСМ51.
ASCII операнды
Директива последовательно размещает в ячейках памяти программ (ПП) коды
ASCII символов строки, указанной в поле операнды и заканчивающейся возвратом каретки.
DB операнды
Директива последовательно размещает в ячейках памяти программ (ПП)
байтовые константы, перечисленные через запятую в поле операнды .
Если указанное поле отсутствует, то используется одна ячейка ПП, в
которую заносится "0".
Пример
;MT1 соответствует адресу
;20FH в ПП
MT1 ASCII PEN
;в ПП (20FH)=50H, ;(210H)=45H, (211H)=4EH
Пример
;MT1 соответствует адресу
;1FFH в ПП
MT1 DB 12H,<.NOT.11H+1
DB 10100101B,32
;в ПП (1FFH)=12H, ;(200H)=0EFH,
;(201H)=0A5H, (202H)=20H
102
DS операнды |
|
Директива резервирует ячейки памяти |
Пример |
программ (ПП), причем количество |
|
;MT2 соответствует адресу |
|
этих ячеек определяется значением, |
;200H в ПП |
указанным в поле операнды . |
MT2 DS 12H ;(PC)=212H |
DW операнды |
|
Пример |
|
Директива последовательно размещает |
|
;MT1=20FH |
|
в ячейках памяти программ (ПП) 2- |
MT1 DW 3212H |
байтовые константы, перечисленные |
DW |
через запятую в поле операнды . |
;в ПП (20FH)=32H, |
Если указанное поле отсутствует, то |
;(210H)=12H, |
используются две ячейки ПП, в |
;(211H)=(212H)=00H |
которые заносится "0". |
|
END |
|
|
Директива определяет конец МК-программы.
ENDM
Директива определяет конец макроопределения.
метка EQU операнды |
Пример |
|
Директива |
присваивает |
|
SS EQU 25H |
||
символическому имени, размещенному |
ZZ EQU SS+2 |
|
в поле метка , байтовое или 2- |
PP EQU ZZ-1 |
|
байтовое значение, |
указанное в поле |
MOV A,#PP ;(A)=26H |
операнды . Это имя не может быть |
|
|
переопределено. |
|
|
|
|
|
EXTERN операнды
Директива объявляет символические имена, указанные через запятую в поле операнды , как внешние, то есть определяемые в другой (других) МК-
программе (МК-программах).
103
INCLUDE операнды
Директива включает в трансляцию файл, имя которого вместе с расширением указаны в поле операнды . Включения не могут подвергаться вложению.
LIST
Директива разрешает вывод листинга следующего за ней текста МК-
программы. По умолчанию выполняется директива NLIST.
LONG операнды |
Пример |
Директива последовательно размещает в |
|
;MT1 соответствует адресу |
|
ячейках памяти программ (ПП) 4-байтовые |
;4EEH в ПП |
константы, перечисленные через запятую в |
MT1 LONG 11223344H |
поле операнды . Если указанное поле |
;в ПП (4EEH)=11H, |
отсутствует, то используются четыре ячейки |
;(4EFH)=22H, (4F0H)=33H, |
ПП, в которые заносится "0". |
;(4F1H)=44H |
метка MACRO операнды |
|
|
Директива начинает макроопределение, которое составляется из операторов языка АСМ51 (строк исходного текста МК-программы) и должно заканчиваться директивой ENDM. Любое поле включенных в макроопределение операторов (кроме поля комментарий ) может быть представлено формальным параметром, которые перечисляются через запятую в поле операнды . В поле метка указывается символическое имя макрокоманды, которая будет определяться данным макроопределением.
Макрокоманда может использоваться в МК-программе произвольное число раз и при трансляции заменяется на тело своего макроопределения, причем фактические параметры, перечисленные через запятую в поле операнды макрокоманды подставляются вместо соответствующих формальных параметров макроопределения.
104
До трансляции |
|
|
После трансляции |
|
|
|
|
|
|
TC MACRO x,y,z |
1 |
|
TC MACRO x,y,z |
|
MOV A,#z |
2 |
|
MOV A,#z |
|
x A,#y |
3 |
|
x A,#y |
|
ENDM |
4 |
|
ENDM |
|
MOV R0,#25 |
5 |
0000 |
7819 |
MOV R0,#25 |
TC ORL,15H,10 |
6 |
0002 |
TC ORL,15H,10 |
|
MOVX @R0,A |
7 |
0002 |
740A |
MOV A,#10 |
END |
8 |
0004 |
4415 |
ORL A,#15H |
|
9 |
0006 |
ENDM |
|
|
10 0006 F2 |
MOVX @R0,A |
||
|
11 0007 |
|
END |
|
|
|
|
|
|
NLIST |
|
|
|
|
Директива запрещает вывод листинга следующего за ней текста МК-
программы, если ранее выполнялась директива LIST.
ORG операнды |
Пример |
Директива устанавливает значение ;(PC)=1234H
программного счетчика PC, причем ORG 12H
указанное значение определяется ;(PC)=0012H
содержимым поля операнды . При отсутствии директивы исходное значение PC принимается равным нулю.
PUBLIC операнды
Директива объявляет символические имена, указанные через запятую в поле операнды , как глобальные (общие), то есть такие, к которым можно осуществлять ссылку из других МК-программ.
105
метка REG операнды |
Пример |
||||
Директива |
|
присваивает |
|
||
|
X REG R4 |
||||
символическому имени, размещенному |
;X определяется как регистр R4 |
||||
в поле метка , байтовое или битовое |
Y REG P3 |
||||
значение, |
указанное |
|
в |
поле |
;Y определяется как порт P3 |
операнды , |
причем |
указанное |
Z REG Y |
||
значение может быть задано не только |
;Z определяется как порт P3 |
||||
числом, другим символическим именем |
B.0 REG C |
||||
или выражением, но и именем |
;B.0 определяется как флаг C |
||||
программно |
доступного |
|
элемента |
B.1 REG X.1 |
|
микроконтроллера. |
Символическое |
;B.1 определяется как первый бит |
|||
имя, размещенное в поле метка , не |
регистра R4 |
||||
|
|||||
может быть переопределено. |
|
|
|||
|
|
|
|
|
|
RECSIZE операнды
Директива используется для управления редактором связей. В частности,
от содержимого поля операнды этой директивы зависит максимальный размер записей в загрузочном модуле МК-программы (см. подраздел 3.3).
SYMBOLS
Директива используется для управления редактором связей. В частности,
разрешает формирование специального файла, содержащего символические имена, в формате MICROTEK или ZAK (см. подраздел 3.3).
Пример
SS VAR 25H
MOV A,#SS ;(A)=25H
SS VAR 13H
MOV A,#SS ;(A)=13H
106