- •В. Г. Баула Введение в архитектуру эвм и системы программирования
- •Предисловие
- •1. Понятие об архитектуре эвм
- •2. Машина Фон Неймана
- •2.1. Память
- •2.2. Устройство Управления
- •2.3. Арифметико–Логическое Устройство
- •2.4. Взаимодействие уу и алу
- •3. Учебная машина
- •3.1. Схема выполнения команд
- •3.2. Примеры программ для учебной машины.
- •3.2.1. Пример 1. Оператор присваивания.
- •3.2.2. Пример 2. Условный оператор.
- •3.2.3. Пример 3. Реализация цикла.
- •3.2.4. Пример 4. Работа с массивами.
- •3.3. Формальное описание учебной машины
- •4. Введение в архитектуру эвм
- •4.1. Адресность эвм
- •4.2. Сравнительный анализ эвм различной адресности
- •4.3. Дробно-адресная архитектура
- •4.4. Способы адресации
- •4.5. Многообразие форматов данных
- •4.6. Форматы команд
- •4.7. Базирование адресов
- •5. Понятие семейства эвм
- •6. Архитектура младшей модели семейства Intel
- •6.1. Память
- •6.2. Форматы данных
- •6.3. Вещественные числа
- •6.4. Целые числа
- •6.5. Сегментация памяти
- •6.6. Мнемонические обозначения регистров
- •6.7. Структура команд
- •6.8. Команды языка машины
- •6.8.1. Команды пересылки
- •6.8.2. Арифметические команды
- •7. Язык Ассемблера
- •7.1. Понятие о языке Ассемблера
- •7.2. Применение языка Ассемблера
- •7.3. Классификация предложений языка Ассемблер
- •7.4. Пример полной программы на Ассемблере
- •7.5. Переходы
- •7.6. Команды переходов
- •7.6.1. Команды безусловного перехода
- •7.6.2. Команды условного перехода
- •7.6.3. Команды цикла
- •7.7. Работа со стеком
- •7.8. Команды вызова процедуры и возврата из процедуры
- •7.9. Программирование процедур на Ассемблере
- •7.9.1. Стандартные соглашения о связях
- •8. Система прерываний.
- •9. Дополнительные возможности Ассемблера.
- •9.1. Строковые команды.
- •9.2. Логические команды.
- •9.3. Команды сдвига.
- •10. Модульное программирование
- •10.1. Модульное программирование на Ассемблере.
- •10.2. Схема работы редактора внешних связей.
- •10.3. Схема работы статического загрузчика.
- •10.4. Схема работы динамического загрузчика.
- •11. Понятие о системе программирования.
- •11.1. Компоненты системы программирования.
- •11.2. Характеристики исполняемых модулей.
- •11.2.1. Перемещаемые модули.
- •11.2.2. Повторно-выполняемые модули.
- •11.2.3. Повторно-входимые (реентерабельные) модули.
- •12. Макросредства языка Ассемблер.
- •12.1. Сравнение процедур и макроопределений.
- •13. Схема работы транслятора с языка Ассемблера.
- •14. Понятие о мультипрограммном режиме работы.
- •14.1. Требования к аппаратуре для обеспечения возможности работы в мультипрограммном режиме.
- •14.1.1. Система прерываний.
- •14.1.2. Механизм защиты памяти.
- •14.1.3. Аппарат привилегированных команд.
- •14.1.4. Таймер.
- •15. Архитектурные особенности современных эвм.
- •15.1. Конвейерные эвм.
- •15.2. Эвм различной архитектуры.
- •15.2.1. Архитектура эвм с общей шиной.
- •15.2.2. Достоинства и недостатки архитектуры с общей шиной.
- •15.2.3. Архитектура эвм с каналами ввода/вывода.
- •15.3. Уровни параллелизма.
- •Список литературы.
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байт, но из-за совместимости моделей семейства пришлось оставитьперевёрнутоепредставление чисел. Заметим, что в отличие от чисел,командыхранятся в памяти в обычном (не перевернутом) виде.