- •Министерство образования российской федерации ижевский государственный технический университет
- •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.2.3. Команды сравнения
Команды сравнения очень похожи на соответствующие команды вычитания. Единственное их отличие заключается в том, что результат вычитания операндов нигде не запоминается. Следовательно, данные команды производят так называемое неразрушающее сравнение операндов.
7.2.3.1. CMP - сравнение
Команда CMP - сравнение - фактически вычитает второй операнд из первого, но содержимое операндов не изменяется.
Имеет следующие форматы:
1) CMP reg, mem
2) CMP mem, reg
3) CMP reg1, reg2
4) CMP mem/reg, data
5) CMP ac, data
7.2.4. Команды умножения
Имеются две команды умножения: для без знаковых и знаковых чисел.
7.2.4.1. MUL - беззнаковое умножение
Команда MUL - беззнаковое умножение - имеет обобщенное представление:
MUL src
ext:ac := (ac) * (src)
ext - расширение
Левый единственный бит рассматривается как бит данных, но не как знак минус для отрицательных чисел.
Команда имеет два варианта: 8 - битовое и 16 - битовое умножение.
Для 8 - битового умножения множимое должно находится в регистре AL (аккумуляторе), а множитель в регистре или в памяти. Произведение получается в регистре AX.
Для 16 - битового умножения множимое должно находится в регистре AX, а множитель в регистре или в памяти. Произведение получается в регистровой паре DX:AX. В этой операции расширением аккумулятора AX является регистр DX.
Команда MUL имеет два формата:
1) MUL reg
2) MUL mem
7.2.4.2. Imul - умножение знаковых величин
Команда IMUL - умножение знаковых величин - осуществляет практически такие же действия, что и команда MUL, но сомножители и произведение интерпретируются как знаковые числа в дополнительном коде.
7.2.5. Команды деления
Имеются две команды деления: для без знаковых и знаковых чисел.
7.2.5.1. DIV - беззнаковое деление
Команда DIV - беззнаковое деление - имеет обобщенное представление:
DIV src
ac := guot ((ext:ac) / (src))
ext := rem ((ext:ac) / (src)),
где ас - аккумулятор;
ext - расширение;
guot - частное;
rem - остаток.
Эта команда имеет 2 варианта: для 8-ми и 16-ти битного делителя.
Левый бит рассматривается как бит данных, а не как знаковый бит.
Для 8-ми битового делителя делимое должно находиться в регистре АХ. Частное от деления получается в регистре AL, а остаток в регистре AH.
Для 16-ти битового делителя делимое должно находиться в регистровой паре DX:AX. Частное от деления получается в регистре АХ, а остаток - в регистре СХ.
Команда DIV имеет 2 формата:
1) DIV reg
2) DIV mem
Если частное превышает разрядность аккумулятора (больше FF или FFFF) или делитель является 0, то генерируется прерывание типа 0 по адресу 0000:0002.
7.2.5.2. Idiv - деление знаковых величин
Команда IDIV - деление знаковых величин - осуществляет практически такие же действия, что и команда DIV, но делимое, делитель, частное и остаток считаются знаковыми числами.
ЗНАКИ
Делимое |
Делитель |
Частное |
Остаток |
+ |
+ |
+ |
+ |
+ |
- |
- |
+ |
- |
+ |
- |
- |
- |
- |
+ |
- |
К подгруппе команд деления принадлежат две команды преобразования.
7.2.5.3. CBW - преобразование байта в слово
Команда CBW - преобразование байта в слово - расширяет (копирует) знак содержимого регистра AL в регистр AH и имеет код 98.
7.2.5.4. CWD - преобразования слова в двойное слово
Команда CWD - преобразования слова в двойное слово - передает знак содержимого регистра АХ во все биты DX и имеет код 99.
Команды CBW и CWD удобно использовать для превращения делимого одинарной длины в делимое двойной длины, что необходимо для правильного выполнения операции деления.