Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Опорний конспект лекцій_ Асемблер.Docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
506.89 Кб
Скачать
      1. Робота із стеком

Стек – це область пам’яті (в сегменті стека), виділена для тимчасового зберігання даних.

Для роботи із стеком призначені три регістри:

o ss – сегментний регістр стека;

o esp/sp – регістр вказівника стека (зміщення вершини стека);

o ebp/bp – регістр вказівника бази (кадра) стека (зміщення дна стека).

Розмір стека залежить від режиму роботи МП і обмежується 64 Кбайт для реального режиму (4 Гбайт для захищеного режиму). У кожний момент часу доступний один (поточний) стек, адрес сегменту якого знаходиться в регістрі ss. Для звернення до другого стеку необхідно завантажити у ss другий адрес.

Особливості роботи із стеком:

  • запис і читання здійснюється за принципом LIFO (last in first out) – “останній прийшов, перший пішов”;

  • стек росте в сторону молодших адресів (зменшення);

  • при використанні регістрів esp/sp і ebp/bp вважається, що їх вміст являє зміщення відносно сегментного регістра ss.

Початок стека розмішений у старших адресах і має значення ss:ffff (для реального режиму

64 Кбайт = 0ffffh).

Для роботи із стеком існують команди запису і читання. Команди запису:

push джерело – запис значення джерело у вершину стека;

pusha запис регістрів ax, cx, dx, bx, sp, bp, si, di (значення sp до видачі команди pusha) для атрибута розрядності use16 і регістрів eax, ecx, edx, ebx, esp, ebp, esi, edi – для use32;

pushaw- запис регістрів ax, cx, dx, bx, sp, bp, si, di (нечутлива до атрибути розрядності:

use16, use32).

Алгоритм роботи команди push:

  • (sp) = (sp) – 2 ; значення sp зменшується на 2

  • значення із джерела записується по адресу ss:sp.

Команди читання виконують дії обернені до команд запису:

pop приймач – читання (“знімання”) з вершини стека і запис в операнд приймач;

popa, popaw.

Алгоритм роботи команди pop:

  • вміст вершини стека записується в операнд приймач;

  • (sp) = (sp) + 2; значення sp збільшується на 2.

Команди для зберігання в стеку регістра прапорів:

pushf – зберегти регістр прапорів у стеку (для атрибуту розрядності use16 записується

flags, а для use32 – eflags);

pushfw – завжди працює як з атрибутом use16;

popf, popfw - виконують дії обернені до команд запису.

Стек використовується при:

  • викликах підпрограм;

  • тимчасовому зберіганні значень регістрів;

  • визначенні локальних змінних.

    1. Арифметичні цілочисельні команди

Арифметичні цілочисельні команди працюють із двома типами чисел:

  • цілі двійкові (із знаком, без знаку);

  • цілі десяткові.

Класифікація арифметичних команд:

Рис.4.1. Класифікація арифметичних команд

      1. Цілі двійкові числа

Ціле двійкове число з фіксованою крапкою – це число закодоване у двійковій системі числення. Розмірність двійкового числа складає 8, 16, 32-біти. Описуються директивами db, dw, dd. Знак двійкового числа визначається тим, як інтерпретується 7-й, 15-й, 31-й байт. Є тільки дві команди які враховують знак – imul, idiv.

      1. Додавання двійкових чисел без знаку

Додавання виконується по правилах додавання двійкових чисел. Для фіксування ситуації виходу за розрядну сітку результату, призначений прапор переносу cf. Програміст повинен передбачити таку ситуацію і засоби її коректування (звичайно команда умовного переходу jc). Є три команди додавання:

inc операнд – збільшення операнду на 1;

add операнд_1, операнд_2 – принцип дії операнд_1=операнд_1+операнд_2;

adc операнд_1, операнд_2 – команда додавання з врахуванням прапору переносу cf.

Принцип дії операнд_1 = операнд_1 + операнд_2 + cf;