- •Министерство образования российской федерации ижевский государственный технический университет
- •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.1. Movs - пересылка строки байтов или слов
Эта инструкция пересылает байт или слово источника, адресуемого регистром SI, в строку-приемник, адресуемую регистром DI, и модифицирует содержимое регистров SI и DI таким образом, чтобы они указывали на следующие элементы строк. Величина элементов строк и соответственно тип пересылки (байт или слово) определяется ассемблером путем анализа атрибутов операндов инструкции. При использовании префикса REP инструкция MOVS может пересылать блоки памяти.
7.1.4.2. Movsb/movsw - пересылка строки байтов или слов
Эти инструкции обеспечивают пересылку байта (MOVSB) или слова (MOVSW) из элемента строки-источника, адресуемого регистром SI, в элемент строки-приемника, адресуемого регистром DI. Содержимое регистров SI и DI изменяется (уменьшается или увеличивается в соответствии со значением флага DF) на 1 для MOVSB или на 2 для MOVSW с тем, чтобы они указывали на следующие элементы строк. Использование этих инструкций полезно в том случае, когда ассемблер не может определить атрибуты строк, например, при пересылке участка программного кода. Эти инструкции могут повторяться при использовании соответствующих префиксов.
7.1.4.3. Lods - загрузка строки байтов или слов
Инструкция LODS загружает элемент строки-источника (байт или слово в зависимости от типа операнда), адресуемый регистром SI, в регистр AL или AX соответственно и устанавливает SI указывающим на следующий элемент строки. Обычно эта инструкция не повторяется, т.к. каждое повторение замещало бы содержимое регистров AL или AX, и сохранялось бы только последнее значение. Однако, инструкция LODS весьма полезна в программных циклах как часть более сложной строковой операции.
7.1.4.4. LODSB/LODSW - загрузка строки байтов или слов
Работа этих инструкций аналогична LODS с той лишь разницей, что здесь длина элемента строки задана явно: 1 байт для LODSB и 2 байта для LODSW.
7.1.4.5. STOS - сохранение строки байтов или слов
Инструкция STOS помещает содержимое регистров AL или AX (в зависимости от типа операнда) в элемент строки-приемника, адресуемый регистром DI, и устанавливает регистр DI указывающим на следующий элемент строки. Как повторяемая инструкция STOS является традиционным средством для заполнения строки каким-либо значением.
7.1.4.6. STOSB/STOSW - сохранение строки байтов или слов
Работа этих инструкций аналогична STOS с той лишь разницей, что здесь длина элемента строки задана явно: 1 байт для STOSB и 2 байта для STOSW.
7.1.4.7. CMPS - сравнение строки байтов или слов
Инструкция CMPS вычитает байт или слово строки-приемника, адресуемые регистром DI, из байта или слова строки-источника, адресуемых регистром SI. Величина элементов строк определяется ассемблером путем анализа атрибутов операндов инструкции. CMPS не изменяет содержимое самих строк, но устанавливает флаги AF, CF, OF, PF, SF и ZF таким образом, что они отражают отношение элемента строки-приемника к элементу строки-источника. Если инструкция CMPS использована с префиксом REPE или REPZ, выполняется операция "сравнение до конца строки (пока в CX не 0) и пока строки равны (ZF=1)". Если CMPS использована с префиксом REPNE или REPNZ, выполняется операция "сравнение до конца строки (пока в CX не 0) и пока строки не равны (ZF=0)". Таким образом, инструкция CMPS может применяться для поиска совпадающих или несовпадающих элементов строк.