У цій статті ми з вами познайомимося з основними поняттями, які пов'язані зі стеком в Assembler, напишемо невелику програму, вивчимо кілька нових команд.
Загальна інформація
Принцип роботи можна виразити простими словами: першим прийшов - останнім вийшов, і навпаки: останнім прийшов - першим вийшов. Це повністю описує роботу стека в Assembler.
Часто цей принцип порівнюють з обоймою в пістолеті, коли ви заряджаєте обойму, то той патрон який був першим, вистрілить найостаннішим.
Стек в Assembler
Для основ, нам необхідно знати 2 нові команди:
- push - помістити в стек
- pop - витягнути з стека
Також нам знадобиться така конструкція:
[Esp] - це покажчик на вершину стека, як раз з нею ми і будемо працювати.
Приступимо до коду, а ті, хто не знають де його писати і як скомпілювати - ласкаво просимо в попередню статтю.
Вже знайомі рядки, які необхідно прописувати.
Перейдемо до розділу коду:
Спочатку в регістри ax і ecx поміщаємо значення (h означає шестнадцатеричную систему обчислення, і по суті ніяк не відноситься до числа). Зауважте, що в регістр ax, що містить максимум 2 байта, можна помістити тільки 4 цифри, а в регістр ecx, що містить 4 байта, тільки 8.
Потім за допомогою команди push, поміщаємо в стек значення регістрів ax і ecx відповідно, тобто спочатку ми поклали 2 байта, а потім ще 4 байта. Таким чином зараз на вершині стека лежить то число з 8 знаків.
Для того, щоб краще зрозуміти цей матеріал, раджу скористатися отладчиком. і подивитися як будуть змінюватися значення регістрів і значення, яке зберігається на вершині стека (воно знаходиться в правому нижньому вікні і підсвічується сірим кольором).