Директивы ( псевдооператоры) ассемблера
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Ассемблер имеет ряд операторов, которые управляют процессом ассемблирования и формированием листинга программ. Они действуют только в процессе  ассемблирования и не генерируют никаких машинных кодов. Это псевдооператоры или директивы ассемблера. С их помощью определяют сегменты и процедуры, дают имена командам и данным, резервируют области памяти.  Форматы и краткое описание некоторых из них приведены ниже.

2.4.1 Директивы (псевдооператоры) определения типа данных

Ассемблер определяет типы данных, используемых в команде, двумя способами: во-первых, через указание длины данных при их объявлении и, во-вторых, по их содержимому. Основной формат определения типа данных:        [имя] Dn  выражение

Имя данным присваивается, если в программе есть ссылки на эти данные.  Тип переменной Dn,  определяется следующими директивами:

Ÿ DB – определить тип данных как байты (8 бит). Один байт выражается двумя десятичными или шестнадцатиричными цифрами.

                      Например, tabb db 23,45; строка из двух байт

                             hex  db 35h,6Fh;       

                                  Prt  db ‘Привет коллега!$; строка символов.

Ÿ DW – определить тип данных как слово (два байта).    

            Например, tabw dw 1А23Н,45ЕВН; строка слов.

Ÿ DD – определить тип данных как двойное слово ( четыре байта).

               Например, tabd dd 45567785.

Ÿ DF – определить тип данных как шестибайтовое поле.

             Например, tabf df 455677858700.

Ÿ DQ – определить тип данных как восьмибайтовое поле.

Ÿ DT – определить тип данных как десятибайтовое поле.

Ÿ DUP – директива повторения операнда.

            Например,  Т1  DB 9 DUP (06),15,47; Т1 – идентификатор,

                            DB–тип данных, 9–количество повторений числа 06.

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

 Например, TABDB DB 45,32,78,09,55,39 ; ассемблер определяет в памяти эти константы как последовательность смежных байт. Ссылка по имени TABDB указывает на первую константу (45), по имени TABDB +1-на вторую (32) и т.д.

EQU  и =  эти директивы не определяют данные, а позволяют присвоить выражению символическое имя (идентификатор). Выражение может быть 16-битовой константой, ссылкой на адрес, символическим именем, меткой команды, операндом, символом. После присваивания имени выражению, можно использовать это имя всюду, где требуется указать это выражение.

Например,  К EQU 1024; присвоить имя константе.

Tadr EQU DS:[BP] [SP]; присвоить имя комбинации адресов.

              Count EQU CX; присвоить имя регистру.

              К2 = 24; присвоить имя константе.

2.4.2 Директивы определения сегментов и процедур

 

Эти директивы отмечают начало и конец сегментов. Наболее распространенные директивы приведены в таблице 2.3.

Таблица 2.3- Директивы определения сегментов и процедур

SEGMENT ENDS PROC ENDP END ASSUME . DATA . CODE . STACK . MODEL       Формат: имя SEGMENT [тип]; определяет начало             имя ENDS;               и конец сегмента. Формат: имя PROC [атрибут дистанции; определяет начало           имя ENDP;            и конец некоторой процедуры. Формат: END [метка точки входа]; определяет конец                                                              программы. Формат: ASSUME сегм.рег.: имя сегмента; указывает с   каким сегментом, связан указанный сегментный регистр.                                 (пример: ASSUME cs: cseg, ds: dseg, ss: stack) Формат: .DATA [имя сегмента]; Задаёт начало и описывает                        сегмент данных в малой модели программы. Формат: .CODE [имя сегмента]; Задаёт начало и описывает                         сегмент кода в малой модели пограммы. Формат: .STACK [размер]; Задаёт начало и описывает                          сегмент стэка в малой модели программы. Формат: .MODEL [модель]; Позволяет определить модель                                                  памяти для программы.                          [модель] одна из следующих директив: Ÿ TINY – код, данные и стэк в одном сегменте. · SMALL - код, данные и стэк в двух сегментах. · COMPACT – код в одном, а данные в N сегментах. · MEDIUM–код в N сегментах, данные в одном сегменте.

         

            Руководствуясь директивами, система выделяет области памяти под сегменты стека, данных, кода или процедуры. Руководствуясь этими директивами, операционная система определяет начальные адреса сегментов. Эти действия выполняются системой при трансляции программы.       

Дата: 2018-11-18, просмотров: 749.