
- •Министерство образования российской федерации ижевский государственный технический университет
- •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.3. Логические команды
Команда NOT - логическое НЕТ (инверсия), имеет вид:
NOT src
src:= (src)
NOT mem/reg
Команда AND - логическое И (конъюнкция) имеет вид:
AND dst, src
dst:= (dst) (src)
и форматы:
AND mem, reg
AND reg, mem
AND reg1, reg2
AND mem/reg, data
AND ac, data
Команда OR - логическое ИЛИ (дизъюнкция) имеет вид:
OR dst, src
dst:= (dst) (src)
и те же форматы, что и AND.
Команда XOR - исключающее ИЛИ - (сложение по модулю два) имеет вид:
XOR dst, src
dst:= (dst) (src)
и те же форматы что и команда AND.
Команда TEST - проверка битов выполняет конъюнкцию операндов, но не изменяет их значений (неразрушающая проверка) имеет вид:
TEST dst, src
(dst) (src)
и те же форматы, что и AND.
7.4. Команды сдвигов
Все команды сдвигов имеют формат КОП mem, reg, count,
где count - счетчик числа сдвигов. Этот операнд может быть указан как непосредственный операнд - 1 (статический сдвиг) или как регистр CL. В командах сдвига в коде операции вместо бита d стоит бит c. Если с=0, то осуществляется сдвиг на один разряд. Если с=1, то число сдвигов задано в регистре CL.
В циклических сдвигах выдвигаемый бит помещается на место освобождающегося бита.
Команда RCL - циклический сдвиг влево через перенос:
CF |
|
|
|
|
1 |
0 |
________________________ |
Команда RCR - циклический сдвиг вправо через перенос:
CF |
|
|
|
|
1 |
0 |
________________________ |
Команда ROL - циклический сдвиг влево:
CF |
|
|
|
|
1 |
0 |
_______________________ |
Команда ROR - циклический сдвиг вправо:
|
|
|
|
|
1 |
0 |
|
CF |
_____________________ |
Команды SAL, SHL - арифметический и логический сдвиги влево:
CF |
|
|
|
|
1 |
0 |
0 |
Освобождающийся бит заполняется 0.
Команда SAR - арифметический сдвиг вправо:
|
|
|
|
1 |
0 |
|
CF |
___ |
Левый освобождающийся бит заполняется значением знакового бита.
Команда SHR - логический сдвиг вправо:
0 |
|
|
|
1 |
0 |
|
CF |
Левый освобождающийся бит заполняется нулем.
Команды арифметических сдвигов удобно применять для умножения (сдвига влево) и деления (сдвига вправо) на степень двух.
7.5. Команды переходов (передачи управления)
Команды передачи управления можно разделить на следующие группы:
7.5.1. Команды безусловных переходов
7.5.2. Команды условных переходов
7.5.3. Команды вызовов
7.5.4. Команды возвратов
7.5.5. Команды управления циклами
7.5.6. Команды прерываний
Сегментная организация памяти определяет две основные разновидности команд передачи управления.
1. Передача управления в пределах текущего сегмента кода называется внутрисегментной - при этом модифицируется только регистр IP и адрес перехода представляется, одним словом.
Такая передача управления называется так же близкой (тип NEAR), а ее вариант с сокращенным диапазоном адресов переходов - короткой (тип SHORT).
2. Передача управления за пределы текущего сегмента кода называется межсегментной - при этом необходимо модифицировать содержимое регистров IP и CS и адрес перехода представляется двумя словами (сегмент: смещение).
Данная передача управления называется так же длинной (тип FAR), так как она позволяет перейти к любой ячейке памяти.