Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.402Директива ALIGN передает следующую строку (обычно данные) по адресу, заданному аргументом директивы. Например, если текущий сегмент уже содержит 61 байт данных, тогда после выполнения директивы ALIGN 4 следующим выделяемым адресом будет адрес 64. Директива EQU дает символическое название некоторому выражению. Например, после следующей директивы символ BASE можно использовать в программе вместо значения 1000: BASE EQU 1000 Выражение, которое следует за директивой EQU, может содержать несколько символов, соединенных знаками арифметических и других операций, например: LIMIT EQU 4 * BASE + 2000 Большинство ассемблеров, в том числе MASM, требуют, чтобы символ был определен в программе до его появления в таком выражении, как это. Директивы DB, DD, DW и DQ выделяют память для одной или нескольких переменных размером 1, 2, 4 и 8 байт соответственно. Например: TABLE DB 11, 23, 49 Эта директива выделяет место для 3 байт и присваивает им начальные значения 11, 23 и 49 соответственно, кроме того, она определяет символ TABLE, равный тому адресу, по которому хранится значение 11. Директивы PR0C и ENDP определяют начало и конец ассемблерных процедур. Процедуры в ассемблере выполняют ту же роль, что и в языках программирования высокого уровня. Директивы MACRO и ENDM определяют начало и конец макроса. О макросах мы поговорим в следующем разделе. Директивы PUBLIC и EXTERN определяют видимость (доступность) символов. Программы часто пишут в виде совокупности файлов. Иногда процедуре, находящейся в одном файле, нужно вызвать процедуру или получить доступ к данным, определенным в другом файле. Чтобы такие перекрестные ссылки между файлами стали возможными, символ (имя), который нужно сделать доступным для других файлов, экспортируется с помощью директивы PUBLIC. Чтобы ассемблер не выдавал предупреждений по поводу использования символа, который не определен в данном файле, этот символ может быть объявлен внешним (EXTERN), то есть определенным в другом файле. Символы, которые не определены ни в одной из этих директив, могут использоваться только в пределах одного файла. Поэтому даже если, например, символ F00 встречается в нескольких файлах, это не вызовет никакого конфликта, поскольку указанный символ локален по отношению к каждому файлу. Директива INCLUDE заставляет ассемблер вызвать другой файл и включить его в текущий. Такие включенные файлы часто содержат определения, макросы и другие элементы, необходимые для разных файлов. Многие языки ассемблера, в том числе MASM, поддерживают условное ассемблирование программы. Например: WORDSIZE EQU 16 IF WORDSIZE GT 16 WSIZE: DW32 ELSE WSIZE: DW 16 ENDIF Эта программа выделяет в памяти одно 32-разрядное слово и вызывает его адрес WSIZE. Этому слову придается одно из значений: либо 32, либо 16 в зависимости от значения WORDSIZE (в данном случае — 16). Такая конструкция может использоваться в программах для 16-разрядных (как 8088) или 32-разрядных машин (как Pentium 4). Если в начале и в конце машинно-зависимого кода вставить директивы IF и ENDIF, а затем изменить единственное определение, WORDSIZE, программу можно автоматически настроить на один из двух размеров. Применяя такой подход, можно задействовать одну такую исходную программу для нескольких разных машин. В большинстве случаев все машинно-зависимые определения, такие как WORDSIZE, сохраняются в одном файле, причем для разных машин должны быть разные файлы. Путем включения файла с нужными определениями программу можно легко перекомпилировать для разных машин. |