Програмування на мові Асемблер
mov ax , 100
push ax ; sp 2
mov bx , 200
push bx ; sp3
Команда push виконує дві дії :
1) Зменшує на 2 значення sp
2) Задане значення регістра записується по адресу [ ss:sp ]- розуміємо значення з зміщенням sp в середині стекового сегмента .
Порядок цих кроків істтній . Спочатку push віднімає 2 із sp. На рис. 4.4 першиц оператор push
записує sp2 в sp , поміщаючи потім туди значення з регістра ax . Після виконання цих дій вказівник степення адресує останнє поміщення в стек юдюжзначення.
Управління стеком
Принцип правильного управління стеком простий :
кожна команда push в програмі повинна мати відповідну команду pop , при цьому програма може коректно записувати і відновлювати значення.
Інакше , сдідуючі проштовхування приведуть до все більшого росту стека ,і можуть викликати переповнення сигмента , виділеного програмою. Це призводить до зависання системи , тому що починають перекриватись області пам ‘яті .
Якщо ж кількість команд pop , більше числа к. .Push ,може бути зникнення стека, що й приведе до зависання програми.
Приклад
push ax ; занести ax , bx , dx в стек
push bx
push dx
; - тут знаходиться програма
pop dx ; вийняти dx, bx , ax із стека.
pop bx
pop ax
Тут зрозуміло ,що команди між push i pop будуть використовувати регістри ax. bx i dx;
тому для збереження початкових значень вони проштовхуютья в стек . Потім ці ж регістри у зворотньому порядку виштовхуються із стека відновлюються початкові значення і підтримуючи стек в правильному стані ( состоянии ).