Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баула.doc
Скачиваний:
112
Добавлен:
28.05.2015
Размер:
1.82 Mб
Скачать

6.5. Сегментация памяти

Память нашей ЭВМ имеет уже знакомую нам сегментную организацию. В любой момент времени для младшей модели определены четыре сегмента (хотя для старших моделей число сегментов может быть и больше). Это означает, что есть четыре сегментныхрегистра, которые указывают на определённые области памяти. Каждый сегментный регистр имеет длину 16 разрядов, поэтому для того, чтобы сегмент мог располагаться на любом месте оперативной памяти, адрес начала сегмента получается после умножения значения сегментного регистра на число 16. Правда, при таком способе задания начала сегмента, он может начинаться не с любого места оперативной памяти, а только с адресов, кратных 16.

Итак, извлекать из памяти числа или команды можно только относительно одного из них этих сегментных регистров. Таким образом, физический адрес числа или команды вычисляется по формуле

Aфиз := (SR*16 + A)mod 220,

гдеSR– значение сегментного регистра, аA–смещение. Физический адрес берётся по модулю220, чтобы он не вышел за максимальный адрес памяти.

В качестве мнемонических обозначений сегментных регистров выбраны следующие двухбуквенные служебные1имена: кодовый сегментный регистр (CS), сегментный регистр данных (DS), сегментный регистр стека (SS) и дополнительный сегментный регистр (ES). Каждый из них может адресовать сегмент памяти длиной от1до216байт (напомним, что вся память состоит из220ячеек). Так как физический адрес в приведённой выше формуле берётся по модулю220, то очевидно, что память "замкнута в кольцо". Таким образом, в одном сегменте могут находиться ячейки с самыми большими и самыми маленькими адресами основной памяти.На рис. 6.1 показан пример расположения сегментов в памяти.

Стоит отметить, что сегментные регистры являются специализированными, предназначенными только для хранения адресов сегментов, поэтому арифметические операции над их содержимым не предусмотрены.

Заметим, что даже если все сегменты не перекрываются и имеют максимальный размер, то и в этом случае центральный процессор в каждый момент времени имеет доступ только к одной четвёртой от общего объёма оперативной памяти.

6.6. Мнемонические обозначения регистров

В силу того, что в ЭВМ все регистры имеют безликие двоичные обозначения, программисты предпочитают использовать мнемонические названия регистров. Регистры общего назначения, каждый из которых может складывать, вычитать и просто хранить данные, а некоторые – умножать и делить, обозначают следующими именами: AX,BX,CX,DX. Для обеспечения многообразия форматов данных каждый из них разбит на две части по8бит каждая (биты нумеруются немного непривычно справа налево, начиная с нуля):

15

7

0

AX

AH

AL

BX

BH

BL

CX

CH

CL

DX

DH

DL

16 бит

Каждый из регистров AH,AL,BH,BL,CH,CL,DHиDLможет быть использован как самостоятельный регистр, на которых возможно выполнять операции сложения и вычитания.

Существуют также четыре регистра SI,DI,SPиBP, которые также могут использоваться для проведения сложения и вычитания, но уже не делятся на половинки:

15 0

SI

DI

SP

BP

16 бит

В основном эти четыре регистра используются как индексные, т.е. на них храниться положение конкретного элемента в некотором массиве.

Кроме перечисленных выше регистров программист имеет дело с регистром IP(instructionpointer), который называется счётчиком адреса и содержит адрес следующей исполняемой команды (точнее, содержитсмещениеотносительно начала кодового сегмента, адрес начала этого сегмента, как мы уже знаем, равен значению сегментного регистраCS,умноженному на16).

16 бит

IP

И, наконец, как уже упоминалось, архитектурой изучаемой ЭВМ предусмотрен регистр флагов FLAGS. Он содержит шестнадцать одноразрядных флагов, например, ранее упоминавшиеся флагиCFиOF. Конкретные номера битов, содержащих тот или иной флаг, для понимания архитектуры несущественны, и приводиться здесь не будут.

16 бит

FLAGS

CF

OF

Все биты в регистрах пронумерованы справа налево: в шестнадцатибитных – от 0до15, в восьмибитных – от0до7.

Все упомянутые имена регистров являются служебными в языке Ассемблера. Как и в языке Паскаль, в языке Ассемблера принято соглашение по синтаксису имён: регистр символов не различается, таким образом, AX,Ax,aX иax обозначаютодин и тот жерегистр.

Рассмотрим теперь способ хранения чисел в памяти ЭВМ. Запишем, например, шестнадцатеричное число 1234hв какой-нибудь 16-тиразрядный регистр (каждая шестнадцатиричная цифра занимает по 4 бита):

1

2

3

4

Теперь поместим это число в память в ячейки с номерами, например, 100и101. Так вот: в ячейку с номером100запишется число34h, а в ячейку101– число12h. Говорят, что число представлено в основной памяти (в отличие от регистров) вперевёрнутомвиде. Это связано с тем, что в младших моделях ЭВМ при каждом обращении к памяти читался один байт. Чтобы считать слово, было необходимо дважды обратиться к памяти, поэтому было удобно (например, для проведения операция сложения "в столбик") получать сначала младшие цифры числа, а затем – старшие. В современной архитектуре за одно обращение из памяти получают сразу4,8или16байт, но из-за совместимости моделей семейства пришлось оставитьперевёрнутоепредставление чисел. Заметим, что в отличие от чисел,командыхранятся в памяти в обычном (не перевернутом) виде.