пам'ять системи

Перш ніж розповідати, про мову асемблера я розповім вам, як влаштована пам'ять на Win32 системах. Програмувати на асемблері не знаючи, як влаштована пам'ять системи безглуздо. Найголовніша перевага асемблера полягає у взаємодії з пам'яттю.

Трохи історії.

Врахуйте, що це пояснення для 16-розрядних програм, про 32-розрядних я розповім пізніше, (але не пропускайте цю частину, важливо зрозуміти, що таке 32-розрядність).

Таблиця вище ілюструє загальну пам'ять, розділену на сегменти по 64kb. Тут максимум 65536 сегментів. Тепер візьміть один з сегментів:

Наприклад: 0030: 4012 (все шестнадцатиричное)

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

Тепер про Win32.

У 16-розрядному програмуванні, сегменти необхідні. На щастя, ця проблема вирішена в 32-розрядному Windows (95 і вище). Ви все ще маєте сегменти, але вам не потрібно піклуватися про них, тому, що вони вже не 64kb (як в 16-розрядному), а 4 Гб. Windows ймовірно навіть "повисне", якщо ви спробуєте змінити один з сегментних регістрів. Це називається плоскою моделлю пам'яті (flat). Тут є тільки зміщення і вони тепер 32-розрядні (в діапазоні від 0 до 4,294,967,295). Кожна клітинка в пам'яті вказується зміщенням. Це дійсно один з кращих переваг 32-розрядної програмування над 16-розрядних. Так що тепер ви можете забути про сегментних регістрах і зосередитися на інших регістрах.

Ось загальна схема пам'яті в Win32.

Виділення пам'яті.

Чи не розслабляємося, читаємо наступний, урок.

Схожі статті