МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ
СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ КУРС ЛЕКЦИЙ ДЛЯ СТУДЕНТОВ ЗАОЧНОГО ФАКУЛЬТЕТА
САМАРА 2002
УДК 681.3
Системное программирование: Курс лекций / О.П. Солдатова, С.В. Востокин. Самар. гос. аэрокосм. ун-т. Самара, 2002. С. 127.
ISBN 5-7883-0118-1
Дано описание архитектуры и системы команд реального режима работы микропроцессоров фирмы INTEL. Дано описание архитектуры и системы команд устройства с плавающей точкой (FPU). Приведены варианты заданий контрольных работ по курсу и примеры программ.
Курс лекций предназначен для студентов заочной формы обучения специальности 22.02 – «Автоматизированные системы обработки информации и управления». Данный курс лекций будет также полезен студентам других специальностей, знакомых с основами архитектуры микропроцессоров фирмы INTEL и занимающихся как по очной, так и заочной форме обучения. Работа подготовлена на кафедре ИСТ.
Печатается по решению редакционно-издательского совета Самарского государственного аэрокосмического университета имени академика С.П. Королева.
Рецензент канд. техн. наук, доц. Л.А. Ж а р и н о в а
ISBN 5-7883-0118-1Ó Солдатова О.П., Востокин С.В., 2002
Ó Самарский государственный
аэрокосмический университет, 2002
Содержание
1.ВВЕДЕНИЕ В АРХИТЕКТУРУ ЭВМ. 5
Структура персонального компьютера. 5
2.АРХИТЕКТУРА РЕАЛЬНОГО РЕЖИМА РАБОТЫ М/П СЕМЕЙСТВА 8086 18
2.1.Форматы данных микропроцессора. 18
2.1.1.Числа. 18
2.1.2.Символы.. 18
2.1.3.Указатели. 19
2.1.4.Цепочки. 19
2.2.Адресация памяти. 19
2.3.Внутренние регистры процессора. 20
2.4.Режимы адресации. 23
2.5.Система команд микропроцессора. 26
2.5.1.2. Команды PUSH и POP . 29
2.5.1.4. Адресные команды (пересылки адреса) 31
2.5.1.5. Флажковые команды (команды пересылки флагов). 33
2.5.2.2.Команды вычитания. 36
2.5.2.3.Команды умножения и деления. 36
2.5.2.4.Команды расширения знака. 39
2.5.3.1.Булевы команды. 44
2.5.3.2.Команды сдвигов. 45
2.5.3.3.Команды циклических сдвигов. 46
2.5.3.4.Команды двойного сдвига. 49
2.5.4.1.Команды безусловной передачи управления. 50
2.5.4.3.Команды SetCondition. 54
2.5.5.1.Команды пересылки цепочки. 57
2.5.5.2.Команды сравнения цепочек. 58
2.5.5.3.Команды сканирования цепочек. 59
2.5.5.4.Команды загрузки. 59
2.5.5.5.Команды ввода и вывода цепочек. 60
2.5.5.6.Замена сегмента. 60
2.5.6.1.Команды управления флагами. 61
2.5.6.2.Команды синхронизации. 61
2.5.6.3.Команда холостого хода. 62
2.5.6.4.Команды прерываний. 63
3.ДИРЕКТИВЫ И ОПЕРАТОРЫ АССЕМБЛЕРА.. 66
3.1.Структура программы.. 66
3.2.Организация программы. 69
3.2.1. Модели памяти. 69
3.2.2. Процедуры.. 71
3.2.3. Директивы задания набора допустимых команд. 71
3.3.Примеры использования директив в программах типа .EXE и .COM. 72
4.АРХИТЕКТУРА И СИСТЕМА КОМАНД АРИФМЕТИЧЕСКОГО СОПРОЦЕССОРА.. 75
4.1.Форматы чисел сопроцессора. 75
4.1.1.`Целые числа. 75
4.1.2. Вещественные числа. 76
4.1.3.Диапазоны вещественных чисел в х87. 78
4.2.Особые случаи вещественной арифметики. 78
4.3.Формирование специальных значений в особых случаях. 80
4.3.1. Случай неточного результата. 80
4.3.2.Численное антипереполнение. 81
4.3.3. Денормализованный операнд. 82
4.3.4. Деление на ноль. 83
4.3.5.Численное переполнение. 85
4.3.6.Недействительная операция. 86
4.4.Регистры математического сопроцессора. 88
4.4.1.Численные регистры (регистровый стек). 88
4.4.2.Регистр управления (cw) 89
4.4.3.Регистр состояния. 89
4.4.4. Регистр тэгов (признаков). 90
4.4.5.Указатели особого случая. 91
4.5.Система команд арифметического сопроцессора. 91
4.5.1.Команды передачи данных. 91
4.5.2.Арифметические команды.. 93
4.5.3.Дополнительные арифметические команды.. 94
4.5.4.Команды сравнений. 96
4.5.5.Трансцендентные команды.. 99
4.5.6.Административные команды.. 100
4.6.Совместная работа двух процессоров в системе. 103
4.6.1.Синхронизация по командам. 104
4.6.2.Синхронизация по данным. 105
5.ВАРИАНТЫ КОНТРОЛЬНЫХ РАБОТ.. 106
5.1.Контрольная работа №1. 106
5.2. Контрольная работа №2. 110
6.ПРИМЕРЫ ПРОГРАММ... 112
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ... 118
ВВЕДЕНИЕ В АРХИТЕКТУРУ ЭВМ.
Структура персонального компьютера.
Под термином “Архитектура ЭВМ” - будем понимать представление о машине в терминах функциональных основных модулей, языка, структуры данных (без деталей их аппаратной реализации).
С точки зрения пользователя, можно выделить следующие группы характеристик, определяющие архитектуру ЭВМ:
Структура машинного кода и система команд, определяющие алгоритмические возможности процессора.
Технические и эксплуатационные характеристики ЭВМ: производительность, емкость памяти, тактовая частота, стоимость и т.д.
Состав и характеристики функциональных модулей базовой конфигурации ЭВМ, наличие возможности подключения дополнительных модулей.
Структура и состав системного программного обеспечения и принципы его взаимодействия с аппаратурой.
Структурная схема ПК приведена на рисунке 1.1.
Рисунок 1.1. Структурная схема ПК
Микропроцессор (МП) – центральный блок ПК, предназначенный для управления работой всех блоков машины и для преобразования информации, то есть. выполнения арифметических и логических операций над информацией. Микропроцессор состоит из следующих схем:
· Арифметико-логическое устройство (АЛУ) предназначено для выполнения всех арифметических и логических операций над числовой и символьной информацией, для ускорения операций с вещественными числами к АЛУ подключается математический сопроцессор.
· Внутренние регистры – служат для кратковременного хранения, записи и выдачи информации, непосредственно используемой в вычислениях в ближайшее время работы ПК. Регистры – быстродействующие ячейки памяти различной длины (8¸64 разрядов).
· Устройство управления (УУ) – формирует и подает на все блоки машины символы управления (управляющие символы); формирует адреса ячеек памяти и передает их для выполнения операции.
· Интерфейс МП – реализует сопряжение и связь с другими устройствами ПК; включает в себя связь между устройствами МП, буферные регистры, схемы управления портами ввода-вывода и системной шиной.
Интерфейс – совокупность средств сопряжения и связи устройств компьютера, обеспечивающая их эффективное взаимодействие. Порт ввода-вывода – аппаратура сопряжения, позволяющая подключить к микропроцессору другое устройство ПК.
Генератор тактовых импульсов генерирует последовательность электрических импульсов; синхронизирующих работу всех устройств ПК; частота генерируемых импульсов определяет тактовую частоту ПК, которая является одной из основных характеристик ПК.
Такт – промежуток времени между соседними импульсами.
Системная шина – основная интерфейсная система ПК.
Системная шина включает в себя:
· шину данных, содержащую провода и схемы сопряжения для параллельной передачи всех разрядов числового кода операнда;
· шину адреса, содержащую провода и схемы сопряжения для параллельной передачи всех разрядов числового кода адреса ячейки ОП или порта ввода-вывода внешнего устройства;
· шину управления, содержащую провода и схемы сопряжения для передачи управляющих сигналов во все блоки ПК;
· шину питания, имеющую провода и схемы сопряжения для подключения блоков ПК к системе электропитания.
Системная шина обеспечивает 3 направления передачи информации:
между МП и ОП;
между МК и портами ввода-вывода внешних устройств;
между ОП и портами ввода-вывода внешних устройств (в режиме прямого доступа к памяти).
Все блоки ПК (точнее их порты ввода-вывода) через соответствующие унифицированные разъемы подключаются к шине единообразно: непосредственно или через адаптеры.
Управление системной шиной осуществляется либо непосредственно, либо через контроллер шины. Обмен информацией между внешними устройствами и системной шиной выполняется с использованием ASCII-кодов.
Функции хранения информации выполняет память внутренняя и внешняя.
Основная память (ОП) – предназначена для хранения и оперативного обмена информацией с другими блоками ПК. ОП состоит из ПЗУ и ОЗУ. В последнее время в состав ОП входят также КЭШ-память и FLASH- память
ПЗУ – служит для хранения постоянной программной и справочной информации, позволяет оперативно только считывать хранящуюся в нем информацию (изменить информацию в ПЗУ нельзя).
ОЗУ – предназначено для оперативной записи, хранения и считывания информации (программ и данных), непосредственно участвующей в информационно-вычислительном процессе, выполняемом ПК в текущий период времени.
Внешняя память – используется для долговременного хранения любой информации, которая может когда-либо потребоваться. Во внешней памяти хранится все программное обеспечение ПК.
Источник питания – блок, содержащий системы автономного и сетевого энергопитания ПК.
Таймер – внутримашинные электронные часы, обеспечивающие автоматический съем значения текущего момента времени (год, месяц, день, часы, минуты, секунды и доли секунды).
Таймер подключается к автономному источнику питания – аккумулятору и при отключении ПК от сети продолжает работать.
Внешние устройства (ВУ) – обеспечивают взаимодействие ПК с окружающей средой: пользователями, объектами управления и другими ЭВМ.
ВУ разделяются на следующие классы:
· внешние запоминающие устройства (ВЗУ);
· устройства ввода информации;
· устройства вывода информации;
· средства связи и телекоммуникации.
Устройства ввода информации:
· клавиатура;
· графические планшеты (диджитайзеры) – ручной ввод графической информации путем перемещения по планшету специального указателя (пера);
· сканеры;
· манипуляторы (джойстик – рычаг, мышь, трекбол – шар в оправе, световое перо – для ввода графической информации на экран дисплея путем управления движением курсора по экрану);
· сенсорные экраны – для ввода отдельных элементов изображения, программ или команд в ПК;
· устройство речевого ввода-вывода – быстроразвивающиеся средства мультимедиа;
· видеомонитор – устройство для отображения вводимой и выводимой информации.
Устройства вывода информации:
· принтеры – печатающие устройства для регистрации информации на бумажный носитель.
· графопостроители (плоттеры) – устройства для вывода графической информации из ПК на бумажный носитель. Векторные плоттеры – вычерчивают изображение при помощи пера. Растровые бывают электростатические, струйные и лазерные. По конструкции плоттеры подразделяются на планшетные и барабанные.
Устройства связи и телекоммуникации используются для связи с другими приборами и подключения ПК к каналам связи и другим ЭВМ и вычислительным сетям (сетевые интерфейсные платы, мультиплексоры передачи данных, модемы).
Сетевой адаптер – служит для подключения ПК к каналу связи для работы в составе вычислительной сети. В глобальных сетях функции сетевого адаптера выполняет модулятор-демодулятор (модем).
Средства мультимедиа (multimedia – многосредовость ) – комплекс аппаратных и программных средств, позволяющих человеку общаться с ПК, используя самые разные , естественные для себя среды: звук, видео, графику, тексты, анимацию и др.
К средствам мультимедиа относятся: устройства речевого ввода-вывода, сканеры, высококачественные видео- и звуковые платы, платы видео-захвата (снимают изображения с видеомагнитофона или видеокамеры и вводят его в ПК), высококачественные акустические и видеовоспроизводящие системы с усилителями, звуковыми колонками, большими видео-экранами. К средствам мультимедиа относят также внешние запоминающие устройства большой емкости на оптических дисках, часто используемые для записи звуковой и видео информации.
Математический сопроцессор – используется для ускоренного выполнения операций над числами с плавающей запятой. Имеет свою систему команд и работает параллельно с основным МП, но под его управлением. Последние модели МП, начиная с МП 80486DX, включают сопроцессор в свой состав в качестве устройства с плавающей точкой (FPU).
Контроллер прямого доступа к памяти освобождает МП от прямого управления НМД, что существенно повышает эффективность ПК.
Сопроцессор ввода-вывода – за счет параллельной работы с МП значительно ускоряет выполнение процедур ввода-вывода при обслуживании нескольких внешних устройств, освобождая МП от обработки процедур ввода-вывода, в том числе реализует и режим прямого доступа к памяти.
Контроллер прерываний – обслуживает процедуры прерывания, принимает запрос на прерывание от ВУ, определяет уровень приоритета этого запроса и выдает сигнал прерывания в МП. МП, получив этот сигнал, приостанавливает выполнение текущей программы и переходит к выполнению специальной программы обслуживания того прерывания, которое запросило ВУ. После завершения программы обслуживания восстанавливается выполнение прерванной программы. Контроллер прерываний является программируемым.
Конструктивно ПК выполнены в виде центрального системного блока, к которому через разъемы подключаются ВУ: дополнительная память, клавиатура, дисплей, принтер и т.д.
Системный блок обычно включает в себя системную плату (материнскую плату), блок питания, накопители на дисках, разъемы для дополнительных устройств и платы расширения с контроллерами-адаптерами ВУ.
На системной плате размещаются:
· микропроцессор;
· математический сопроцессор;
· генератор тактовых импульсов;
· блоки (микросхемы) ОЗУ и ПЗУ;
· адаптеры клавиатуры, НЖМД, НГМД ;
· контроллер прерываний;
· таймер.
Микропроцессоры.
Микропроцессор (центральный процессор или CPU) – функционально законченное программно-управляемое устройство обработки информации, выполненное в виде одной или нескольких больших (БИС) или сверхбольших (СБИС) интегральных схем.
Функции МП.
Чтение и дешифрация команд из ОП.
Чтение данных из ОП и регистров адаптеров ВУ.
Прием и обработка запросов и команд от адаптеров на обслуживание ВУ.
Обработка данных и их запись в ОП и регистры адаптеров ВУ.
Выработка управляющих сигналов для всех узлов и блоков ПК.
Разрядность шины данных МП определяет разрядность ПК в целом; разрядность шины адреса МП – его адресное пространство.
Адресное пространство – это максимальное количество ячеек ОП, которое может быть непосредственно адресовано микропроцессором.
Первый МП был выпущен в США в 1971 году фирмой Intel – МП 4004. В настоящее время МП фирмы Intel и Intel-подобные являются наиболее популярными и распространенными.
Все МП можно разделить на 3 группы:
МП типа CISC (с полным набором команд);
МП типа RISC (с сокращенным набором команд);
МП типа MISC (с минимальным набором команд и весьма высоким быстродействием) – находятся в стадии разработки.
Большинство современных ПК типа IBM PC используют МП типа CISC.
Основные модели процессоров фирмы INTEL приведены в таблице.
Модель МП
Разрядность, бит
Тактовая частота, МГц
Адресное пространство, байт
Число команд
Число эл-тов
Год выпуска
Данных
Адреса
4,77
4 ´10
4,77
64 ´10
4,77 и 8
10
8, 16
4,77 и 8
10
8 и 10
10
24 (20)
10-33
4´10(4´10)
25-50
16´10(4´10)
33-100
16´10(4´10)
1,2´10
Pentium
50-150
4´10
3,1´10
Pentium Pro
66-200
4´10
5,5´10
Особенности некоторых процессоров:
Начиная с МП 80286 имеется возможность многозадачной работы и работы МП в вычислительной сети.
Начиная с МП 80386 используется конвейерное выполнение команд, что позволило увеличить быстродействие ПК в 2-3 раза, а также обеспечивается поддержка системы виртуальных машин, при которой в одном МП моделируется как бы несколько ПК, работающих параллельно и имеющих разные ОС.
МП Pentium – это МП 80586(P5), товарная марка Pentium запатентована фирмой Intel. Эти МП имеют пятиступенчатую конвейерную структуру и КЭШ-буфер для команд условной передачи управления, позволяющие предсказать направление ветвления программы; по эффективному быстродействию они приближаются к RISC МП. Обмен данными с системой может выполняться со скоростью 1 Гбайт/с. У всех МП Pentium имеется встроенная КЭШ -память, отдельно для команд, отдельно для данных; имеются специализированные конвейерные аппаратные блоки сложения, умножения и деления, значительно ускоряющие выполнение операций с плавающей запятой.
В качестве примера на рисунке 1.2 приведена упрощенная структурная схема микропроцессора i486.
.
Рисунок 1.2. Упрощенная структурная схема микропроцессора i486.
В состав микропроцессора входят девять внутренних функциональных устройств, которые работают параллельно:
шинный интерфейс;
внутренняя кэш-память;
устройство предвыборки (опережающей выборки) команд;
устройство дешифрирования команд;
устройство управления;
целочисленное устройство;
устройство с плавающей точкой;
устройство сегментации;
устройство страничного преобразования адреса.
Сигналы внешней 32-битной шины процессора подаются во внутренние устройства через шинный интерфейс. Данные передаются из кэш-памяти в шинный интерфейс по 32-битной шине данных. Тесно связанные кэш-память и устройство предвыборки одновременно воспринимают выбранные с опережением команды из шинного интерфейса по 32-битной шине данных, которую кэш-память использует также для получения операндов. Находящиеся в кэш-памяти команды доступны устройству предвыборки, которое имеет 32-байтную очередь команд, ожидающих выполнения.
Когда внутренние запросы данных или команд можно удовлетворить из кэш-памяти, обращение к внешней шине процессора не производится.
Дешифратор команд преобразует команды в управляющие сигналы низкого уровня и точки входа в микрокод.
Устройство управления выполняет микрокод и управляет целочисленным устройством, устройством с плавающей точкой и устройством сегментации. Результаты вычислений помещаются во внутренние регистры целочисленного устройства и устройства с плавающей точкой или кэш-память.
Формирование адреса производят устройства сегментации и страничного преобразования (используется только в защищенном режиме работы процессора). Логические адреса преобразуются устройством сегментации в физические адреса для реального режима работы или в линейные адреса для защищенного режима работы процессора. В свою очередь линейные адреса передаются в устройство страничного преобразования и кэш-память по 32-битной шине адреса. Устройство страничного преобразования превращает линейные адреса в физические, которые направляются в кэш-память по 20-битной шине.
2.АРХИТЕКТУРА РЕАЛЬНОГО РЕЖИМА РАБОТЫ М/П СЕМЕЙСТВА 8086
Форматы данных микропроцессора
Числа
Микропроцессор работает с двоичными числами со знаком и без знака, длиной 8 бит (1 байт), 16 бит (2 байта) или 32 бита (4 байта), с двоично-десятичными числами длиной 8 бит (BCD - числа) и с десятичными числами длиной 8 бит.
Байт - это число без знака в диапазоне от 0 до 255 или число со знаком в диапазоне от - 128 до +127.
Слово - это число без знака в диапазоне от 0 до 65535 или число со знаком, то от - 32768 до +32767.
Для 32-разрядных процессоров определены операции над двойными словами. Двойное слово - это число без знака в диапазоне от 0 до 4294967295, или число со знаком в диапазоне от -2147483648 до +2147483647.
Для чисел со знаком старший бит является знаковым: для положительных чисел он равен нулю, а для отрицательных чисел - единице.
Отрицательные числа представлены в дополнительном коде, который получается путем инвертирования всех разрядов положительного числа и суммирования полученного кода с единицей в младшем разряде.
Микропроцессор может выполнять арифметические операции над двоично-десятичными числами, хранящимися в упакованном (2 цифры в байте) формате, и над десятичными числами в неупакованном (1 цифра в байте) формате. Упакованный формат предполагает, что байт содержит две десятичные цифры, занимающие старший и младший полубайты. Диапазон представимых чисел составляет от 0 до 99. В неупакованном формате байт содержит одну десятичную цифру, которая обычно кодируется в символьном коде ASCII. Цифра 0 код ируется как 30Н, а цифра 9 - как 39Н.
Символы
Символьные данные хранятся в стандартном символьном коде ASCII, каждый символ занимает 1 байт. Микропроцессор ничего не знает об ASCII-коде и рассматривает символьные данные как цепочки произвольных байтов, то есть последовательность кодов символов.
Указатели
Далекий (FAR) межсегментный указатель применяется в тех случаях, когда программа осуществляет передачу управления в другой сегмент. Такой указатель…
Цепочки
Микропроцессоры семейства 8086 могут оперировать цепочками(строками) байт, слов и двойных слов (32-разрядные процессоры). Под цепочкой понимается последовательность взаимосвязанных элементов, хранящихся по соседним адресам. Длина цепочки не может превышать длину сегмента. Система команд процессора имеет набор цепочечных примитивов, позволяющих эффективно работать с цепочками.
Адресация памяти
Физический адрес образуется с помощью объединения 16 разрядного адреса сегмента и 16 разрядного смещения. Если адрес сегмента сдвинуть влево на 4… 2.3.Внутренние регистры процессора
2.3.1.Регистры общего назначения
Команды PUSH и POP .
! Стек растет по направлению уменьшения адресов !
PUSH начинается с уменьшения содержимого SP на 2, а команда POP завершается… Операндами команд PUSH и POP могут быть сегментный регистр, несегментный (шестнадцатиразрядный) регистр или слово в…
Адресные команды (пересылки адреса)
LEA - загрузить смещение в регистр. Форматы команды:
LEA
LDS -загрузить полный адрес в DS и регистр;
Флажковые команды (команды пересылки флагов).
Команды LAHF (загрузить флаги в AH) и SAHF (запомнить AH во флагах). LAHF передает 5 флагов SF, ZF, AF, PF и CF в определенные биты регистра AH, а… Рисунок 2.1. Соответствие флагов разрядам регистра AH.
Эти флаги выделены потому, что они были в микропроцессоре 8080. LAHF и SAHF предусмотрены в основном, для…
Команды вычитания.
Команда CMP аналогична команде SUB, но результат не запоминается в приемнике, а устанавливаются только флаги в соответствии с результатом. CMP - это… Таблица 2.7. Состояние регистра флагов после выполнения команды CMP
…
Команды умножения и деления.
При умножении двух байтов командой MUL произведение будет находиться в… Команда деления DIV делит 16-битовое число из регистра AX (или 32-битное число из регистров DX и AX, или 64-битное…
Команды расширения знака.
Новые команды расширения знака
Начиная с микропроцессора 80386, существуют еще две команды расширения знака… 2.5.2.5.Десятичная арифметика.
Команды циклических сдвигов.
Примеры команд приведены в таблице 2.11.
Таблица 2.11. Примеры команд циклических сдвигов.
Операнд
… КОП: SHR, SHL, SAL, SAR, ROR, ROL, RCR, RCL.
Команды двойного сдвига
SHLD, SHRD reg/ mem 16, reg, imn
SHLD, SHRD reg/ mem 32, reg, imn, где
imn - непосредственное значение, которое определяет число сдвигов.
Команды SetCondition
SETCC reg/ mem 8- если условияСС удовлетворяется, то в байт- операнд помещается код 01H, иначе - код 00Н.
Команды управления циклами.
Команды управления циклами обеспечивают передачи управления при организации циклов. У микропроцессора регистр СX…
Команды пересылки цепочки.
Дополнительные команды:
MOVSB
MOVSW
Команды сканирования цепочек.
Формат основной команды: SCAS цепочка-приёмник.
Дополнительные команды:
SCASB,
Команды загрузки.
Формат основной команды: LODS цепочка-источник.
Дополнительные команды:
LODSB,
Команды ввода и вывода цепочек.
INSB,
INSW,
INSD,
Замена сегмента.
LEA SI, ES : H1; копирует байт из строки H1 в строку H2. Обе строки в дополнительном сегменте
LEA DI, H2
MOVSB
Команды управления флагами.
Таблица 2.16. Перечень команд управления процессором.
Мнемоника
Описание
CLC сбросить флаг переноса
0 à… CLI микропроцессор игнорируют маскируемые прерывания, но обрабатывает…
Команды синхронизации.
В частности, когда основной процессор встречает специальную команду ESC, он передает ее на исполнение сопроцессору. Команда ESC показывает, какую… Если в многопроцессорной системе возникает проблема разделения общей памяти,…
Команда холостого хода.
Команда NOP (нет операции) - не выполняет никакой операции, она только увеличивает значение указателя команд IP. Эта команда находит много применений: удобна при тестировании в качестве точки останова трассировки, используется для организации задержки и так далее.
Команды прерываний.
Когда внешнее устройство формирует сигнал на входе NMI, процессор прекращает свои действия (но не в середине команды) и реагирует на прерывание. По… Если катастрофических событий нет, внешнее устройство может прервать процессор… Кроме сигнала на входе INTR внешнее устройство должно сообщить процессору причину прерывания. По запросу процессора…
ДИРЕКТИВЫ И ОПЕРАТОРЫ АССЕМБЛЕРА
Каждая программа на языке ассемблера помимо команд процессора содержит еще и специальные инструкции, указывающие самому ассемблеру, как организовать специальные секции программы, где располагаются данные, а где команды, позволяющие выбирать тип системы команд, налаживать связи между процедурами и так далее. Разные ассемблеры используют разные наборы директив, но TASM и MASM (два самых популярных ассемблера для DOS и Windows) поддерживают общий набор директив. Все дальнейшие примеры директив приведены для этих ассемблеров (точнее, TASM поддерживает набор директив MASM наряду с собственным набором директив Ideal Mode).
Структура программы
Метка команда/директива операнды; комментарий.
Все поля необязательны. Метка может быть любой комбинацией букв английского… Большие и маленькие буква по умолчанию не распознаются, но различие можно включить при помощи опций при вызове…
Организация программы.
Модели памяти
model модель, язык, модификатор, где модель – одно из следующих слов:
TINY – код, данные и стек размещаются в одном и том же сегменте размером до 64… SMALL – код размещается в одном сегменте, а данные и стек – в другом (для их описания могут применяться разные…
Процедуры
Метка proc язык тип USES регистры
…
ret
Директивы задания набора допустимых команд
По умолчанию ассемблеры используют набор команд процессора 8086 и выдают сообщения об ошибках, если выбирается команда, которую этот процессор не поддерживал. Для того чтобы ассемблер разрешил использование команд, появившихся в более новых процессорах, и команд расширений, предлагаются следующие директивы:
.8086- используется по умолчанию. Разрешены только команды 8086;
.186- разрешены команды 80186;
.286 и .286с- разрешены непривилегированные команды 80286;
.286р- разрешены все команды 80286;
.386 и .386с- разрешены непривилегированные команды 80386;
.386р- разрешены все команды 80386;
.486 и 486с- разрешены непривилегированные команды 80486;
.486р- разрешены все команды 80486;
586 и 586с- разрешены непривилегированные команды P5 (Pentium);
.586р- разрешены все команды P5 (Pentium);
.686 - разрешены непривилегированные команды P6 (Pentium Pro, Pentium II);
.686р- разрешены все команды P6 (Pentium Pro, Pentium II);
.8087 – разрешены команды арифметического сопроцессора 8087;
.287 – разрешены команды арифметического сопроцессора 80287;
.387 – разрешены команды арифметического сопроцессора 80387;
.487 – разрешены команды FPU 80486;
.587 – разрешены команды FPU 80586;
.MMX – разрешены команды IA MM;
.K3D – разрешены команды AMD 3D;
Если присутствует директива .386 и выше, ассемблер TASM определяет все сегменты как 32-битные при условии, что директива указана перед директивой .model.
Примеры использования директив в программах типа .EXE и .COM.
; Файл с текстом программы hello-1.asm
; Выводит на экран сообщение ‘Hello World!’ и завершается.
; Генерируется исполняемый модуль типа .EXE при помощи вызова ассемблера TASM и редактора TLINK:
; tasm hello-1.asm
; tlink hello-1.obj
.model small ; Модель памяти, используемая для EXE
.stack 100h ; Сегмент стека размером в 256 байт.
.data
message db 'Hello World!',0Dh,0Ah,'$'
.code
start: mov ax, @data ; Настройка сегментного регистра
mov ds,ax ; ds на начало сегмента данных.
mov dx,offset message
mov ah,9
int 21h ; Вызов функции DOS для вывода строки.
mov ax,4C00h
int 21h ; Вызов функции DOS для завершения программы.
end start
; Файл с текстом программы hello-2.asm
; Выводит на экран сообщение ‘Hello World!’ и завершается.
; Генерируется исполняемый модуль типа .COM при помощи вызова ассемблера TASM и редактора TLINK:
; tasm hello-2.asm
; tlink /t hello-2.obj
.model tiny ; Модель памяти, используемая для .COM
.code ; Начало сегмента кодов
org 100h ; Начальное значение программного счетчика
; внутренней переменной ассемблера, равная
;смещению относительно начала сегмеента - 100h
jmp start ; Переход на начало программы
message db 'Hello World!',0Dh,0Ah,'$' ; Строка для вывода
start: mov ah,9 ; Номер функции DOS - в AH
mov dx,offset message ; Смещение адреса строки - в DX
int 21h ; Вызов системной функции DOS
ret ; Завершение COM- программы
end start ; Конец текста программы.
АРХИТЕКТУРА И СИСТЕМА КОМАНД АРИФМЕТИЧЕСКОГО СОПРОЦЕССОРА
Первый из семейства – это восьмиразрядный сопроцессор 8087, затем появились шестнадцатиразрядные модели 80287 и 80387. Сопроцессор 80387 - имеет…
Форматы чисел сопроцессора
Сопроцессор поддерживает представление чисел в следующих форматах: целые двоичные, целые двоично-десятичные и вещественные двоичные числа.
Целые числа
1. Целое слово - 16 бит (DW);
2. Короткое целое слово - 32 бита (DD);
3. Длинное целое слово - 64 бита (DQ);
Вещественные числа
1. Короткое вещественное (одинарная точность) -32 бита (DD);
1 бит
8 бит
23 бита
S
порядок
… 2. Длинное вещественное (двойная точность) - 64 бита (DQ);
1 бит
… 3. Временное вещественное (расширенная точность) - 80 бит (DT);
1 бит
15 бит
64 бита
…
Диапазоны вещественных чисел в х87.
Единица подразумевается в старшем разряде мантиссы для чисел в формате с одинарной и двойной точностью. Дивпазоны представлеения десятичных чисел в… а) с одинарной точностью:
-3.37*1038 / -1.17*10-37
Особые случаи вещественной арифметики
Формирование специальных значений в особых случаях
Случай неточного результата.
в направлении к 0 (обычно для целочисленной арифметики);
Численное антипереполнение.
Пример :
Знак
Порядок
Старший бит мантиссы
Мантисса – 23 бита
… Точность минимального числа равна 1 биту, то есть происходит потеря точности… На числовой оси плотность представимых чисел выше у нуля и ниже у максимальных значений.
Денормализованный операнд.
Результат равен 0, если он слишком мал для представления денормализованным числом (например, при умножении двух денормализованных чисел).
Результат - денормализованное число, если он представим в формате… Результат - нормализованное число, если неточность денормализованного числа влияет на результат меньше, чем ошибка…
Деление на ноль.
Если x - конечное положительное число, не равное нулю, то разрешены следующие операции с бесконечностью:
1) x : + 0 = + ¥ - x : + 0 = - ¥ x : - 0 = - ¥ - x : - 0 = +… 2) x : + ¥ = + 0 - x : + ¥ = - 0 x : - ¥ = - 0 - x : -¥ = +0
Численное переполнение.
Пример: деление большого числа на малое число (близкое к 0). Знак результата будет зависеть от знака малого числа, хотя он может быть неверным в… Специальное значение формируется в зависимости от режима округления,… 1) если установлен режим округления к ближайшему числу - то результат- плюс или минус бесконечность;
Регистры математического сопроцессора.
Численные регистры (регистровый стек).
ST
R0
… Числовой стек имеет кольцевую организацию. Если стек заполнен полностью, то…
Регистр управления (cw)
PC - поле управления точностью:
11 - расширенная точность (по умолчанию);
Регистр состояния.
Флаги (0-6 биты):
IE - недействительная операция;
DE - денормализованный операнд;
Регистр тэгов (признаков).
00 – в регистре действительное число (любое конечное число , не равное нулю, ненормализованное число считается действительным в 80287);
01 – нуль;
10 - недействительное число (нечисло, бесконечность, денормализованное число или ненормализованное число в 80387 и…
Указатели особого случая.
Система команд арифметического сопроцессора.
Команды передачи данных.
КОМАНДЫ ИЗВЛЕЧЕНИЯ - все команды однооперандные, извлекают содержимое вершины стека и запоминают его в операнд-приемник. При этом содержимое вершины… КОМАНДЫ КОПИРОВАНИЯ - все команды однооперандные, копируют содержимое вершины… КОМАНДА ОБМЕНА - однооперандная команда, предназначена для обмена содержимого вершины стека и другого численного…
Арифметические команды
Для всех арифметических команд существуют обычные (прямые) формы команд: FADD, FSUB, FMUL, FDIV , а для команд вычитания и деления существуют ещё и… Для обратных форм команд выполняется следующая схема:
источник - приемник=приемник или источник / приемник = приемник. Для прямых команд уменьшаемое или делимое берется из…
Дополнительные арифметические команды
FSCALE: . Если ST(1) не целое и больше 1 по абсолютной величине, то берется ближайшее меньшее целое, если ST(1) меньше 1 или находится вне… FXTRACT: разлагает ST(0) на два числа с плавающей точкой: несмещенный порядок… FRNDINT: округляет ST(0) до целого числа в формате с плавающей точкой согласно полю RC регистра состояния.
Команды сравнений
FCOM X сравнивает содержимое ST(0) с операндом X и устанавливает следующие коды условия :
Условие сравнения
С3
С2
С0
… Х- численный регистр, или число в памяти одинарной или двойной точности. Указатель вершины стека - не изменяется.
Трансцендентные команды
Для модели математического сопроцессора 80287 аргумент команды FPTAN должен быть нормализован; денормализованные и ненормализованные числа,… FPATAN - вычисляет ST(0)=arctg (ST(1)/ST(0)). Два верхних элемента извлекаются… FYL2X - вычисляет функцию ST(0) = ST(1)*log2ST(0). Два операнда извлекаются из стека, а затем результат включается в…
Административные команды
FNSTCW (FSTCW) - содержимое регистра управления записывается в ячейку памяти, указанную в качестве операнда.
FLDCW - загружает регистр управления из ячейки памяти, указанной в качестве… Эти команды применяются для изменения режима работы сопроцессора (можно переопределять режим округления, управления…
Совместная работа двух процессоров в системе.
Синхронизация по командам.
Команда FWAIT не вставляется перед административными командами в мнемокоде которых есть буква N, FNXXX... Это так называемые команды без ожидания.
… Происходит это по следующей схеме (см. рисунок 1). Некоторые административные… Данными командами следует пользоваться аккуратно, так как. они не вызывают обработчика особых случаев через систему…
Синхронизация по данным.
ВАРИАНТЫ КОНТРОЛЬНЫХ РАБОТ
Контрольная работа №1
Вариант 1
Из исходного массива двузначных десятичных чисел со знаком получить два новых,… Вариант 2
Контрольная работа №2
1. Y = sin 2x + cos4 x.
2. Y = (cos 2x + sin x)/2.
3. Y = sin 2x + cos3 x.
ПРИМЕРЫ ПРОГРАММ
;Программа очистки экрана через видеобуфер
.model small
.486
.stack 100h
.code
begin: mov ax,@data
mov ds,ax
mov ax,0b800h; адрес видеобуфера текстовых режимов
mov es,ax; настройка регистра es на видеобуфер
mov di,00h; настройка регистра di на начало видеобуфера
mov ax,0700h; определение атрибутов фона и символа: черный фон , белый символ
mov cx,2000; счетчик числа выводимых символов- выводим на экран 2000 пробелов
rep stosw
mov ax,4c00h; вызов функции завершения программы
int 21h
end begin
;*****************************************************************
;Программа демонстрации суммирования элементов двух массивов целых чисел
.model small
.486
.stack 100h
.data
M1 db 1,2,3,4,5; первый исходный массив
M2 db 6,7,8,9,10;второй исходный массив
M3 db 5 dup(0); массив результата
.code
begin:mov ax,@data; настройка сегментного регистра ds
mov ds,ax; на сегмент данных
xor di,di;обнуление индексного регистра
mov cx,5;определение счетчика цикла
met: mov al,M1[di];пересылка элемента М1 в регистр
add al,M2[di];суммирование элементов массивов
mov M3[di],al;запись в память результата
inc di; увеличение индекса элемента массива
loop met; возврат на цикл
kon: mov ah,4ch
int 21h
end begin
;*****************************************************************
;Программа перекодировки символов из 16 системы счисления в ASCII или BCD код
.model small
.486
.stack 100h
.data
SH db 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh
ASCII db '0123456789abcdef'
BCD db 0,1,2,3,4,5,6,7,8,9,10h,11h,12h,13h,14h,15h
.code
begin: mov ax,@data
mov ds,ax
mov al,SH[3]; загрузка 3 элемента массива в al
mov dl,al; пересылка его в dl
lea bx,ASCII; настройка адреса массива ASCII кодов на регистр bx
xlat ; перекодировка: в al вместо 16 кода – ASCII -код
mov ch,al; сохранение его в ch
mov al,dl; восстановление 16 кода в al
lea bx,BCD; настройка регистра bx на адрес массива BCD
xlat ; перекодировка: в al вместо 16 кода – BCD -код
mov cl,al; сохранение его в cl
mov ah,4ch; завершение программы
int 21h
end begin
;****************************************************************
;Программа ввода и перевода вещественных границ интервала определения функции
.Model Small
.486
.Stack 200h
.Data
buf db 18; буфер для ввода вещественного числа
db 0; MS DOS возвращает число введенных символов
db 18 dup(0) ; максимальный размер вводимой строки
ten dw 10; константа 10
XL dq 0 ; левая граница интервала
XP dq 0 ; правая граница интервала
mes1 db 13,10,' Введите левую границу' ,13,10,'$'
mes2 db 13,10,' Введите правую границу' ,13,10,'$'
mes3 db 13,10,' Левая граница не может быть равна правой!',13,10,'$'
mes4 db 13,10,' Левая граница не может быть больше правой!',13,10,'$'
c dw 0; переменная для двоичного кода одной цифры числа
;*********************************************************
.Code
GRAN PROC; Процедура ввода и перевода вещественного числа
pusha
vvod:
mov ah, 0Ah; вызов системной функции для ввода строки
lea dx, buf
int 21h
fldz; загрузка в стек сопроцессора 0
mov si, 2; настройка si на первый символ введенной строки в буфере
cmp buf[si],'-'; первый символ - минус?
je M1; да – переход на M1
cmp buf[si],'+'; первый символ – плюс?
jne M2; если нет – то переход на M2
M1: inc si; переход к следующему символу в строке
M2: cmp buf[si],'.'; очередной символ – десятичная точка
je Drob; если да – то переход на обработку дробной части
cmp buf[si],0dh ; иначе – сравнение с кодом клавиши Enter – признак конца строки
je Kon_enter; если да – то переход на метку Kon_enter
cmp buf[si],'0'; иначе – проверка: символ это цифра?
jb vvod; если код символа меньше кода нуля – то повторный ввод
cmp buf[si],'9';
ja vvod; если код символа больше кода девяти – то повторный ввод
mov al,buf[si]; если цифра – то загрузить ее код в al
sub al,'0'; перевод кода символа цифры в двоичный код
xor ah,ah; обнуление регистра
mov c, ax; сохранение двоичного кода цифры
fimul ten; умножение числа в вершине стека на 10
fild c; загрузка кода цифры в вершину стека
fadd; сложение с предыдущей частью числа
inc si
jmp M2; переход к следующему символу в целой части числа
Drob:; обработка дробной части
fldz
xor bx,bx
mov bl,buf[1]; загрузка в bx числа введенных символов
mov si,bx; настройка si на последний символ
inc si
L1:; цикл обработки дробной части
mov al,buf[si]
cmp al,'.'; сравнение с кодом десятичной точки
je Kon_drob; если точка – то завершение обработки дробной части
cmp buf[si],'0'; проверка кода символа на цифры
jb vvod
cmp buf[si],'9'
ja vvod
sub al,'0'; перевод в двоичный код
xor ah,ah
mov c, ax; сохранение двоичного кода цифры
fild c; загрузка кода цифры в вершину стека
fadd; сложение с предыдущей дробной частью числа
fidiv ten; деление на 10
dec si
jmp L1; переход к следующей цифре
Kon_drob: fadd; сложение целой и дробной частей числа
Kon_enter:
cmp buf[2],'-'; определение отрицательного числа
jne Kon; если число положительное – то на метку Kon
fchs; иначе – инвертировать число в вершине стека
Kon:
popa
ret
GRAN endp
;*******************************************
Start:; начало основной программы
mov ax,@data
mov ds,ax
repeat:
finit; инициализация сопроцессора
mov ah,9; вывод первого сообщения
lea dx,mes1
int 21h
Call GRAN
fst XL; сохранение левой границы интервала
mov ah,9; вывод второго сообщения
lea dx,mes2
int 21h
Call GRAN
fst XP; сохранение правой границы интервала
fcom; сравнение левой и правой границ
fstsw ax; передача кодов условия в ЦП
fwait
sahf
je ravno; если границы равны – то ошибка
jb menshe; если правая граница меньше левой – то ошибка
jmp end_progr; если границы введены верно – то выход из программы
ravno:
mov ah,9
lea dx,mes3
int 21h
jmp repeat
menshe:
mov ah,9
lea dx,mes4
int 21h
jmp repeat
end_progr:
mov ah,4ch
int 21h
End Start
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
1. Григорьев В.Г. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). Книга 1. Программная архитектура. - М., ГРАНАЛ, 1993. - с.346, ил.87.
2. Григорьев В.Г. Микропроцессор i486. Архитектура и программирование (в 4-х книгах). Книга 2. Аппаратная архитектура. Книга 3. Устройство с плавающей точкой. Книга 4. Справочник по системе команд. - М., ГРАНАЛ, 1993. - с.382, ил.54.
3. Юров В. Assembler, -СПб: Питер, 2001, - 624 с.
4. Зубков С.В. Assembler для Dos, Windows и UNIX. 2 – е изд., испр. и доп. – М., ДМК, 2000. – 608 с.