
- •Оглавление
- •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. Список литературы
Fstcw CrtlReg ; чтение управляющего регистра
AND CrtlReg, 0F3FH ; наложение маски
CMP CtrlReg, 033FH ; сравнение значений
JNZ None
. . . ; сопроцессор присутствует
None:
. . . ; сопроцессор отсутствует
7.2.2. Команды сопроцессора
Все команды сопроцессора имеют мнемонические обозначения, начинающиеся с буквы ‘F’. Коды этих команд состоят из специального префикса и непосредственно самого кода команды. При выполнении программы центральный процессор, встретив префикс команды сопроцессора, передает саму команду на выполнение сопроцессору. Перед выполнением очередной команды сопроцессора необходимо выполнить команду центрального процессора WAIT, которая синхронизирует работу центрального процессора и сопроцессора. Команда WAIT не имеет операндов. Для процессоров, которые уже содержат сопроцессор, команду WAIT можно не использовать. При написании программы команду WAIT можно не ставить, так как транслятор Turbo Assembler автоматически вставляет ее после каждой команды сопроцессора.
Операнды команд сопроцессора могут быть ячейками памяти или внутренними регистрами сопроцессора.
7.2.3. Архитектура сопроцессора с точки зрения программиста
Программисту доступны восемь регистров общего назначения сопроцессора, имеющих мнемонические обозначения ST(0) – ST(7), и пять нечисловых регистров, которые будут рассмотрены позже. Десятибайтовые регистры ST(0) – ST(7) используются как стек, они предназначены для хранения операндов и результатов арифметических операций. Первый из этих регистров ST(0) можно обозначать в командах просто как ST.
Структура стека сопроцессора представлена на рис. 7.1.
Направление роста стека |
7 |
|
|
6 |
|
|
|
5 |
|
ST(2) |
|
4 |
|
ST(1) |
|
3 |
|
ST(0)Вершина |
|
2 |
|
|
|
1 |
|
|
|
0 |
|
|
Рис. 7.1 – структура стека сопроцессора.
Из рисунка видно, что регистр ST(0) соответствует тому физическому регистру сопроцессора, который является вершиной стека, регистр ST(1) – следующему после вершины регистру и т. д. Таким образом, при обращении к регистру ST(0) происходит обращение к вершине стека сопроцессора. Направление роста стека определяет, что при записи в стек очередного значения, указатель стека уменьшается, а при выталкивании из стека очередного значения – увеличивается. При этом если указатель стека доходит до 0, то при его уменьшении в нем устанавливается значение 7. Если же указатель стека доходит до 7, то при его увеличении в нем устанавливается значение 0. Таким образом, стек сопроцессора представляет собой кольцевой буфер.
При выполнении команд сопроцессора в стек (регистры ST(0) – ST(7)) заносятся операнды. После выполнения команды эти операнды могут выталкиваться из стека, а в стек заносится результат выполнения арифметической операции. Арифметические операции берут свои операнды с вершины стека и помещают результат в вершину стека. Рассмотрим, например, действие команды сложения вещественных чисел FADD. Эта команда имеет два операнда, которые берутся из вершины стека – из регистров ST(0) и ST(1). Результат выполнения команды FADD записывается в вершину стека в регистр ST(0). На рис. 7.2 показано содержимое стека до выполнения команды FADD, после занесения операндов в стек и после занесения в стек результата выполнения команды.
ST(0) |
не определено |
Y |
X + Y |
ST(1) |
не определено |
X |
не определено |
ST(2) |
не определено |
не определено |
не определено |
ST(3) |
не определено |
не определено |
не определено |
ST(4) |
не определено |
не определено |
не определено |
ST(5) |
не определено |
не определено |
не определено |
ST(6) |
не определено |
не определено |
не определено |
ST(7) |
не определено |
не определено |
не определено |
|
Состояние стека до выполнения команды FADD |
Состояние стека после занесения операндов |
Состояние стека после выполнения команды FADD |
Рис. 7.2 – состояние стека в процессе выполнения команды FADD.
Существуют специальные команды сопроцессора, которые загружают регистры ST(0) – ST(7) значениями, взятыми из ячеек памяти. Другие команды наоборот извлекают из регистров ST(0) – ST(7) значения и записывают их в ячейки памяти. При выполнении этих команд автоматически выполняются преобразования типов операндов. Например, можно из ячейки памяти с целочисленным значением записать это значение в вершину стека и при этом будет выполнено преобразование целочисленного значения в вещественное. И наоборот, при записи значения из регистров ST(0) – ST(7) в память может выполняться преобразование вещественного значения в целочисленное.
Нечисловые регистры сопроцессора предназначены для хранения состояния сопроцессора и признаков значений регистров ST(0) – ST(7). Нечисловыми регистрами являются:
регистр управления;
регистр состояния;
регистр признаков;
указатель команды;
указатель операнда.
Структура нечисловых регистров сопроцессора представлена на рис. 7.3 (символами ‘X’ обозначены неопределенные значения битов для некоторых моделей сопроцессоров).
15 – 13 |
12 |
11 – 10 |
9 - 8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
XXX |
XX |
RC |
PC |
XX |
XX |
PM |
UM |
OM |
ZM |
DM |
I M |