"Stos
- instrukcje push, pop, pusha, popa, pushf i popf"
Stos omówiliśmy już wcześniej - już wówczas sygnalizowałem istnienie dwóch instrukcji, które służą do obsługi stosu - PUSH i POP. Push - powoduje wrzucenie wartości lub zawartości rejestru na stos a POP - pobranie wartości ze stosu i wrzucenie jej do rejestru.
Składnia:
PUSH REJ16
PUSH WAR16
POP REJ16
"REJ16" i "WAR16" - oznaczają odpowiednio rejestr i wartość 16-bitową - tzn. nie można wrzucać ani pobierać ze stosu wartości 8-bitowych np. AL, AH...; inaczej: instrukcje PUSH i POP operują jedynie na słowach czyli danych 2-bajtowych.
Instrukcja PUSHA i POPA powodują
wrzucenie na stos wszystkich rejestrów - nie trzeba wywoływać
kilkakrotnie instrukcji PUSH i POP - wpływa to więc na
skrócenie programu.
Niestety - instrukcje te nie są dostępne we wszystkich wersjach
procesora, czyli ich używanie w programie wpływa na
kompatybilność.
PUSHA - wrzuca wartości wszystkich rejestrów na stos,
POPA - pobiera wartości wszystkich rejestrów ze stosu.
Oczywiście, nie dotyczy to rejestrów IP i kilku innych, gdyż pobranie
ze stosu wartości rejestru IP (instruction pointer - wskaźnik
instrukcji - wskaźnik aktualnie wykonywanej instrukcji) spowodowałoby
przeskok do miejsca w programie, już wykonanego, tj. przed instrukcję
PUSHA, doprowadziłoby to do powstania "pętli nieskończonej".
Składnia:
PUSHA
POPA
Ostatnią już parą instrukcji jest PUSHF i POPF, których działanie jest identyczne do PUSHA i POPA, lecz ogranicza się wyłącznie do flag - push flags...
Składnia:
PUSHF
POPF
Poniższy przykładzik demonstruje użycie wszystkich omówionych tu instrukcji.
Przykład użycia i zastosowania instrukcji obsługi stosu
Copyright by Grzegorz Złotowicz
Form and Graphics: Michał Stanek