Директивы языка ассемблера ASM-89
При составлении программ для ПВВ используется язык ASM-89. Этот язык также включает операторы двух типов: команды и директивы. На рис. 6.3 приведены примеры форматов команд и директив.
Рис. 6.3. Поля операторов языка ASM-89: a - директив; б - мнемокодов команд
Для определения типов переменных, используемых в программе, предназначены директивы DB и DD, аналогичные директивам АSМ-86. Наряду с ними для резервирования области ОЗУ применяется директива DS, позволяющая только резервировать (без задания начальных значений) произвольное число байтов. Особенности написания мнемокодов команд ПВВ, в зависимости от способов адресации приведены в табл. 6.1.
В программах для ПВВ часто встречаются структуры данных, приведенные на рис. 6.4,а, для организации которых предусмотрена специальная директива STRUC, позволяющая присваивать имена и относительные адреса набору связанных друг с другом переменных, которые называют элементами структуры.
Таблица 6.1
№ п/п | Способ адресации | Примеры мнемокода команды |
По базе | ADD GC, [GB] | |
ADDBI [PP], 12 | ||
Со смещением | ADDB IX, [GB].5 | |
ADDB ВС, [GC].COUNT | ||
Индексная | ADD [GC+ IX], BC | |
Индексная с автоинкрементом | ADDI [GC+IX+],5 |
Задание структуры, показанной на рис. 6.4,а, с помощью директивы STRUC имеет вид:
PARMBLOCK STRUCT
TP: DS 4
COMMAND: DS 1
RESULT: DS 1
BUFFER1: DS 4
BUFFER2: DS 2
PARMBLOCK ENDS
Данной структуре присвоено имя РАRМВLОСК и она является блоком параметров, который включает указатель задания TP размерностью 4 байта, параметр COMMAND (1 байт), параметр RESULT (1 байт), два параметра BUFFER1 (4 байта) и BUFFER2 (2 байта). Имя структуры указывается перед директивой STRUC и перед директивой ENDS, определяющей конец структуры.
Рис. 6.4. Размещение параметров структуры в памяти
Важно отметить, что задание структуры. не распределяет конкретные адреса памяти, а лишь определяет взаимное расположение ее элементов. Программа-ассемблер использует имена элементов структуры для определения величины смещения адреса соответствующего элемента от начального адреса структуры. Так, если начальный адрес структуры находится в регистре-указателе параметров РР, то обращение к элементам структуры в программе на языке ассемблера будет иметь вид:
LPD GA, [PP].BUFFERl
MOVBI [РР].RESULT, 0
\
Здесь первая команда загружает содержимое элемента структуры BUFFERl в регистр GA, а вторая команда обнуляет элемент структуры RESULT. Эти же операции можно выполнить и с помощью команд
LPD GA, [PP] . 6
MOVBI [РР]. 5,0
соответственно. Однако организация структуры, позволяющей обращаться к ее элементам по их именам, делает программу более понятной и облегчает ее написание и отладку.
Программа, написанная на языке ASM-89, может включать обращения к программам с помощью команды САLL (или LCALL). Первый операнд этих команд всегда задает адрес памяти, по которому должно быть сохранено значение регистра перед передачей управления вызываемой подпрограмме. Второй операнд этих команд содержит имя подпрограммы, определяющее ее начальный адрес. Возврат из подпрограммы осуществляется, как правило, с помощью команды MOVP, восстанавливающей содержимое регистра ТР из области сохранения. Ниже представлен фрагмент программы, которая использует команду вызова подпрограммы:
SAVE: DS 3 ; задание области сохранения
LPDI GC,SAVE ; загрузка адреса в GC
LCALL [GC],Donna ; вызов подпрограммы Donna
. . . ; тело программы
HLT ; завершение программы
Donna: . . . ; вход в подпрограмму Donna
. . . ; тело подпрограммы
MOVP TP,[GC] ; возврат из подпрограммы
Следует отметить, что подпрограмма Donna не должна изменять содержимое регистра GC, поскольку оно указывает на адрес возврата.
В качестве примера рассмотрим две программы на языке ASM-89. Первая программа предназначена для пересылки блока информации из области памяти с начальным адресом ADR1 в область памяти с начальным адресом АDR2. Число пересылаемых байтов (до 64К байт) задается параметром SIZE. Исходные данные размещаются в памяти в виде простой структуры, представленной на рис. 6.4,б, с начальным адресом, указанным в регистре-указателе PP. Программа имеет вид
1 MEMTRANS SEGMENT
2 PB STRUCT
3 TPRESERV: DS 4
4 ADR1: DS 4
5 ADR2: DS 4
6 SIZE: DS 2
7 PB ENDS
8 LPD GA,[PP].ADR1
9 LPD GB,[PP].ADR2
10 MOV BC,[PP].SIZE
11 MOV CC,0C208h
12 XFER
13 WID 16,16
14 HLT
15 MEMTRANS ENDS
16 END
В строке 1 используется директива SEGMENT, которая указывает на начало программы и присваивает ей имя MEMTRANS. В строках 2 - 7 описывается структура исходных данных, соответствующая рис. 6.4, б. В строках 8, 9 начальные адреса ADRI и ADR2 областей памяти, между которыми осуществляется пересылка данных, загружаются в регистры GA и GB, соответственно. В строке 10 в счетчик байтов ВС загружается число пересылаемых байтов. Для указанных загрузок используется адресация со смещением. Далее, в строке 11, в регистр управления каналом СС загружается константа, которая задает требуемый режим пересылки.
Дата добавления: 2018-11-26; просмотров: 782;