
- •Оглавление
- •3. Лабораторная работа №2 54
- •5. Лабораторная работа №4 81
- •7. Лабораторная работа №6 117
- •1. Общие положения
- •1.1. Архитектура микропроцессора Intel 8086 с точки зрения программиста
- •1.2. Организация памяти с точки зрения мп 8086
- •1.4. Общая классификация системы команд мп 8086
- •Команды пересылки данных;
- •Арифметические команды;
- •Мнем_обозначение [операнд1[, операнд2]]
- •1.5. Физические и логические сегменты
- •1.6. Префиксы замены сегментов
- •1.7. Директивы языка ассемблера
- •Директивы управления размещением данных;
- •1.8. Структура ассемблерной программы для мп 8086
- •1.9.1. Директивы управления размещением данных
- •1.9.1.1. Директива struc
- •1.9.1.2. Директива equ
- •1.9.1.3. Директива assume
- •1.10. Пример простейшей программы на ассемблере
- •1.11. Средства компиляции программ на ассемблере и примеры их использования
- •1.11.1. Исполнимый файл типа com
- •1.11.2. Исполнимый файл типа exe
- •1.11.3. Использование транслятора Turbo Assember
- •1.11.4. Использование компоновщика Turbo Linker
- •2. Лабораторная работа №1
- •2.1. Цель работы
- •2.2. Основные теоретические положения
- •2.2.1. Команды пересылки данных
- •2.2.1.1. Команда mov
- •2.2.1.2. Команда xchg
- •2.2.1.3. Команда xlat
- •2.2.1.4. Команда lea
- •2.2.1.5. Команды lds и les
- •2.2.1.6. Команда lahf
- •2.2.1.7. Команда sahf
- •2.2.2. Арифметические команды
- •2.2.2.1. Команда add
- •2.2.2.2. Команда adc
- •Add word ptr n2, ax ; сложение младших 16 бит
- •2.2.2.3. Команда sub
- •2.2.2.4. Команда sbb
- •Sub word ptr n1, ax ; вычитание младших 16 бит
- •2.2.2.5. Команды mul и imul
- •2.2.2.6. Команды div и idiv
- •2.2.2.7. Команда inc
- •2.2.2.8. Команда dec
- •2.2.2.9. Команда neg
- •2.2.2.10. Команда cbw
- •2.2.2.11. Команда cwd
- •2.3. Задание и методические указания к выполнению лабораторной работы
- •2.3.1. Задание на лабораторную работу
- •2.3.2. Методические указания к выполнению работы
- •2.4. Контрольные вопросы
- •2.5. Варианты заданий на лабораторную работу
- •3. Лабораторная работа №2
- •3.1. Цель работы
- •3.2. Основные теоретические положения
- •3.2.1. Команда and
- •3.2.2. Команда or
- •3.2.3. Команда xor
- •3.2.4. Команда not
- •3.2.5. Команда test
- •3.2.6. Команды shl и shr
- •3.2.7. Команды sal и sar
- •3.2.8. Команды rol и ror
- •3.2.9. Команды rcl и rcr
- •3.3. Задание и методические указания к выполнению лабораторной работы
- •3.3.1. Задание на лабораторную работу
- •3.3.2. Методические указания к выполнению работы
- •3.4. Контрольные вопросы
- •3.5. Варианты заданий на лабораторную работу
- •4. Лабораторная работа №3
- •4.1. Цель работы
- •4.2. Основные теоретические положения
- •4.2.1. Цепочечные команды
- •4.2.1.1. Команды movsb и movsw
- •4.2.1.2. Команды stosb и stosw
- •4.2.1.3. Команды cmpsb и cmpsw
- •4.2.1.4. Команды scasb и scasw
- •4.2.1.5. Команды lodsb и lodsw
- •4.2.2. Префиксы повторения
- •4.2.2.1. Префикс повторения rep
- •4.2.2.2. Префиксы повторения repe и repz
- •4.2.2.3. Префиксы повторения repne и repnz
- •4.2.3. Команды условных и безусловных переходов
- •4.2.4. Способы адресации в командах переходов
- •4.2.5. Организация циклов в программах на ассемблере
- •4.2.5.5. Цикл с постусловием
- •4.3. Задание и методические указания к выполнению лабораторной работы
- •4.3.1. Задание на лабораторную работу
- •4.3.2. Методические указания к выполнению работы
- •4.4. Контрольные вопросы
- •4.5. Варианты заданий на лабораторную работу
- •5. Лабораторная работа №4
- •5.1. Цель работы
- •5.2. Основные теоретические положения
- •5.2.1. Организация системы прерываний в ibm pc
- •5.2.2. Понятие вектора прерывания
- •5.2.3. Таблица векторов прерываний
- •5.2.4. Программные прерывания
- •5.2.6. Аппаратные прерывания
- •5.2.7. Сходства и различия аппаратных и программных прерываний
- •5.2.8.Организация обработки прерываний в программах на ассемблере
- •5.2.8.1. Написание процедуры обработки программных прерываний
- •5.2.8.2. Написание процедуры обработки аппаратных прерываний
- •5.2.8.3. Установка вектора прерывания
- •5.2.9. Функции ms-dos 25h и 35h
- •5.2.9.1. Функция dos 25h
- •5.2.9.2. Функция dos 35h
- •5.3. Задание и методические указания к выполнению лабораторной работы
- •5.3.1. Задание на лабораторную работу
- •5.3.2. Методические указания к выполнению работы
- •5.4. Контрольные вопросы
- •5.5. Варианты заданий на лабораторную работу
- •6. Лабораторная работа №5
- •6.1. Цель работы
- •6.2. Основные теоретические положения
- •6.2.1. Данные в формате asciiz
- •6.2.2. Файловый номер и коды возврата
- •6.2.3. Функции dos для работы с файлами
- •6.2.3.1. Функция 3ch
- •6.2.3.2. Функция 3dh
- •6.2.3.3. Функция 3fh
- •6.2.3.4. Функция 40h
- •6.2.3.5. Функция 3eh
- •6.2.3.6. Функция 41h
- •Mov dx, offset FileName ; asciiz-строка
- •6.2.3.7. Функция 42h
- •6.2.3.8. Функция 43h
- •Mov cx, 01h ; атрибута «только для чтения»
- •6.2.3.9. Функция 56h
- •6.2.4. Примеры программ для работы с файлами
- •6.2.5. Функции для работы с каталогами
- •6.2.5.1. Функция 39h
- •6.2.5.2. Функция 3ah
- •6.2.5.3. Функция 47h
- •6.2.5.4. Функция 3bh
- •6.2.6. Поиск файлов по шаблону
- •6.2.6.1. Функция 4eh
- •6.2.6.2. Функция 4fh
- •6.2.6.3. Совместное использование функций 4eh и 4fh
- •6.2.7. Коды ошибок dos
- •6.3. Задание и методические указания к выполнению лабораторной работы
- •6.3.1. Задание на лабораторную работу
- •6.3.2. Методические указания к выполнению работы
- •6.4. Контрольные вопросы
- •6.5. Варианты заданий на лабораторную работу
- •7. Лабораторная работа №6
- •7.1. Цель работы
- •7.2. Основные теоретические положения
- •7.2.1. Определение наличия сопроцессора
- •Fstcw CrtlReg ; чтение управляющего регистра
- •7.2.2. Команды сопроцессора
- •7.2.3. Архитектура сопроцессора с точки зрения программиста
- •Регистр управления
- •Регистр состояния
- •Регистр признаков
- •7.2.3.1. Регистр управления
- •7.2.3.2. Регистр состояния
- •7.2.3.3. Регистр признаков
- •7.2.3.4. Указатель команды
- •7.2.3.5. Указатель операнда
- •7.2.4. Форматы вещественных чисел, используемые сопроцессором
- •7.2.3. Некоторые команды сопроцессора
- •7.2.3.1. Команды пересылки данных и загрузки констант сопроцессора
- •Команда fxch
- •7.2.3.2. Арифметические команды сопроцессора
- •Команда fsqrt
- •Команда fscale
- •Команда fabs
- •Команда fchs
- •Команда fprem
- •7.2.3.3. Команды трансцендентных функций
- •Команда fpatan
- •Команда fptan
- •Команда f2xm1
- •Команда fyl2x
- •Команда fylpxp1
- •7.2.3.4. Команды сравнения данных
- •7.2.3.5. Команды управления сопроцессором
- •Команда finit
- •Команда fstsw
- •Команда fldcw
- •Команда fstcw
- •Fldcw cw ; загрузка регистра управления Команда fclex
- •Команда fsave
- •Команда frstore
- •Команда ffree
- •Команда fnop
- •7.2.4. Примеры решения типовых вычислительных задач
- •7.2.4.1. Вычисление интеграла функции
- •7.2.4.2. Вычисление суммы степенного ряда
- •7.2.4.3. Нахождение корня уравнения методом Ньютона
- •7.3. Задание и методические указания к выполнению лабораторной работы
- •7.3.1. Задание на лабораторную работу
- •7.3.2. Методические указания к выполнению работы
- •7.4. Контрольные вопросы
- •7.5. Варианты заданий на лабораторную работу
- •8. Курсовая работа
- •8.1. Цель работы
- •8.2. Основные теоретические положения
- •8.2.1. Структура резидентной программы
- •8.2.1.1. Стек резидентной части
- •8.2.1.2. Процедура загрузки резидентной части
- •Old_vec dd ? ; здесь будет храниться старое значение
- •8.2.1.3. Примеры простейших резидентных программ типа com
- •8.2.1.4. Примеры простейших резидентных программы типа exe
- •8.2.1.5. Вызов старого обработчика прерывания
- •8.2.1.6. Связь с резидентной частью
- •8.2.1.7. Процедура выгрузки резидентной части
- •Int 21h ; освобождение блока памяти
- •8.2.1.8. Процедура обработки ключей командной строки
- •8.2.2. Пример резидентной программы
- •8.2.3. Функции ms-dos
- •8.2.3.1. Функции ввода-вывода
- •Функция 01h
- •Функция 02h
- •Функция 05h
- •Функция 06h
- •Функция 07h
- •Функция 09h
- •Функция 0ah
- •Функция 0bh
- •Функция 0ch
- •8.2.3.2. Функции управления памятью
- •Функция 48h
- •Функция 49h
- •Mov es, bx ; сегмент блока памяти находится в bx
- •Функция 4ah
- •8.2.3.3. Функции управления процессами
- •Функция 31h
- •Функция 4bh
- •Функция 4bh, подфункция 00h
- •Функция 4bh, подфункция 01h
- •Функция 4bh, подфункция 03h
- •Функция 4ch
- •Функция 4dh
- •Функция 50h
- •Функция 51h
- •8.2.3.4. Функции настройки даты/времени
- •Функция 2ah
- •Функция 2bh
- •Mov dl, 13 ; 13-е число
- •Функция 2сh
- •Функция 2dh
- •8.2.4. Прерывания bios
- •8.2.4.1. Прерывание bios 10h
- •Функция 00h
- •Функция 02h
- •Функция 03h
- •Функция 08h
- •Функция 09h
- •Функция 0ch
- •Функция 0dh
- •Функция 0fh
- •8.2.4.2. Прерывание bios 13h
- •Функция 00h
- •Функция 02h
- •Buf db 512 dup (?) ; буфер для чтения сектора
- •Функция 03h
- •Функция 04h
- •8.2.4.3. Прерывание bios 16h
- •Функция 00h
- •Функция 01h
- •Функция 02h
- •Функция 03h
- •Функция 05h
- •8.2.4.4. Коды ошибок bios
- •8.3. Задание и методические указания к выполнению курсовой работы
- •8.3.1. Задание на курсовую работу
- •8.3.2. Методические указания к выполнению курсовой работы
- •8.4. Содержание отчета
- •8.5. Контрольные вопросы
- •8.6. Варианты заданий на курсовую работу
- •9. Список литературы
4.2.5.5. Цикл с постусловием
Цикл с постусловием в программе на ассемблере можно организовать следующими способами:
1. Использование команд LOOP, LOOPZ и LOOPNZ. Тело цикла выполняется CX раз. Достоинством этого способа является наличие только одной команды для организации цикла. Пример:
MOV CX, 1000
M1: <тело_цикла>
LOOP M1
2. Использование команды JCXZ. В этом случае для организации цикла требуется еще две дополнительные команды, но в отличие от всех рассмотренных выше примеров циклов, тело такого цикла может занимать более 127 байт (в предыдущих примерах использовались команды коротких переходов). Пример:
MOV CX, 500
M1: <тело_цикла>
DEC CX
JCXZ M2
JMP M1
M2:
3. Использование команд условного перехода. В этом случае условие цикла зависит от используемых команд условного перехода. Цикл выполняется до тех пор, пока условие станет неверным. Пример:
MOV CX, 2000
M1: <тело_цикла>
DEC CX
CMP CX, 0
JNE M1
В большинстве рассмотренных примеров циклов размер тела цикла не может превышать 127 байт. Для снятия этого ограничения необходимо использовать дополнительные команды безусловного перехода, которые могут быть не короткими, а ближними. В следующем примере показан цикл с использованием команды условного перехода и дополнительными командами безусловного перехода:
MOV DX, 10
M1: CMP DX, 0
JE M2
JMP SHORT M3
M2: JMP M2
M3: <тело_цикла>
DEC DX
JMP M1
M2:
Сократить число команд безусловного перехода можно путем использования противоположного условия:
MOV DX, 10
M1: CMP DX, 0
JNE M3
JMP M2
M3: <тело_цикла>
DEC DX
JMP M1
M2:
4.3. Задание и методические указания к выполнению лабораторной работы
4.3.1. Задание на лабораторную работу
написать программу на ассемблере, выполняющую заданные операции над элементами массивов целых чисел. Диапазон чисел каждого элемента массива составляет от –32768 до 32767 (размер элемента – 2 байта). В программе должны использоваться цепочечные команды MOVSW, STOSW, CMPSW, SCASW (в зависимости от конкретного задания). Массивы A и B определить в тексте программы. Если по конкретному заданию требуется преобразовать не все элементы массива A, то в массив B записываются как преобразованные, так и не преобразованные элементы массива A.
проверить работу программы в отладчике.
4.3.2. Методические указания к выполнению работы
Порядок выполнения лабораторной работы №3 соответствует порядку выполнения лабораторной работы №1.
4.4. Контрольные вопросы
Какие цепочечные команды существуют для МП 8086?
В чем особенность цепочечных команд?
Какими способами можно определить массив в программе на ассемблере?
Для чего служит директива SEG?
Для чего служит директива OFFSET?
В каких частях программы можно размещать данные?
Объясните выбор части программы, в которой размещаются данные для вашей программы?
Какими способами можно организовать циклы на ассемблере?
В чем состоит отличие префиксов повторения REP и REPNE?