- •Содержание
- •1.Введение в архитектуру эвм. 5
- •2.Архитектура реального режима работы м/п семейства 8086 19
- •3.Директивы и операторы ассемблера 81
- •4.Архитектура и система команд арифметического сопроцессора 91
- •5.Варианты контрольных работ 131
- •6.Примеры программ 138
- •1.Введение в архитектуру эвм.
- •2.Архитектура реального режима работы м/п семейства 8086
- •2.1.Форматы данных микропроцессора
- •2.1.1.Числа
- •2.1.2.Символы
- •2.1.3.Указатели
- •2.1.4.Цепочки
- •2.2.Адресация памяти
- •2.3.Внутренние регистры процессора
- •2.3.1.Регистры общего назначения
- •2.3.2.Сегментные регистры
- •2.3.3.Регистры смещения
- •2.3.4.Регистр флагов
- •2.4.Режимы адресации
- •2.4.5.Базовая адресация
- •2.5.1.1. Общие команды.
- •2.5.1.2. Команды push и pop .
- •2.5.1.3. Команды ввода-вывода.
- •2.5.1.4. Адресные команды (пересылки адреса)
- •2.5.1.5. Флажковые команды (команды пересылки флагов).
- •2.5.2.Арифметические команды.
- •2.5.2.1. Команды сложения.
- •2.5.2.2.Команды вычитания.
- •2.5.2.3.Команды умножения и деления.
- •2.5.2.4.Команды расширения знака.
- •2.5.2.5.Десятичная арифметика.
- •2.5.3.Логические команды.
- •2.5.3.1.Булевы команды.
- •2.5.3.2.Команды сдвигов.
- •2.5.3.3.Команды циклических сдвигов.
- •2.5.3.4.Команды двойного сдвига
- •2.5.3.5.Команды работы с двоичными цепочками
- •2.5.4.Команды передачи управления.
- •2.5.4.1.Команды безусловной передачи управления.
- •2.5.4.2. Команды условных переходов.
- •2.5.4.3.Команды SetCondition
- •2.5.5.Цепочечные (строковые) команды.
- •2.5.5.1.Команды пересылки цепочки.
- •2.5.5.2.Команды сравнения цепочек.
- •2.5.5.3.Команды сканирования цепочек.
- •2.5.5.4.Команды загрузки.
- •2.5.5.5.Команды ввода и вывода цепочек.
- •2.5.5.6.Замена сегмента.
- •2.5.6.Команды управления микропроцессором.
- •2.5.6.1.Команды управления флагами.
- •2.5.6.2.Команды синхронизации.
- •2.5.6.3.Команда холостого хода.
- •2.5.6.4.Команды прерываний.
- •2.5.7.Новые команды микропроцессора 80486
- •3.Директивы и операторы ассемблера
- •3.1.Структура программы
- •3.2.Организация программы.
- •3.2.1. Модели памяти
- •3.2.2. Процедуры
- •3.2.3. Директивы задания набора допустимых команд
- •3.3.Примеры использования директив в программах типа .Exe и .Com.
- •4.Архитектура и система команд арифметического сопроцессора
- •4.1.Форматы чисел сопроцессора
- •4.1.1.`Целые числа
- •4.1.2. Вещественные числа
- •4.1.3.Диапазоны вещественных чисел в х87.
- •4.2.Особые случаи вещественной арифметики
- •4.3.Формирование специальных значений в особых случаях
- •4.3.1. Случай неточного результата.
- •4.3.2.Численное антипереполнение.
- •4.3.3. Денормализованный операнд.
- •4.3.4. Деление на ноль.
- •4.3.5.Численное переполнение.
- •4.3.6.Недействительная операция.
- •4.4.Регистры математического сопроцессора.
- •4.4.1.Численные регистры (регистровый стек).
- •4.4.2.Регистр управления (cw)
- •4.4.3.Регистр состояния.
- •4.4.4. Регистр тэгов (признаков).
- •4.4.5.Указатели особого случая.
- •4.5.Система команд арифметического сопроцессора.
- •4.5.1.Команды передачи данных.
- •4.5.2.Арифметические команды
- •4.5.3.Дополнительные арифметические команды
- •4.5.4.Команды сравнений
- •4.5.5.Трансцендентные команды
- •4.5.6.Административные команды
- •4.6.Совместная работа двух процессоров в системе.
- •4.6.1.Синхронизация по командам.
- •4.6.2.Синхронизация по данным.
- •5.Варианты контрольных работ
- •5.1.Контрольная работа №1
- •5.2. Контрольная работа №2
- •6.Примеры программ
- •Список рекомендуемой литературы
4.5.2.Арифметические команды
Для безоперандных арифметических команд операндами по умолчанию являются регистры ST(0),ST(1). Для однооперандных арифметических команд - один из операндов - это вершина стекаST(0).
Для всех арифметических команд существуют обычные (прямые) формы команд: FADD,FSUB,FMUL,FDIV, а для команд вычитания и деления существуют ещё и обратные формы команд:FSUBR,FDIVR.
Для обратных форм команд выполняется следующая схема:
источник - приемник=приемник или источник / приемник = приемник. Для прямых команд уменьшаемое или делимое берется из приемника.
Существует шесть форм команд:
FXXX;
FXXX память;
FIXXX память;
FXXX ST(0), ST(i);
FXXX ST(i), ST(0);
FXXXP ST(i), ST(0).
Здесь ХХХ- мнемокод арифметической команды.
При реализации команд первого типа процессор извлекает из стека два верхних операнда, а затем включает в стек результат операции. В результате указатель вершины стека увеличивается на единицу.
При реализации команд второго типа операнд в памяти (одинарной или двойной точности) является источником, а регистр ST(0)- приемником. Результат записывается в вершину стека , то есть указатель вершины стека не изменяется.
Реализации команд третьего типа присходит аналогично командам второго типа, но операнды в памяти целые (16 или 32 бита).
При реализации команд четвертого типа любой регистр ST(i) служит источником, а вершина стека – приемником, при этом указатель вершины стека не изменяется.
При реализации команд пятого типа любой регистр ST(i) служит приемником, а вершина стека - источником, при этом указатель вершигы стека не изменяется.
При реализации команд шестого типа любой регистр ST(i) служит приемником, а вершина стека - источником, по окончании операции источник извлекается из стека, то есть указатель вершины стека увеличивается на единицу.
Арифметические операции над целыми числами выполняется медленнее, чем в основном процессоре.
4.5.3.Дополнительные арифметические команды
МНЕМОКОД |
ОПИСАНИЕ |
FSQRT |
Извлечение квадратного корня |
FSCALE |
Масштабирование на степень 2 |
FPREM |
Нахождение частичного остатка |
FPREM1 |
Нахождение остатка |
FRNDINT |
Округление до целого |
FXTRACT |
Выделение порядка и мантиссы |
FABS |
Нахождение абсолютной величины |
FCHS |
Изменение знака |
FSQRT:- извлекает квадратный корень изST(0) и записывает результат вST(0). При попытке извлечения корня из отрицательного числа возникает особый случай недействительной операции. Начиная с процессора 80486, разрешены операции : .
FSCALE: . ЕслиST(1) не целое и больше 1 по абсолютной величине, то берется ближайшее меньшее целое, еслиST(1) меньше 1 или находится вне диапазона, то результат неопределенный, особый случай не генерируется. Начиная с сопроцессора 80387 ограничений на операнды команды нет.
FXTRACT: разлагаетST(0) на два числа с плавающей точкой: несмещенный порядок и знаковую мантиссу. Порядок заменяет старое значениеST(0), а мантисса включается сверху, то есть указатель стека уменьшается на единицу. Порядок истинный, в форме вещественного числа.
FRNDINT: округляетST(0) до целого числа в формате с плавающей точкой согласно полюRCрегистра состояния.
FABS: заменяет содержимое регистраST(0) на его абсолютное значение (изменяет знаковый разряд).
FCHS: инвертирует знак содержимогоST(0).
FPREM: вычисляет остаток от деления содержимогоST(0) на число изST(1), знак остатка совпадает со знакомST(0). Остаток заменяет содержимоеST(0).FPREMформирует частичный остаток, так как операция может прекратиться, не завершив операции деления.FPREMработает, производя повторяющиеся машинные вычитания, при этом производится не более 64 вычитаний. Если 64 вычитания достаточно, чтобы числоST(0) <ST(1), то вST(0) будет находится истинный остаток, а бит С2кода условия сбрасывается в нуль. Если 64 вычитаний недостаточно, то С2устанавливается в единицу, а вST(0) находится уменьшенный результат после 64 вычитаний. С2проверяется командойJP, после передачи регистра состояния вAXи командойSAHF. Повторное вычитаниеFPREMдо образования С2= 0 дает точный остаток. 64 вычитания делают для того, чтобы между повторными исполнениями команды можно было прервать сопроцессор (64 вычитания гарантируют, чтоFPREMне будет длиться дольше команды деления, то есть не превысит длительности максимальной по времени команды). Применяется в основном в вычислениях тригонометрических функций.
FPREM1 (введена в систему команд для сопроцессора 80387): вычисляет величинуREM=ST-ST(1)*Q, гдеQ– целая часть числаST/ST(1); С0,С3,С2– содержат младшие три бита частного.