Win32asm обучение


Урок 4 - Память


     Win32Asm Tutorial     
назад4 - Память вперед

4.0 - Память

Этот раздел объяснит, как устроена память в windows.

4.1 - DOS & win 3.xx

В 16-разрядных программах, как и в DOS, и в windows 3, память была разделена на сегменты. Эти сегменты имели размер 64kb. Для доступа к памяти были необходимы: указатель на сегмент и указатель смещения. Указатель сегмента указывал, какой сегмент (секцию 64kb) использовать, указатель смещения указывал непосредственно на место в сегменте. Смотрите рисунок:

Память
Сегмент 1 (64kb) Сегмент 2 (64kb) Сегмент 3 (64kb) Сегмент 4(64kb) и так далее

Учтите, что это объяснение для 16-разрядных программ, о 32-разрядных я расскажу позже, (но не пропускайте эту часть, важно понять, что такое 32-разрядность).
Таблица выше иллюстрирует общую память, разделенную на сегменты по 64kb. Здесь максимум 65536 сегментов. Теперь возмите один из сегментов:

Сегмент 1(64kb)
Смещение 1Смещение 2Смещение 3Смещение 4Смещение 5и так далее

Чтобы указать на местоположение в сегменте используется смещение. Смещение - это местоположение внутри сегмента. Здесь в сегменте максимум 65536 смещений. Запись адреса в памяти:

СЕГМЕНТ:СМЕЩЕНИЕ (SEGMENT:OFFSET)

Например:

0030:4012

(все числа шестнадцатиричные)

Это означает: сегмент 30, смещение 4012. Чтобы узнать, что находится в том адресе, вы сначала переходите на сегмент 30, а затем в сегменте смещаетесь на 4012. В предыдущих уроках мы узнали о сегментных и указательных регистрах. Например, сегментные регистры:

CS - Сегмент кода
DS - Сегмент данных
SS - Сегмент стека
ES - Дополнительный сегмент
FS - Универсальный сегмент
GS - Универсальный сегмент

Названия говорят о их функциях: сегмент кода (CS) содержит номер секции, где вылнен текущий код. Сегмент данных для получения данных из текущего сегмента. На стек указывает сегмент стека (SS) (подробнее о стеке я раскажу позже), ES, FS, GS - универсальные регистры и могут использоваться для любого сегмента (не в win32).




- Начало -  - Назад -  - Вперед -



Книжный магазин