Магда Юрий
Шрифт:
имя EQU выражение
Директива EQU создает абсолютное имя, псевдоним или текстовое имя путем присваивания имени указанного выражения. Под абсолютным именем здесь подразумевается имя, представляющее собой 16-разрядное значение, а псевдонимом называется ссылка на другое имя. В качестве текстового имени может использоваться строка символов. При компиляции исходного текста каждое появление имени ассемблер замещает текстом или значением выражения, в зависимости от типа выражения. Имя должно быть уникальным и не может быть переопределено. В качестве выражения может задаваться целое число, строковая константа, вещественное число, кодированное вещественное число, мнемоника инструкции, константное или адресное выражение. Выражение, имеющее значением целое число, порождает имя, вхождения которого ассемблер замещает этим значением. Для всех остальных выражений вхождения имени замещаются текстом.
Примеры применения директивы EQU:
k EQU 1024
adr EQU [BP]
de EQU X0R АХ,АХ
cl EQU BYTE PTR
t EQU 'File'
MASM EQU 5.1 + 0.9
Msft EQU <Microsoft>
mat EQU 20*30
Директива LABEL имеет следующий формат:
имя LABEL тип
Директива LABEL порождает новую переменную или метку путем присваивания имени указанного типа и текущего значения указателя позиции. Имя должно быть уникальным и не может быть переопределено. В качестве типа может быть задано одно из следующих ключевых слов: BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR.
Примеры использования директивы LABEL:
byte_array LABEL BYTE
word_array DW 10 DUP(0)
Здесь имена bytearray и wordarray ссылаются на одну и ту же область памяти.
3.3. Программная модель процессора Intel Pentium
Для понимания работы команд ассемблера необходимо четко представлять, как выполняется адресация данных, какие регистры процессора и как могут использоваться при выполнении инструкций. Сейчас мы рассмотрим базовую программную модель процессоров Intel Pentium, в которую входят:
– 8 регистров общего назначения, служащих для хранения данных и указателей;
– регистры сегментов – они хранят 6 селекторов сегментов;
– регистр управления и контроля EFLAGS, который позволяет управлять состоянием выполнения программы и состоянием (на уровне приложения) процессора;
– регистр-указатель EIP выполняемой следующей инструкции процессора;
– система команд (инструкций) процессора;
– режимы адресации данных в командах процессора.
Начнем с описания базовых регистров процессора Intel Pentium.
Базовые регистры процессора Intel Pentium являются основой для разработки программ и позволяют решать основные задачи по обработке данных. Все они показаны на рис. 3.6.
Рис. 3.6. Базовые регистры процессора Intel Pentium
Среди базового набора регистров выделим отдельные группы и рассмотрим их назначение. Начнем с 32-разрядных регистров общего назначения (ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, EBP, ESP), которые могут использоваться в качестве:
– операндов в арифметических и логических операциях;
– операндов при вычислении адресов операндов;
– указателей на переменные в памяти.
Несмотря на то что любой из этих регистров можно использовать для вышеперечисленных операций, необходимо учитывать специфику применения регистра ESP – он служит для хранения указателя стека, поэтому задействовать его для других целей не рекомендуется. Во многих программах требуется хранить в регистрах определенные значения операндов в процессе выполнения каких-либо операций. Для этого подходят регистры ЕСХ, ESI и EDI. Если при этом используется отдельный сегмент данных, то некоторые команды ассемблера предполагают, что переменная, адресуемая одним из этих регистров, находится в сегменте данных, определяемом регистром DS.
Во многих случаях регистры общего назначения используются для предопределенных целей:
– ЕАХ выполняет функцию аккумулятора при работе с операндами и хранит результат операции;
– ЕВХ – указатель на данные, находящиеся в сегменте данных, адресуемом регистром DS;
– ЕСХ – счетчик циклов и элементов при строковых операциях;
– EDX – указатель на порты устройств ввода-вывода;
– ESI – указатель на данные, находящиеся в сегменте, адресуемом регистром DS (при выполнении строковых операций содержит смещение строки-источника);
– EDI – указатель на данные, находящиеся в сегменте, адресуемом регистром ES (при выполнении строковых операций содержит смещение строки-приемника);
– ESP содержит указатель стека в сегменте стека, адресуемом регистром SS;
– ЕВР содержит указатель на данные, находящиеся в стеке, адресуемом регистром SS.
Младшие 16 бит 32-разрядных регистров общего назначения могут адресоваться так же, как и 16-разрядные регистры в процессорах 8086 с именами АХ, ВХ, СХ, DX, ВР, s1 , DI, SP. В свою очередь, 16-разрядные регистры АХ, ВХ, СХ и DX позволяют обращаться отдельно как к старшим 8-разрядным регистрам (АН, ВН, СН, DH), так и к младшим (AL, BL, CL, DL). Это проиллюстрировано рис. 3.7.