Регистры общего назначения
При программировании на Ассемблере регистры общего назначения являются «рабочими лошадками». Особенность этих регистров состоит в том, что возможна адресация их как или как oднобайтовой части. Левый байт является старшей частью (high), a правый — младшей частью (low). Например, двухбайтовый регистр CX состоит из двух однобайтовых: CH и CL, и ссылки на регистр возможны по любому из этих трех имен. Следующие три ассемблерные команды засылают нули в регистры CX, CH и CL, соответственно:
MOV CX,00
MOV CH,00
MOV CL,00
Регистр AX
Регистр AX является основным сумматором и применяется для всех операций ввода-вывода, некоторых операций над строками и некоторых арифметических операций. Например, команды умножения, деления и сдвига предполагают использование регистра AX.
Некоторые команды генерируют более эффективный код, если они имеют ссылки на регистр AX.
AX: | AH | AL |
Регистр BX
Регистр BX является базовым регистром. Это единственный регистр общего назначения, который может использоваться в качестве «индекса» для расширенной адресации. Другое общее применение его — вычисления.
BX: | BH | BL |
Регистр CX
Регистр CX является счетчиком. Он необходим для управления числом повторений циклов и для операций сдвига влево или вправо. Регистр CX используется также для вычислений.
CX: | CH | CL |
Регистр DX
Регистр DX является регистром данных. Он применяется для некоторых операций ввода/вывода и тех операций умножения и деления над большими числами, которые используют регистровую пару DX и AX.
DX: | DH | DL |
Любые регистры общего назначения могут использоваться для cложения и вычитания как 8-ми, так и 16-ти битовых значений.
Основные директивы определения данных
Директивы определения памяти служат для задания размеров, содержимого и местоположения полей данных, используемых в программе на языке Ассемблера. В отличие от других директив языка Ассемблера при обработке директив определения памяти генерируется объектный код. MASM транслирует задаваемые в директивах определения памяти числа, строки и выражения в отдельные образы байтов, слов или других единиц данных. Эти образы копируются в объектный файл.
Директивы определения данных могут задавать:
1) Скалярные данные, представляющие собой единичное значение или набор единичных значений.
2) Записи, позволяющие манипулировать с данными на уровне бит.
3) Структуры, отражающие некоторую логическую структуру данных.
Скалярные данные
Директива DB обеспечивает распределение и инициализацию 1 байта памяти для каждого из указанных значений. В качестве значения может кодироваться целое число, строковая константа, оператор DUP, абсолютное выражение или знак ?. Знак ? обозначает неопределенное значение. Значения, если их несколько, должны разделяться запятыми.
Если директива имеет имя, создается переменная типа BYTE с соответствующим данному значению указателя позиции смещением.
Строковая константа может содержать столько символов, сколько помещается на одной строке.
Символы строки хранятся в памяти в порядке их следования, то есть, 1-й символ имеет самый младший адрес, последний — самый старший.
Директива DW обеспечивает распределение и инициализацию слова памяти (2 байта) для каждого из указанных значений. В качестве значения может кодироваться целое число, 1- или 2-х символьная константа, оператор DUP, абсолютное выражение, адресное выражение или знак ?.
Если директива имеет имя, создается переменная типа WORD с соответствующим данному значению указателя позиции смещением.
Строковая константа не может содержать более 2-х символов. Последний (или единственный) символ строки хранится в младшем байте слова. Старший байт содержит первый символ или, если строка односимвольная, 0.
Директива DD обеспечивает распределение и инициализацию двойного слова памяти (4 байта) для каждого из указанных значений. В качестве значения может кодироваться целое число, 1- или 2-х символьная константа, действительное число, кодированное действительное число, оператор DUP, абсолютное выражение, адресное выражение или знак ?.
Если директива имеет имя, создается переменная типа DWORD с соответствующим данному значению указателя позиции смещением.
Строковая константа не может содержать более 2-х символов. Последний (или единственный) символ строки хранится в младшем байте слова. Второй байт содержит первый символ или, если строка односимвольная, 0. Остальные байты заполняются нулями.
Директива DQ обеспечивает распределение и инициализацию 8 байтов памяти для каждого из указанных значений. В качестве значения может кодироваться целое число, 1- или 2-х символьная константа, действительное число, кодированное действительное число, оператор DUP, абсолютное выражение, адресное выражение или знак ?.
Если директива имеет имя, создается переменная типаQWORD с соответствующим данному значению указателя позиции смещением.
Директива DT обеспечивает распределение и инициализацию 10 байтов памяти для каждого из указанных значений. В качестве значения может кодироваться целое выражение, упакованное десятичное число, 1- или 2-х символьная константа, кодированное действительное число, оператор DUP или знак ?.
Если директива имеет имя, создается переменная типа TWORD с соответствующим данному значению указателя позиции смещением.
При обработке директивы DT подразумевается, что константы, содержащие десятичные цифры, представляют собой не целые, а десятичные упакованные числа. В случае необходимости определить 10-байтовое целое число следует после числа указать спецификатор системы счисления (D илиd для десятичных чисел, H или h для 16-ричных).