
- •Министерство образования российской федерации ижевский государственный технический университет
- •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.4.8. Cmpsb/cmpsw - сравнение строки байтов или слов
Работа этих инструкций аналогична CMPS с той лишь разницей, что здесь длина элемента строк задана явно: 1 байт для CMPSB и 2 байта для CMPSW.
7.1.4.9. Scas - сканирование строки байтов или слов
Инструкция SCAS вычитает элемент строки-приемник (байт или слово в зависимости от типа операнда), адресуемый регистром DI, из содержимого регистра AL или AX соответственно и модифицирует флаги, но не меняет ни строку, ни содержимое аккумулятора. После SCAS регистр DI указывает на следующий элемент строки, а флаги AF, CF, OF, PF, SF и ZF отражают отношение содержимого аккумулятора к элементу строки. Если присутствует префикс REPE или REPZ, выполняется операция "сканирование до конца строки (пока в CX не 0) и пока элемент строки равен содержимому аккумулятора (ZF=1)".
Если присутствует префикс REPNE или REPNZ, выполняется операция "сканирование до конца строки (пока в CX не 0) и пока элемент строки не равен содержимому аккумулятора (ZF=0)". Этот способ может использоваться для поиска значения в строке.
7.1.4.10. Scasb/scasw - сканирование строки байтов или слов
Работа этих инструкций аналогична SCAS с той лишь разницей, что здесь длина элемента строки задана явно: 1 байт для SCASB и 2 байта для SCASW.
7.2. Арифметические команды
Арифметические операции выполняются над целыми числами четырех типов:
- без знаковыми двоичными;
- знаковыми двоичными;
- упакованными десятичными;
- неупакованными десятичными;
7.2.1. Команды сложения
7.2.1.1. ADD - сложение
Общее представление команды сложения имеет вид:
ADD dst, src
dst := (dst) + (src)
Команда ADD производит сложение операндов dst и src и помещает сумму на место dst.
Форматы команд сложения:
1) ADD mem, reg
2) ADD reg, mem
3) ADD reg, reg
4) ADD mem/reg, data
5) ADD ac, data
7.2.1.2. ADC - сложение с переносом
Общее представление команды сложения с переносом имеет вид:
ADC dst, src
dst := ((dst) + CF) + (src)
Если флаг CF установлен в 1, то команда ADC сначала прибавляет 1 к операнду 1 (dst). Затем прибавляет операнд 2 (src) к операнду 1 (dst), а в остальном команда аналогична команде ADD.
Обычно используется при сложении многословных чисел для учета бита переноса.
Форматы команд сложения с переносом:
1) ADC mem, reg
2) ADC reg, mem
3) ADC reg, reg
4) ADC mem/reg, data
5) ADC ac, data
7.2.1.3. INC - инкремент
Команда INC - инкремент - прибавляет 1 к байту или слову в регистре или в памяти.
INC dst
dst := (dst) + 1
Форматы команды:
1) INC mem/reg
2) INC reg
7.2.2. Команды вычитания
Команды вычитания отличаются от соответствующих команд сложения только выполняемой операцией и имеют те же форматы.
7.2.2.1. SUB - вычитание двоичных чисел
Команда SUB - вычитание двоичных чисел - имеет вид:
SUB dst, src
dst := (dst) - (src)
Команда осуществляет вычитание операндов dst и src и запоминает разность в dst.
Необходимо подчеркнуть, что флаги CF и AF в операциях вычитания становятся флагами заема и устанавливаются в 1, когда уменьшаемое меньше вычитаемого.
7.2.2.2. SBB - вычитание с заемом
Команда SBB - вычитание с заемом имеет следующее общее представление:
SBB dst, src
dst := ((dst) - CF) - (src)
Если флаг CF установлен в 1, то команда SBB сначала вычитает 1 из операнда dst. Затем вычитает операнд src из операнда dst.
Команда обычно используется при вычитании многословных чисел для учета заема.
7.2.2.3. DEC - декремент
Команда DEC - декремент - вычитает 1 из операнда dst.
DEC dst
dst := (dst) - 1
7.2.2.4. NEG - изменение знака числа
Команда NEG - изменение знака числа (или образование дополнительного кода) - имеет следующее общее представление:
NEG dst
dst := 0 - (dst)
Эта команда меняет значение из положительного в отрицательное и из отрицательного в положительное.