Стек і непряма адресація assembler

У цій статті ми з вами познайомимося з основними поняттями, які пов'язані зі стеком в Assembler, напишемо невелику програму, вивчимо кілька нових команд.

Загальна інформація

Стек і непряма адресація assembler

Принцип роботи можна виразити простими словами: першим прийшов - останнім вийшов, і навпаки: останнім прийшов - першим вийшов. Це повністю описує роботу стека в Assembler.

Часто цей принцип порівнюють з обоймою в пістолеті, коли ви заряджаєте обойму, то той патрон який був першим, вистрілить найостаннішим.

Стек в Assembler

Для основ, нам необхідно знати 2 нові команди:

  • push - помістити в стек
  • pop - витягнути з стека

Також нам знадобиться така конструкція:
[Esp] - це покажчик на вершину стека, як раз з нею ми і будемо працювати.

Приступимо до коду, а ті, хто не знають де його писати і як скомпілювати - ласкаво просимо в попередню статтю.

Вже знайомі рядки, які необхідно прописувати.
Перейдемо до розділу коду:

Спочатку в регістри ax і ecx поміщаємо значення (h означає шестнадцатеричную систему обчислення, і по суті ніяк не відноситься до числа). Зауважте, що в регістр ax, що містить максимум 2 байта, можна помістити тільки 4 цифри, а в регістр ecx, що містить 4 байта, тільки 8.

Потім за допомогою команди push, поміщаємо в стек значення регістрів ax і ecx відповідно, тобто спочатку ми поклали 2 байта, а потім ще 4 байта. Таким чином зараз на вершині стека лежить то число з 8 знаків.

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

Поділитися посиланням: