Попов И.И., Матвеев А.А., Максимов Н.В. Архитектура электронно-вычислительных машин и систем (2004) (1186255), страница 89
Текст из файла (страница 89)
Этот режим реализуется в рамках защищённогорежима (процессор может переключиться в виртуальный режим толькоиз защищённого режима). В виртуальном режиме процессор способенвыполнять программы, составленные для процессора i8086, находясь взащищённом режиме и используя аппаратные средства защищённогорежима: мультизадачность, изолирование адресных пространствотдельных задач друг от друга, страничная виртуальная память.Представление данных, система команд реального режимапроцессоров i80x86.
Интерпретация в терминах Ассемблера (MASM)Рассмотрим основные принципы функционирования процессоровi80x86 в реальном режиме.Реальный режим процессоров 80x86 — это режим генерированияадресов, используемый процессором 8086. В этом режиме не можетбыть использована виртуальная память. Можно адресовать лишь до 1Мбайт (220 байт) оперативной памяти, так у процессора 8086 20разрядная шина адреса. Так как все регистры процессора 8086 являются16-разрядными, для представления 20-разряднрго физического адресапамяти используется содержимое нескольких 16-разрядных регистров.Оперативную память при работе в этом режиме можно разбить налогические блоки по 64 Кбайт, называемые сегментами, причем каждыйсегмент может начинаться с адреса, кратного 16 байт.
Таким образом,первый сегмент имеет начальный адрес 0, второй находится по адресу16 (или 10 в 16-тиричной системе) и т.д. Несколько близкорасположенных сегментов могут перекрываться. Это удобно приорганизации совместного доступа к командам и данным разнымипрограммами. Доступ к каждой ячейке в памяти происходит путемуказания значения регистра сегмента (см. ниже), определяющего блокразмером 64 Кбайт и положения, или смещения, этого адреса внутриэтого блока. Микропроцессор использует четыре регистра сегмента, приэтом каждый регистр имеет размер, равный одному слову (16 бит):— регистр сегмента команд CS (Code Segment), указывающий насегмент, содержащий текущую исполняемую программу;453— регистр сегмента данных DS (Data Segment), указывающий наданные;— регистр дополнительного сегмента ES (Extra Segment), указывающийна дополнительные данные;— регистр сегмента стека SS (Stack Segment), указывающий на стек.У процессора 80386 и старше есть еще два сегментных регистра —FS и GS.Содержимое каждого из этих регистров однозначно связано сместом в памяти соответствующего сегмента.
Его адрес получаетсяприписыванием справа четырех двоичных нулей к значению сегмента,что соответствует умножению на 16 (или на 10 по основанию 16).Полученное 20-битовое значение представляет собой адрес начала (илибазовый адрес) сегмента в физической памяти. Для определенияреального адреса команды или данных процессор добавляет затемзначение смещения к базовому адресу.Например, команда, подлежащая исполнению процессором вкаждый данный момент времени, определяется из значений двухрегистров: регистра CS, значение которого, будучи умножено на 16,дает адрес начала сегмента команд и регистра указателя команд IP(Instruction Pointer), указывающего положение соответствующейкоманды относительно начала сегмента команд.В реальном режиме не существует никакого механизма защиты,так что любая программа может обратиться к произвольной ячейкепамяти в пределах 1 Мбайт, включая область экрана или областьрасположения операционной системы.
Выделим два основныхнедостатка схемы адресации памяти реального режима:454ограниченное адресное пространство (до 1 Мбайта и ещепримерно 64 Кбайта старшей области памяти для процессоров 80286 истарше);свободный доступ любых программ к любым областям данных,что представляет потенциальную опасность для целостностиоперационной системы.Описание форматов команд, данных, структуры памяти ипроцессора ниже производится с использованием ассемблерныхпредставлений. Поэтому два слова скажем о программировании наассемблере 8086.Текст исходной программы состоит из операторов ассемблера,каждый из которых занимает отдельную строку этого текста. Различаютдва типа операторов: инструкции и директивы. Первые при трансляциипреобразуются в команды процессора, которые исполняются послезагрузки в память загрузочного модуля программы, имеющегорасширение .COM или .EXE .
Операторы второго типа управляютпроцессом ассемблирования - преобразования текста исходнойпрограммы в коды объектного модуля (расширение .OBJ). Ассемблеринтерпретирует и обрабатывает операторы один за другим, генерируяпоследовательность из команд процессора и байтов данных.Общий формат оператора ассемблера имеет следующий вид:[Метка:]Код_операции[Операнд1[,Операнд2]][;Комментарий],где элементы, указанные в квадратных скобках, могутотсутствовать.Пробелы вводятся произвольно, но минимум один пробел долженбыть после кода операции.Метка - это идентификатор, присваиваемый первому байту тогооператора, в котором она появляется.Код_операции - это мнемоническое обозначение соответствующихкоманд процессора.Операнды оператора ассемблера описываются выражениями.Выражения конструируются на основе операций над числовыми итекстовыми константами, метками и идентификаторами переменных сиспользованием знаков операций и некоторых зарезервированных слов.Ниже приведены все определенные в ассемблере операции.Порядок старшинства операций от высшей к низшей:LENGTH, SIZE, WIDTH, MASK, (), [], <>.PTR, OFFSET, SEG, TYPE, THISHIGH, LOW+ (unary), - (unary)*, /, MOD, SHL, SHR+, EQ, NE, LT, LE, GT, GENOTAND455OR, XORSHORT, .TYPEСтаршинство операций определяет порядок, по которому будетвычисляться выражение.
Более старшие операции будут производитьсяраньше операций, имеющих меньшее старшинство.Примечания:Операции, стоящие в одной строке, имеют равный приоритет.Операции равного старшинства вычисляются слева направо.Операции, стоящие в скобках, выполняются первыми.Пример оператора ассемблера: l0c_1: mov ax,(DAT_1+4) SHR 4,здесь использованы следующие операции ассемблера: ( ), + и SHR.Вот примеры некоторых арифметических операторов+ Сложение (бинарное) или унарный плюсexpression1 + expression2(сложение)или+ expression(унарный плюс)Бинарный "+" суммирует значения двух выражений. Унарный "+"сохраняет знак и значение выражения.Примечания:Оператор сложения ('+') может использоваться для прибавленияцелого числа к операнду, перемещаемому в памяти.
Операндом,перемещаемым в памяти, может быть только одно из выражений. Обавыражения могут быть целыми числами.Унарная операция '+' обладает более высоким приоритетом, чемоператор сложения. Смотри 'Старшинство операций', где описанпорядок старшинства операций.- Вычитание (бинарное) или унарный минусexpression1 - expression2 (вычитание)или- expression (унарный минус).Бинарный "-" вычитает одно выражение из другого.Унарный "-"изменяет знак выражения.Примечания:Операндами оператора вычитания могут быть целые числа илиоперанды, перемещаемые в памяти.
Если оба операнда являются адресами памяти, то они должны располагаться в одном и том жесегменте.Унарная операция '-' обладает более высоким приоритетом, чемоператор вычитания. Смотри 'Старшинство операций', где описанпорядок старшинства операций.* Умножениеexpression1 * expression2 .Перемножает значения двух выражений.Примечания:456Выражения должны быть целыми числами.
Они не могут бытьадресами, перемещаемыми в памяти./ Делениеexpression1 / expression2Делит одно выражение на другое.Примечания:Выражения должны быть целыми числами. Они не могут бытьадресами, перемещаемыми в памяти.MOD Деление по модулювыражение1 MOD выражение2Выдает остаток от деления.Примечания:Оба выражения должны быть целыми числами. Они не должныбыть настраиваемыми адресами.Например, 14 MOD 4 = 2, т.к. 14 / 4 дает остаток 2.Оперативная памятьОбъем оперативной памяти I80Х86 (здесь - 8086)- 220 байтов (1Мб). Байты нумеруются начиная с 0, номер байта называется егоадресом. Для ссылок на байты памяти используются 20-разрядныеадреса: от 00000 до FFFFF (в 16-ричной системе).Байт содержит 8 разрядов (битов), каждый из которых можетпринимать значение 1 или 0.
Разряды нумеруются справа налево от 0 до7:7 6 5 4 3 2 1 0Байт - это наименьшая адресуемая ячейка памяти. В I80Х86используются и более крупные ячейки - слова и двойные слова. Слово это два соседних байта, размер слова - 16 битов (они нумеруются справаналево от 0 до 15). Адресом слова считается адрес его первого байта (сменьшим адресом); этот адрес может быть четным и нечетным.Двойное слово - это любые четыре соседних байта (два соседнихслова), размер такой ячейки - 32 бита; адресом двойного слова считаетсяадрес его первого байта.Байты используются для хранения небольших целых чисел исимволов, слова - для хранения целых чисел и адресов, двойные слова для хранения "длинных" целых чисел и т.н.
адресных пар(сегмент:смещение).РегистрыПомимо ячеек оперативной памяти для хранения данных (правда,кратковременного) можно использовать и регистры - ячейки, входящиев состав процессора и доступные из машинной программы. Доступ крегистрам осуществляется значительно быстрее, чем к ячейкам памяти,457поэтому использование регистров заметно уменьшает время выполненияпрограмм.Все регистры имеют размер слова (16 битов), за каждым из нихзакреплено определенное имя (AX, SP и т.п.).
По назначению испособу использования регистры можно разбить на следующие группы:— регистры общего назначения (AX, BX, CX, DX, BP, SI, DI, SP);— сегментные регистры (CS, DS, SS, ES);— счетчик команд (IP);— регистр флагов (Flags).Расшифровка этих названий:ABCDBPSIDISPCSDSSSESIPaccumulatorbasecounterdatabase pointersource indexdestination indexstack pointercode segmentdata segmentstack segmentextra segmentinstruction pointerаккумуляторбазасчетчикданныеуказатель базыиндекс источникаиндекс приемникауказатель стекасегмент командсегмент данныхсегмент стекадополнительный сегментсчетчик командРегистры общего назначения можно использовать во всехарифметических и логических командах.