- •Министерство образования российской федерации ижевский государственный технический университет
- •1. Методика выполнения лабораторных работ
- •2. Основные сведения об ассемблере
- •2.1. Регистры процессора
- •2.2. Команды ассемблера
- •2.3. Прерывания ассемблера
- •4. Режимы адресации команд
- •5. Байт способа адресации
- •6. Режимы адресации переходов
- •7. Система команд
- •7.1. Команды пересылки
- •7.1.1. Общие команды пересылки данных
- •7.1.1.2. Xchg - перестановка
- •7.1.1.3. Xlat - перекодировка
- •7.1.1.7. Команда lahf - загрузка флагов в регистр ан
- •7.1.1.8. Sahf - установка флагов из регистра ан
- •7.1.2. Команды пересылки данных с использованием стека (стековые команды)
- •7.1.3. Команды ввода - вывода
- •1.4. Команды пересылки цепочек байт или слов (цепочечные команды)
- •7.1.4.1. Movs - пересылка строки байтов или слов
- •7.1.4.2. Movsb/movsw - пересылка строки байтов или слов
- •7.1.4.3. Lods - загрузка строки байтов или слов
- •7.1.4.8. Cmpsb/cmpsw - сравнение строки байтов или слов
- •7.1.4.9. Scas - сканирование строки байтов или слов
- •7.1.4.10. Scasb/scasw - сканирование строки байтов или слов
- •7.2. Арифметические команды
- •7.2.1. Команды сложения
- •7.2.2. Команды вычитания
- •7.2.3. Команды сравнения
- •7.2.4. Команды умножения
- •7.2.4.2. Imul - умножение знаковых величин
- •7.2.5. Команды деления
- •7.2.5.2. Idiv - деление знаковых величин
- •7.3. Логические команды
- •7.4. Команды сдвигов
- •7.5. Команды переходов (передачи управления)
- •7.5.1. Команды безусловных переходов
- •7.5.2. Команды условных переходов
- •7.5.3. Команды вызовов (подпрограммы)
- •7.5.4. Команды возвратов (из подпрограмм)
- •7.5.5. Команды управления циклами
- •7.5.6. Команды прерываний
- •7.6. Команды управления микропроцессором
- •8. Примеры выполнения лабораторных работ
- •9. Учебно-методическая литература
- •Описание команд отладчика debug
- •Команды процессора 8086
- •1. Команды пересылки данных
- •1.1. Общие команды пересылки данных
- •Xlat Перекодировка
- •Xchg Перестановка
- •1.2. Стековые команды
- •1.3. Команды ввода-вывода
- •In Ввод байта или слова из порта
- •1.4. Команды пересылки цепочек
- •2. Арифметические команды
- •2.1. Команды сложения
- •Inc Инкремент
- •2.2. Команды вычитания
- •2.3. Команды сравнения
- •2.4. Команды умножения
- •Imul Целое умножение знаковых величин
- •2.5. Команды деления
- •Idiv Целое деление знаковых величин
- •3. Логические команды
- •Xor Исключающее или
- •4. Команды сдвигов
- •5. Команды передачи управления
- •5.1. Команды вызова процедуры
- •5.2. Команды прерываний
- •Int Прерывание
- •Into Прерывание по переполнению
- •Iret Возврат из обработки прерывания
- •5.3. Команды условных переходов
- •5.4. Команды безусловных переходов
- •5.5. Команды управления циклами
- •6. Команды управления процессором
7.1.1.2. Xchg - перестановка
Команда XCHG переставляет два байта или два слова между двумя регистрами или между регистром и ячейкой памяти
Имеет два формата:
1) XCHG ac, reg
10010 reg
2) XCHG reg 1, reg 2
XCHG reg, mem
1000011 wmod reg r/m
Пример:
AH = A8, DL= FF
XCHG AH, DL
AH = FF, DL = A8
Примечания:
1. В команде XCHG нельзя указывать сегментные регистры.
2. Команда XCHG AX, AX используется как команда пустой операции NOP.
7.1.1.3. Xlat - перекодировка
Команда XLAT перекодирует байты в другой формат.
Например, при переводе нижнего регистра в верхний или при перекодировке ASCII-кода.
Формат команды:
11010111
Алгоритм выполнения команды XLAT состоит из 2 шагов:
1. Прибавить содержимое регистра AL к содержимому регистра BX;
2. Использовать результат как смещение в сегменте данных (относительно DS) и поместить адресуемый байт из памяти в регистр AL.
Команда XLAT применяется для быстрого преобразования символов из одного кода в другой.
Команды LEA, LDS, LES отличаются от других команд пересылки тем, что при их выполнении в адресуемый регистр передается не собственно данные, а адреса.
7.1.1.4. LEA - загрузка эффективного адреса в регистр
Команда LEA загружает в указанный регистр эффективный адрес ячейки памяти
Формат команды:
LEA reg, mem
10001101mod reg r/m
Эта команда применяется для инициализации регистров перед выполнением цепочечных команд.
Пример:
BX = 0500
SI = 0010
LEA BX, [BX + SI]
BX = 0510
7.1.1.5. LDS - загрузка регистра сегмента данных
Команда LDS загружает в указанный регистр содержимое ячейки памяти, а в сегментный регистр DS - следующую ячейку памяти (слово)
Эта команда обеспечивает быструю загрузку дальнего адреса.
Формат команды:
LDS reg, mem
11000101mod reg r/m
Пример:
DS = 0000 [C0010] = 0180
DI = 0010 [C0012] = 2000
LDS SI, [DI]
SI = 0180
DS = 2000
7.1.1.6. LES - загрузка регистра дополнительного сегмента
Команда LES загружает в указанный регистр содержимое ячейки памяти, а в сегментный регистр ES - следующую ячейку памяти.
Эта команда обеспечивает быструю загрузку далекого адреса.
Формат команды:
LES reg, mem
11000100mod reg r/m
Если mod = 11, действия команд LEA, LDS, LES не определены.
Обычно в команде LDS указывается регистр SI, а в команде LES регистр DI, так как в цепочечных командах регистр SI ассоциируется с регистром DS, а регистр DI с регистром ES.
Основное применение команд LEA, LDS и LES - это инициализация регистров перед выполнением цепочечных команд.
При выполнении команды загрузки эффективного адреса
LEA reg, mem
вычисляется эффективный адрес памяти (в соответствии с указанным режимом адресации) и его значение, (а не адресуемое им слово памяти) загружается в указанный регистр. Такая операция может потребоваться, например, для загрузки в регистр BX начального адреса таблицы, которая необходима для выполнения команды XLAT.
Пример:
[BX] = 0400
[SI] = 003C
LEA BX, [BX + SI]
[BX] = 043C
Команды LDS и LES выполняют почти одни и те же действия: вычисляется эффективный адрес памяти, который суммируется с содержимым регистра DS, затем слово из памяти по полученному адресу загружается в указанный регистр, а следующее слово из памяти загружается в регистр DS (команда LDS) или ES (команда LES).
Пример:
[DS] = C000
[DI] = 0010
[C0010] = 0180
[C0012] = 2000
LDS SI, [DI]
[SI] = 0180
[DS] = 0200