Перш ніж розповідати, про мову асемблера я розповім вам, як влаштована пам'ять на 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.
Виділення пам'яті.
Чи не розслабляємося, читаємо наступний, урок.