- •Лекция 05. Синтаксис ассемблера
- •Основные группы команд процессора
- •Команды передачи данных
- •Арифметические команды
- •Команды сложения
- •Умножение и деление знаковых значений
- •Безусловные переходы
- •Вызов подпрограмм
- •Условные переходы
- •Команды управления процессором
- •Команды для работы со строками
- •Трансляция текстов программ
- •Опции транслятора tasm
- •Опции компоновщика (редактора связей) tlink
- •Типы данных
Основные группы команд процессора
По своим функциям все команды процессора 8086 делятся на шесть категорий. Эти шесть групп имеют следующий вид:
• Команды передачи данных
• Арифметические команды
• Логические команды
• Команды управления потоком
• Команды управления процессором
• Команды для работы со строками
Команды передачи данных
Команды передачи данных процессора 8086 представлены в табл. 1. Эта группа делится на четыре части: общие, ввода-вывода, адресные и флагов. Операнды справа от каждого символического имени команды определяют необходимые ей элементы данных. Для большей части команд определены операнды назначения и источника. Другие команды требуют один операнд или не требуют их вообще.
Рассмотрим первую из команд передачи данных — mov. Вероятно, mov чаще других команд встречается в программах на языке ассемблера. Из табл. 1 видно, что для mov необходимы два операнда: операнд-источник и операнд-назначение. Отметим, что источник записывается после назначения, при предположении, что mov работает следующим образом:
mov назначение <-- источник
Таблица 1. Команды передачи данных
|
|
Мнемокод / Операнды |
Описание |
Основные команды |
|
mov назначение, источник pop назначение push источник xchg назначение, источник xlat/xiatb таблица |
Переслать (скопировать) байт или слово Извлечение слова из стека Занесение слова в стек Перестановка байтов и слов Перекодировка таблицы |
Команды ввода-вывода |
|
in сумматор, порт out порт, сумматор |
Ввод (выборка) байта или слова из порта Вывод (размещение) байта или слова в порт |
Адресные команды |
|
lds назначение, источник lea назначение, источник les назначение, источник |
Загрузка регистра сегмента данных (используется ds) Загрузка эффективного адреса Загрузка регистра дополнительного сегмента (используется es) |
Команды флагов |
|
lahf popf pushf sahf |
Загрузка флагов в регистр АН Извлечение регистра флагов из стека Занесение регистра флагов в стек Установка флагов из регистра АН |
Данные из источника передаются в направлении стрелки, справа налево. Будьте внимательны, чтобы не перепутать местами операнды, что является типичной и опасной ошибкой. Следующая команда в языке ассемблера пересылает значение регистра Ьх в регистр ах:
mov ах, bх ; ах <-- Ьх
Если значение ах равно 0000, а bх — 0123h, то после выполнения этой команды значение ах станет равным 0123h. Величина bх при этом не изменится.
Арифметические команды
В набор команд процессора 8086 не входят операции с плавающей точкой, возведения в степень, взятия квадратного корня, функции SIN и COS. Математические команды в языке ассемблера ограничиваются сложением, умножением, делением и вычитанием знаковых и беззнаковых целых двоичных чисел.
Существует два способа увеличения вычислительных возможностей языка ассемблера. Во-первых, вы можете приобрести (или написать) необходимые вам пакеты подпрограмм, которые реализуют функции высокого уровня. Другое решение связано с покупкой для вашего персонального компьютера математического сопроцессора, хотя это и требует определенных затрат для процессоров 80286 и 80386, которым необходимы соответствующие 80287 и 80387 математические сопроцессоры. Процессор 80486 содержит в себе встроенный 80387 сопроцессор. Третий, и возможно лучший способ, состоит в использовании для вычисления выражений с плавающей запятой языков высокого уровня типа Turbo Pascal или Turbo С. Эти языки автоматически определяют наличие математического сопроцессора и могут переключаться на программный эмулятор для систем, в которых он отсутствует.
Таблица 2. Арифметические команды
Мнемокод / Операнды |
Описание |
Команды сложения |
|
ааа adc назначение, источник add назначение, источник daa inc назначение |
Коррекция ASCII-формата для сложения Сложение с переносом Сложение байт или слов Десятичная коррекция для сложения Инкремент |
Команды вычитания |
|
aas cmp назначение, источник das dec назначение neg назначение
sbb назначение, источник sub назначение, источник |
Коррекция ASCII-формата для вычитания Сравнение Десятичная коррекция для вычитания Декремент Изменение знака числа (преобразование в дополнительный код) Вычитание с заемом Вычитание |
Команды умножения |
|
aam imul источник mul источник |
Коррекция ASCII-формата для умножения Умножение величин со знаком Беззнаковое умножение |
Команды деления |
|
aad cbw cwd div источник idiv источник. |
Коррекция ASCII-формата для деления Преобразование байта в слово Преобразование слова в двойное слово Беззнаковое деление Деление величин со знаком |