
- •Основы алгоритмизации и программирования
- •29 Декабря 2011, протокол № 4
- •Введение
- •Этапы развития эвм
- •Поколения эвм
- •Машинно-ориентированные языки программирования
- •Архитектура эвм
- •Микропроцессоры intel
- •Набор регистров
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Организация памяти
- •Сегментная организация памяти
- •Типы данных
- •Символы
- •Целые числа
- •Указатель на память
- •Цепочки
- •Вещественые числа
- •Двоично-десятичные числа (bcd)
- •Формат команд
- •Обработка прерываний
- •Int тип_прерывания
- •Синтаксис ассемблера
- •Алфавит ассемблера
- •Директивы сегментации
- •Упрощённые директивы сегментации
- •Директивы резервирования и инициализации данных
- •Операнды
- •Способы задания операндов Прямая адресация
- •Косвенная адресация
- •Косвенная базовая адресация
- •Косвенная базовая адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресация
- •Косвенная базовая индексная адресация со смещением
- •Операторы
- •Функциональная классификация машинных команд
- •Команды пересылки данных Команды общего назначения
- •Работа с адресами и указателями
- •Преобразование данных
- •Xlat [адрес_таблицы_перекодировки]
- •Ввод из порта и вывод в порт
- •Работа со стеком
- •Арифметические команды Форматы арифметических данных
- •Арифметические операции над целыми двоичными числами
- •Логические команды
- •Команды передачи управления
- •Команда безусловного перехода
- •Условные переходы
- •Организация циклов
- •Основы алгоритмизации и программирования
Организация памяти
Физическая память, к которой микропроцессор имеет доступ по шине адреса, называется оперативной памятью (ОЗУ). Оперативную память физически выполнена в виде микросхем и предназначена для временного хранения программ и данных. Оперативная память организована как последовательность ячеек – байтов. Каждому байту соответствует свой уникальный адрес (его номер), называемый физическим.
Сегментная организация памяти
В архитектуру процессора i8086/i8088 была заложена идея сегментной организации памяти, которая сохранилась с появлением новых моделей процессоров. Изменялись только адресуемые размеры сегментов. Например, в ОС MS-DOS размер сегмента не мог превышать 64 Кб, т.к. система базировалась на 16-разрядных процессорах и смещение (в регистрах IP и SP) не могло превышать 216-1=65535. Диапазон изменения фозического адреса – до 1Мбайта, это определялось тем, что шина адреса i8086 имела 20 разрядов.
Под сегментом понимается блок смежных ячеек памяти, максимальным размером 64 Кбайт и начальным или базовым адресом, находящимся на 16-байтной границе (такая граница называется параграфом).
Для обращения к памяти необходимо определить базу сегмента (адрес его начала) и 16-битное расстояние от базы, называемое смещением (offset) или относительным адресом. Таким образом, 20-разрядный физический адрес состоит из двух 16-разрядных логических адресов: адрес базы (сегмента) и смещения (эффективного адреса).
CS |
: |
IP |
96AF |
: |
E305 |
DS |
: |
00FD |
|
|
|
сегмент |
|
смещение |
Рисунок 6. Логические адреса
При загрузке выполняемой программы в память операционная система инициализирует, как правило, три сегментных регистра: CS, DS, SS. В них и находятся базовые адреса доступных программе сегментов. Исполнительный адрес любой ячейки вычисляется процессором путём сложения этого адреса, умноженного на 16, со смещением.
|
ОЗУ |
Адрес |
|
|
… |
|
|
CS |
Команда |
3DA00 |
Начало сегмента кода |
|
… |
|
|
|
Команда |
CS+IP |
Исполняемая команда |
|
… |
|
|
|
Команда |
CS+FFFF |
Конец сегмента кода (max) |
|
… |
|
|
DS |
Данное |
79F20 |
Начало сегмента данных |
|
… |
|
|
|
Данное |
DS+A |
Адрес переменной А |
|
… |
|
|
|
Данное |
DS+FFFF |
Конец сегмента данных (max) |
|
… |
|
|
|
Данное |
SS-FFFF |
Конец сегмента стека (max) |
|
… |
|
|
|
Данное |
SS-SP |
Вершина стека |
|
… |
|
|
SS |
Данное |
80AB0 |
Начало сегмента стека |
|
… |
|
|
|
|
FFFFF |
Конец ОЗУ |
Рисунок 7. Структура сегментной организации памяти процессоров i8086
Например, как процессор узнаёт, по какому адресу расположена нужная для выполнения команда? Для этого есть содержимое регистров CS:IP. Процессор выставляет на шину адреса 16- разрядное значение регистра CS и выполняе сдвиг влево на 4 бита (что равноценно умножению на 16) и складывает полученное значение с содержимым регистра IP. Если <CS>=3DA0h и <IP>=11FAh, то:
3DA00 h
+ 11FA h
3EBFA h – физический исполнительный адрес команды.