CodeLan
Administrator
Dołączył: 03 Lis 2006
Posty: 171
Przeczytał: 0 tematów
Pomógł: 3 razy Ostrzeżeń: 0/5 Skąd: Z pod skrzydeł Google.pl
|
Wysłany: Nie 7:29, 17 Cze 2007 Temat postu: Uzywanie stosu |
|
|
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
Post został pochwalony 0 razy
|
|