Сегментная адресация памяти процессорами х86. Сегментация программ. Внутрисегментные адреса. (Лекция 4)

Содержание

Слайд 2

Сегментная адресация памяти процессором

Процессор «рассматривает» память, как набор блоков (сегментов)
Программно адрес

Сегментная адресация памяти процессором Процессор «рассматривает» память, как набор блоков (сегментов) Программно
памяти должен задаваться ему двумя значениями:
«указатель на сегмент памяти», в котором находится данный байт
«внутрисегментный адрес» - это смещение (в байтах) от начала сегмента до данного байта: 0,1, 2 ..
Физический адрес памяти для обращения процессор вычислит сам: по значению «указатель сегмента» определит физический адрес начала сегмента и прибавит к нему внутрисегментный адрес.

Слайд 3

Сегментация программы

Сегментная адресация памяти процессором порождает требования к структуре загружаемой ОС в

Сегментация программы Сегментная адресация памяти процессором порождает требования к структуре загружаемой ОС
память программы:
Любой программный объект, предназначенный для загрузки в память, должен быть оформлен, как один или несколько «программных» сегментов. Каждый программный сегмент будет загружаться ОС и размещаться в памяти независимо от другого.
Решение о сегментной структуре кода принимает:
Компилятор - при компиляции исходного текста в объектный код, если программа написана на ЯВУ
Автор - при написании исходного текста программы на низкоуровневом языке (ассемблере)

Слайд 4

Регистры-указатели сегментов Адрес команды, данных в памяти

Указателями сегментов памяти для процессора являются

Регистры-указатели сегментов Адрес команды, данных в памяти Указателями сегментов памяти для процессора
16-разрядные регистры:
CS - указатель на «кодовый» сегмент – сегмент с командами процессора
DS, ES SS, GS, FS – указатели для сегментов данных
Адрес команды для процессора в памяти – это всегда значения регистров:
CS : IP (или ЕIP)
Регистр IP или ЕIP – задает внутрисегментный адрес команды. Именно он автоматически увеличивается на длину прочитанной команды, задавая, таким образом, процессору адрес следующей команды в кодовом сегменте
Адрес данных для процессора – это любой адрес в виде «указатель сегмента»: «внутрисегментное смещение». Выбор указателя на сегмент с данными и внутрисегментный адрес данных полностью определяются автором

Слайд 5

Варианты сегментной структуры программы

а) Односегментная структура . Программа представлена, как один кодовый

Варианты сегментной структуры программы а) Односегментная структура . Программа представлена, как один
сегмент, в котором размещены команды и (если есть) данные. Указателем на кодовый сегмент должен быть регистр CS.
Варианты размещения данных в кодовом сегменте:
б) Многосегментная структура программы: один /несколько кодовых сегментов с командами и один/несколько сегментов для данных
Пример: Двухсегментная программа
Команды
………
Данные
Данные
………
Команды

Команды
Данные
Команды
Команды
………
Данные
………

Слайд 6

Примеры записи адреса данных:

Пусть с начала сегмента данных последовательно размещены четыре

Примеры записи адреса данных: Пусть с начала сегмента данных последовательно размещены четыре
байта: 05 FA 4D 9F. Указателем на сегмент данных выбран регистр ds.
1) Как записать в команде адрес байта FA? ds: [ ? ]
2) Какое значение будет в регистре AX после выполнения команды:
mov ax, ds:[2] ; чтение из памяти двух байтов в регистр АХ
АХ =
3) Как изменится содержимое сегмента данных после выполнения процессором команды записи в память байта по указанному адресу ?
mov ds:[1], al ; в сегменте данных: ? ? ? ?

Слайд 7

Разрядность внутрисегментных адресов - «разрядность программы»

Внутрисегментные адреса в программном сегменте должны иметь

Разрядность внутрисегментных адресов - «разрядность программы» Внутрисегментные адреса в программном сегменте должны
конкретную разрядность. Современные процессоры могут оперировать с внутрисегментными адресами разной разрядности – 16-ти, 32-х, 64-разрядными.
Термин «разрядность программы» и означает разрядность внутрисегментных адресов в машинном коде программы
Варианты использования термина «разрядности программы»:
16-разрядное приложение,
32-разрядный код,
64-разрядная операционная системы и т.д.
Это все – про разрядность внутрисегментных адресов в исполняемых кодах этих программ

Слайд 8

1) Как влияет разрядность внутрисегментных адресов на длину команды (в байтах)

Пример.

1) Как влияет разрядность внутрисегментных адресов на длину команды (в байтах) Пример.
Одна и та же команда, в которой используется адрес данных. Только разная разрядность ВА
mov вx, ds:[000f] ; 16-разр.внутрисегментный адрес. В машинном коде команды этот адрес займет 2 байта
mov вx, ds:[0000000f] ; 32-разрядный внутрисегментный адрес. В машинном коде команды адрес займет 4 байта
mov вx, ds:[000000000000000f] ; 64-разрядный внутрисегментный адрес. В машинном коде команды адрес займет 8 байт.
Таким образом, увеличение разрядности внутрисегментного адреса приводит к существенному увеличению длины команды и в итоге - объему исполняемой программы в целом.
Имя файла: Сегментная-адресация-памяти-процессорами-х86.-Сегментация-программ.-Внутрисегментные-адреса.-(Лекция-4).pptx
Количество просмотров: 24
Количество скачиваний: 0