- •1. Внутренние регистры
- •1.1. Регистры данных
- •1.2. Регистры сегментов
- •1.3. Регистры указателей и индексов
- •1.4. Регистр командного указателя
- •1.5. Флаговый регистр
- •2. Структура и процесс разработки программы на языке ассемблера
- •2.1. Команды
- •2.2. Псевдооператоры
- •2.2.1. Псевдооператор segment
- •2.2.2. Псевдооператор proc
- •2.2.3. Псевдооператор assume
- •2.2.4. Псевдооператор end
- •2.2.5. Псевдооператоры определения данных
- •2.3. Инициализация программы
- •3. Команды пересылки данных
- •3.1. Команда mov
- •3.2. Команды push и рор
- •4. Режимы адресации
- •4.1. Регистровая и непосредственная адресация
- •4.2. Исполнительный адрес
- •4.3. Прямая адресация
- •4.4. Косвенная регистровая адресация
- •4.5. Адресация по базе
- •4.6. Прямая адресация с индексированием
- •4.7. Адресация по базе с индексированием
- •5. Команды передачи управления
- •5.1. Команды call и ret
- •5.2. Команда безусловного перехода jmp
- •5.3. Команды условной передачи управления
- •5.4. Команды управления циклами
- •6. Команды обработки строк
- •6.1. Команды пересылки строк movs, movsb, movsw
- •6.2. Префиксы повторения
- •6.3. Команды сравнения строк. Команда cmps.
- •6.4. Команды сканирования строк
- •6.5. Команды загрузки и сохранения строки
- •7. Взаимодействие языков Си и Ассемблера
- •7.1. Внутренняя структура программы на языке Си для ibm pc
- •7.2. Использование функций на языке Ассемблера
- •7.2.1. Основы взаимодействия языков Си и Ассемблера
- •7.2.2. Передача управления в подпрограмму и обратно
- •7.2.3. Использование глобальных данных
- •7.2.4. Использование аргументов функции
- •7.2.5. Возвращение значения через имя подпрограммы
- •7.2.6. Использование аргументов
- •7.3. Вызов функций на языке Си из программ на языке Ассемблера
- •7.4. Использование локальных данных
- •8. Арифметические команды
- •8.1. Форматы хранения десятичных чисел
- •8.2. Команды сложения
- •8.3. Коррекция результата сложения для bcd-форматов
- •8.4. Команда приращения значения приемника на единицу
- •8.5. Команды вычитания
- •8.6. Коррекция результата вычитания для bcd-форматов
- •8.7. Команда уменьшения содержимого приемника на единицу
- •8.8. Команда обращения знака
- •8.9. Команды умножения
- •8.10. Коррекция результатов умножения
- •8.11. Команды деления
- •8.12. Коррекция результатов деления
- •8.13. Команды расширения знака
- •9. Команды манипулирования битами
- •9.1. Логические команды and, or и xor
- •9.2. Команда логического отрицания nот
- •9.3. Команда проверки test
- •9.4. Команды сдвига и циклического сдвига
- •9.4.1. Команды сдвига
- •9.4.2. Команды циклического сдвига
- •10. Команды работы с флагами
- •10.1. Команды управления флагами
- •10.2. Команды пересылки флагов
- •11. Псевдооператоры определения идентификаторов и операции
- •11.1. Псевдооператоры определения идентификаторов
- •11.2. Операции
- •11.2.1. Арифметические операции
- •11.2.2. Логические операции
- •11.2.3. Операции отношения
- •11.2.4. Операции, возвращающие значения
- •11.2.5. Операции присваивания атрибутов
- •12. Условные псевдооператоры
- •13. Макроопределения
- •13.1. Сравнение макроопределений и процедур
- •13.2. Состав макроопределений
- •13.3. Псевдооператоры макроассемблера
- •13.3.1. Псевдооператор local
- •13.3.2. Псевдооператоры повторения
- •13.3.3. Условные псевдооператоры
- •13.3.4. Псевдооператор eхiтм
- •13.4. Операции в макроопределениях
- •13.5. Задание макроопределений в исходных программах
- •13.5.1. Использование библиотеки макроопределений
- •13.5.2. Указания для задания макроопределений
- •13.5.3. Считывание библиотеки макроопределений в программу
- •13.5.4. Удаление макроопределений
13.4. Операции в макроопределениях
Макроассемблер предоставляет возможность при задании макроопределений пользоваться следующими операциями
Операция &. Формат:
текст&текст
Вызывает конкатенацию (слияние) текста или имен.
Операция позволяет задавать модифицируемые метки и операнды.
Пример. Следующее макроопределение образует таблицу байтов с заданным именем и заданной длиной:
DEF_TABLE MACRO SUFFIX, LENGTH
TАBLE&SUFFIX DB LENGTH DUP(?)
ENDM
Если в программе будет указан оператор
DEF_TABLE А, 5
то Ассемблер превратит его в оператор
TABLEА DB 5 DUP(?)
Операция ;;. Формат:
;; комментарий.
Заставляет Ассемблер опустить комментарии при расширении макроопределения. Без комментариев окончательная программа будет занимать меньше памяти и поэтому будет транслироваться быстрее.
При задании макроопределений пользоваться обычным признаком комментария (;) следует только в абсолютно необходимых случаях, а в остальных случаях следует использовать ";;".
Операция !. Формат:
!символ
Используется в аргументе для указания Ассемблеру, что символ надо использовать как литерал, а не как имя, т.е. вне зависимости от любого специального значения, которое он может иметь в противном случае.
Операция %. Формат:
%текст
Трактует текст как выражение, вычисляет его значение и заменяет текст на полученный результат. Текст может быть или числовым выражением, или уравнением.
Операция < >. Формат:
<текст>
Трактует текст как литерал, независимо от любых специальных символов, которые он может содержать.
13.5. Задание макроопределений в исходных программах
Существуют два способа использования макроопределений: их можно задавать в начале программы или считывать в программу из отдельного файла с библиотекой макроопределений.
Если макроопределение специфично и требуется только для одной программы, то его можно задать в тексте программы, а затем вызывать по мере необходимости.
Задание макроопределений непосредственно в тексте программы имеет недостаток – ими можно воспользоваться только в этой программе. Чтобы они были доступны и другим программам, их надо помещать в библиотеку макроопределений.
13.5.1. Использование библиотеки макроопределений
Библиотека макроопределений представляет собой дисковый файл, в котором заданы макроопределения, необходимые для нескольких программ.
После того как такой файл создан, его содержимое можно считывать в любую исходную программу. Тем самым все макроопределения библиотеки становятся доступными для этой программы. Чтобы использовать какое-либо из них, достаточно указать его имя.
Библиотека макроопределений представляет собой исходный файл, содержащий их текст. Следовательно, библиотечный файл можно создать с помощью любой программы обработки текстов точно так же, как создается обычная программа.
13.5.2. Указания для задания макроопределений
Включаемые в библиотеку макроопределения должны быть процедурами общего назначения, которыми можно воспользоваться практически в любой программе. Поэтому их необходимо разрабатывать так, чтобы они не только выполняли свое предназначение, но и не приводили к конфликтам в любой использующей их программе. Рассмотрим несколько указаний, которые могут помочь разрабатывать эффективные макроопределения.
1. Документируйте макроопределения как можно тщательнее. Включайте побольше комментариев. Помните, смысл Ваших макроопределений должен быть понятен любому, кто будет ими пользоваться, а не только Вам.
2. При вводе комментариев пользуйтесь операцией ";;", а для разделения полей оператора нажимайте клавиши табуляции (вместо ввода пробелов). Эти шаги помогут свести размеры Ваших программ к минимуму, что ускорит их трансляцию.
3. Старайтесь делать макроопределения как можно более универсальными. Если Вам требуется специфичное макроопределение, то по возможности выражайте его через более универсальные макроопределения.
4. Если макроопределение содержит метки, перечислите их в операторе LOCAL.
5. Сохраняйте все используемые в макроопределении регистры, за исключением выходных. Как обычно, это делается с помощью операторов PUSH в начале макроопределения и POP в конце.
6. Если в макроопределении требуются действия, выполняемые ранее заданным макроопределением, то воспользуйтесь вызовом последнего.
