Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sysprog.docx
Скачиваний:
15
Добавлен:
24.08.2019
Размер:
641.97 Кб
Скачать

Value dw 10 dup(?)

tname DB 'font'

table ENDS

При обработке директив STRUC и ENDS формируется шаблон структуры, а сами данные создаются при объявлении структуры, которое имеет следующий вид:

[[имя]] имя-структуры <[[значение,...]]>

По такому объявлению создается переменная типа структура со структурой полей, соответствующей шаблону, заданному директивой STRUC с именем имя-структуры.

Имя задает имя переменной. Если имя опущено, MASM распределяет память, но не создает переменную, которую можно было бы использовать для доступа к структуре.

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

Скобки <> обязательны, даже если начальные значения не заданы.

Если в качестве значения используется оператор DUP, в скобки <> следует заключать список значений оператора DUP.

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

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

strings STRUC

buffer DB 100 DUP(?)

crif DB 13,10

guery DB 'Filename'

endm DB 35

strings ENDS

При объявлении структуры с использованием этого шаблона значения полей buffer и crif не могут быть заданы, так как шаблон для них определяет множество значений. Значение поля guery может быть перекрыто только значением, длина которого не превышает 8 байтов. Аналогично, значение поля endm может быть перекрыто любым однобайтовым значением.

4

Описание символических имен

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

Для описания символических имен в языке ассемблера служат директивы EQU, LABEL и директива абсолютного присваивания (=).

Директива абсолютного присваивания имеет следующий формат:

имя=выражение

 

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

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

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

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

Примеры:

integer = 167

string = 'ab'

const = 3*4

addr = string

Директива EQU имеет следующий формат:

имя EQU выражение

Директива EQU создает абсолютное имя, алиас или текстовое имя путем присваивания имени указанного выражения.

Под абсолютным здесь понимается имя, представляющее 16-битовое значение; алиасом называется ссылка на другое имя; текстовое имя представляет собой строку символов. Каждое вхождение имени в исходном файле Ассемблер замещает текстом или значением выражения в зависимости от типа используемого выражения.

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

 

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

Отметим, что замещение имен текстом или значением осуществляется до ассемблирования содержащего имя предложения.

Примеры:

k EQU 102u ; значение

pi EQU 3.1u ; текст

mat EQU 20*30 ; значение

adr EQU [BP] ; текст

cle EQU XOR AX,AX ; текст

d EQU BYTE PTR ; текст

t EQU 'File' ; текст

Директива LABEL имеет следующий формат:

имя LABEL тип

Директива LABEL порождает новую переменную или метку путем присваивания имени указанного типа и текущего значения указателя позиции.

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

u BYTE

u WORD

u DWORD

u QWORD

u TBYTE

u NEAR

u FAR.

Пример:

barray LABEL BYTE

warray DW 100 DUP(0)

Здесь имена barray и warray ссылаются на одну и ту же область памяти.

4

Директивы управления файлами

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

Управление исходным файлом

Для управления исходным файлом предназначены директивы INCLUDE, .RADIX и COMMENT.

Директива INCLUDE имеет следующий формат:

INCLUDE имя-файла

Содержимого файла с указанным именем, трактуемое как текст, вставляется в исходный файл на место директивы INCLUDE. Имя-файла должно определять существующий файл. Имя-файла может включать в себя полную или частичную информацию о пути поиска файла. Если имя-файла не содержит информацию о местонахождении файла, поиск осуществляется в директориях, заданных опцией /I MASM, а если файл там не будет найден, то — в текущей директории. Если файл не найден, MASM выдает сообщение об ошибке.

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

Директивы INCLUDE могут быть вложенными. Файл, подключаемый по этой директиве, также может содержать директивы INCLUDE.

В листинге предложения из подключаемых файлов помечаются символом C.

При спецификации путей поиска файла могут использоваться символы / или \, что введено для совместимости с XENIX.

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

Примеры:

INCLUDE entry

INCLUDE b:\include\record

INCLUDE /include/as/stdio

INCLUDE local\define.inc

Директива .RADIX устанавливает умалчиваемое основание чисел во входном файле и имеет формат:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]