
- •Замковец с.В. Левин н.А. Попкова е.Я. Архитетура микропроцессоров
- •Удк 681.3.06
- •Классификация микропроцессоров по архитектуре
- •Архитектура микропроцессоров 80х86
- •2.1. Используемые типы данных
- •2.2. Регистры микропроцессоров
- •2.3. Режимы адресации
- •2.4. Управление стеками
- •2.5. Сегментная организация памяти
- •Система команд микропроцессоров
- •3.2.Команды передачи данных
- •Команды двоичной арифметики
- •Команды десятичной арифметики
- •Логические команды
- •Команды сдвигов
- •Команды обработки бит и байт
- •Команды обработки цепочек
- •Команды передачи управления
- •3.9.1. Команды условных переходов
- •3.9.2 Команды безусловных переходов
- •3.9.3 Команды вызова подпрограмм
- •3.9.4 Команды возврата из подпрограмм
- •4. Прерывания
- •4.1. Прерывания в реальном режиме
- •Защита по привилегиям
- •5.1. Определение уровней привилегий
- •Вычисления с плавающей запятой
- •6.1. Форматы чисел с плавающей запятой
- •6.3. Регистры сопроцессора
- •Mmx архитектура
- •7.1. Форматы представления данных
- •7.2. Арифметика с насыщением
- •7.3. Mmx регистры
- •7.4. Система команд mmx
- •1. Классификация микропроцессоров по архитектуре ... 8
- •2. Архитектура микропроцессоров 80х86 ………………...10
Архитектура микропроцессоров 80х86
2.1. Используемые типы данных
Наименьшей адресуемой единицей памяти является байт, который состоит из двух тетрад. Для удобства отображения содержимого байта для каждой из тетрад используется шестнадцатеричный код. Последовательные два байта формируют слово, которое имеет длину 16 бит, а последовательные четыре байта формируют двойное слово, состоящее из 32 бит.
Для указанных байтов, слов и двойных слов имеется следующая дополнительная интерпретация.
Байт может рассматриваться как беззнаковое число, при этом диапазон отображаемых чисел изменяется от 0 (для значения байта 00), до 255 (для значения байта FF). Байт также может рассматриваться как число со знаком, при этом отрицательные числа представляются в дополнительном коде, а признаком отрицательного числа является 1 в самом старшем разряде. Диапазон для чисел со знаком представляется для положительных чисел от 0 (для значения байта 00) до 127 (для значения байта 7F), а для отрицательных чисел от –128 (для значения байта 80) до -1 (для значения байта FF).
Байт также может рассматриваться как двоично-кодированное представление десятичного числа, при этом может быть использовано два формата такого представления. При использовании упакованного формата байт содержит две десятичные цифры – в младшей и старшей тетраде. При использовании неупакованного формата байт содержит одну десятичную цифру, расположенную в младшей тетраде. Последний тип данных, который отображается байтом – это символьный код ASCII.
Слово может также рассматриваться как 16-разрядное целое беззнаковое в диапазоне от 0 до 65535 или же как число со знаком в диапазоне для отрицательных чисел от -32768 до -1 и для положительных чисел от 0 до 32767. Двойное слово также может рассматриваться как беззнаковое целое или же как число со знаком.
Слова и двойные слова также могут быть использованы как смещения в качестве указателей при обращении к памяти.
2.2. Регистры микропроцессоров
Все регистры микропроцессоров делятся на пользовательские регистры и системные регистры. В данном разделе будут рассмотрены только пользовательские регистры, т.е. регистры, которыми могут пользоваться прикладные программисты, а системные регистры будут рассмотрены в соответствующих разделах.
Пользовательские регистры делятся на несколько групп и первую группу составляют регистры общего назначения (РОН). Восемь регистров общего назначения предназначены для хранения данных или адресов.
Набор регистров устроен таким образом, что позволяет отдельно адресовать 8 8-разрядных регистров, являющихся младшими частями 32-х разрядных регистров: AH, AL, BH, BL, CH, CL, DH и DL.
Также отдельно можно адресовать 8 16-разрядных регистров, являющихся младшими частями 32-разрядных регистров: AX, BX, CX, DX, SP, BP, SI и DI.
Наконец, можно адресовать 8 32-разрядных регистра, которые имеют тоже наименование, что и 16-разрядные регистры, только перед наименованием регистра имеется буква Е. Старшие половины этих регистров адресовать нельзя. Все регистры общего назначения могут одинаково использоваться в командах обработки данных и в различных режимах адресации. Однако каждый регистр выполняет и свои специфические функции, которые выполняются по умолчанию, т.е. в явном виде регистры не указываются в командах микропроцессора, однако при выполнении определенной команды эти регистры используются.
Регистр ESP используется в качестве указателя вершины стека и при помощи этого регистра осуществляются все операции со стеком.
Вторая группа пользовательских регистров состоит из 6 16-разрядных сегментных регистра, которые содержат селекторы сегментов, используемые для различных форм обращения к памяти, т.е. для реализации функций Fcc и Fcd . Эти регистры определяют текущие сегменты памяти, которые являются совокупностью смежных ячеек памяти, предназначенных для определенных целей.
Сегментный регистр кода CS определяет сегмент, который содержит набор команд, образующих собственно программу.
Сегментный регистр стека SS определяет текущий сегмент стека, т.е. ту область памяти, в которой выполняются все стековые операции.
Сегментный регистр данных DS определяет сегмент, который содержит все данные, относящиеся к выполняемой программе. Дополнительные сегментные регистры ES, FS и GS предназначены для задания еще трех сегментов данных, которыми может пользоваться выполняемая программа.
Селекторы сегментов используются для определения базового адреса сегмента, а для адресации команд или данных к этому базовому адресу прибавляется смещение, которое рассчитывается при помощи режимов адресации. Определение базовых адресов в различных режимах работы микропроцессора осуществляется по-разному и будет рассмотрено ниже.
Регистр указателя команд EIP/IP предназначен для адресации команд внутри текущего сегмента кода. К окончанию выборки текущей команды из памяти в регистре указателя команд образуется адрес следующей по порядку команды. Модификация этого регистра осуществляется только при выполнении команд передачи управления.
Последний из регистров пользовательской группы – это регистр флагов EFLAGS/FLAGS, который содержит флаги, подразделяющиеся на флаги состояния и флаги управления. Каждый флаг является одним разрядом в регистре флагов. Флаги состояния сообщают об особенностях результата команд обработки данных. К этим флагам относятся следующие.
Флаг переноса CF устанавливается в состояние 1, если арифметическая команда вызвала перенос (при сложении) или заем (при вычитании) из старшего разряда результата; в противном случае этот флаг устанавливается в 0.
Флаг паритета PF устанавливается в 1, если в младшем байте результата содержится четное количество единичных разрядов; в противном случае этот флаг устанавливается в 0. Необходимо отметить, что если младший байт результата содержит все 0, то в этом случае флаг паритета также устанавливается в 1.
Флаг вспомогательного переноса AF устанавливается в 1, если при выполнении арифметической операции возник перенос (при сложении) или заем (при вычитании) между 3 и 4 разрядами результата. Этот флаг используется при выполнении команд десятичной арифметики.
Флаг нулевого результата ZF устанавливается в 1, когда результат выполнения команды равен 0.
Флаг знака SF устанавливается в то же состояние, в каком находится старший разряд результата.
Флаг переполнения разрядной сетки OF устанавливается в 1, если при выполнении арифметических команд со знаковыми операндами результат превышает диапазон представимых чисел. Алгоритм формирования этого флага следующий: флаг устанавливается в 1 если есть перенос в старший разряд результата и нет переноса из этого разряда, или же есть перенос из старшего разряда, но нет переноса в старший разряд.
Остальные флаги будут рассмотрены в соответствующих разделах.