
- •Министерство образования российской федерации ижевский государственный технический университет
- •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.5.1. Команды безусловных переходов
При выполнении команд безусловных переходов происходит модификация IP или IP и CS, а их прежнее содержимое теряется.
Команда JMP - безусловный переход имеет следующие форматы:
внутрисегментные переходы
JMP disp8
JMP disp16
JMP mem/ reg
межсегментные переходы
JMP addr
JMP mem
Двухбайтовая команда:
JMP disp8 - содержит во втором байте смещение, которое интерпретируется как знаковое целое.
При выполнении команды значение смещения прибавляется (с расширением знака до 16 бит) к содержимому IP, которое соответствует адресу команды, находящейся после команды JMP. Диапазон значений байта смещения составляет -128 ... +128. Если смещение положительное, осуществляется переход вперед, а если отрицательное - переход назад.
Трехбайтовая команда:
JMP disp16 - производит такое же действие, как предыдущая команда, но содержит 16-ти битное смещение. Смещение также интерпретируется как знаковое целое, диапазон -32768...+32767.
Команда JMP mem/reg реализует косвенный безусловный переход в программе. Здесь адресом перехода служит содержимое 16-ти битного регистра или слова памяти, определяемых байтом способа адресации.
Последние два формата команды JMP реализуют прямой и косвенный межсегментные переходы.
Команда JMP addr содержит 4 байта прямого адреса перехода, которые определяют новое содержимое регистров IP и CS.
В команде косвенного межсегментного перехода JMP mem допускается адресация только памяти. Слово из адресуемой ячейки памяти загружается в IP, а следующее слово - в регистр CS.
7.5.2. Команды условных переходов
В системе команд МП 8086 имеется 19 двухбайтовых команд условных переходов. Все они имеют единый формат:
КОП disp8
При выполнении этих команд анализируется некоторые условия, закодированные текущими состояниями флагов, и в зависимости от удовлетворения условия переход осуществляется или нет. Если условие истинно, управление передается по адресу перехода путем прибавления к содержимому IP однобайтного знакового смещения (с расширением до 16 бит). А если условие ложно, выполняется следующая по порядку команда. Таким образом, все условные переходы в МП i8086 являются короткими.
Следует отметить, что большинство команд условных переходов имеет две мнемоники подчеркивающие содержательный смысл проверяемого условия и введенные для удобства программирования.
Команды позволяют проверить все отношения между знаковыми и беззнаковыми числами. Фигурирующие в определении команд термины “больше” и “меньше” относятся к знаковым числам, представленным в дополнительном коде, а “выше” и “ниже” - к беззнаковым. Например, число BE “меньше” и “выше” числа 37.
Команду JCXZ удобно помещать в начале цикла, особенно в том случае, если возможна ситуация при которой цикл (со счетчиком СХ) не выполнится ни разу.
Мнемоника |
Условие |
Отношение |
Функция перейти, если |
JA/JNBE |
CFZF=0 |
> |
выше/не ниже или равно |
JAE/JNB |
CF=0 |
|
выше или равно/не ниже |
JB/JNAE |
CF=1 |
< |
ниже/не выше или равно |
JBE/JNA |
CFZF=1 |
|
ниже или равно/не выше |
JC |
CF=1 |
|
есть перенос |
JE/JZ |
ZF=1 |
= |
равно/нуль |
JG/JNLE |
(SFOF)ZF=0 |
> |
больше/не меньше или равно |
JGE/JNL |
SFOF=0 |
|
больше или равно/не меньше |
JL/JNGE |
SFOF=1 |
< |
меньше/не больше или равно |
JLE/JNG |
(SFOF)ZF=1 |
|
меньше или равно/не больше |
JNC |
CF=0 |
|
нет переноса |
JNE/JNZ |
ZF=0 |
|
не равно/не нуль |
JNO |
OF=0 |
|
нет переполнения |
JNP/JPO |
PF=0 |
|
нет паритета/паритет не четный |
JNS |
SF=0 |
|
нет знака - |
JO |
OF=1 |
|
есть переполнение |
JP/JPE |
PF=1 |
|
есть паритет/паритет четный |
JS |
SF=1 |
|
есть знак - |
JCXZ |
(CX)=0 |
|
содержимое регистра СХ=0 |