Asembler
Stos
Co to jest stos? Np. stos śmieci albo książek, prawda? Tym jednak nie będziemy się zajmować. Istnieje bowiem inny stos, który bardziej nas w tej chwili interesuje, a mianowicie stos komputerowy. Wygląda on z resztą bardzo podobnie do tamtych. Tyle tylko, że zamiast książek ma bajty ułożone nie na półce, lecz w pamięci komputera. Podobnie jak w przypadku tamtych możemy wrzucać na jego wierzchołek cokolwiek (w tym przypadku zawartości rejestrów, komórek pamięci) i z niego zdejmować. Zdejmować możemy również tylko z wierzchołka, ponieważ ze środka jest to niemożliwe tak samo jak w przypadku stosu książek wyciągnięcie książki ze środka nie ruszając pozostałych (w końcu i to i to jest stos). Przykładzik:

AX=7
BX=53
CX=11
DX=2

Wrzucamy kolejno na stos:

AX -> BX -> CX -> DX 2 11 11 53 53 53 7 7 7 7

A teraz zdejmujemy kolejno:

AX -> BX -> CX -> DX 2 11 11 53 53 53 7 7 7 7

W wyniku otrzymujemy:

AX=2 BX=11 CX=53 DX=7

Siódemka została pierwsza wrzucona na stos, a ostatnia zdjęta. Dlatego rejestry AX i DX zamieniły się wartościami (podobnie z resztą jak BX i CX). Oczywiście gdybyśmy przy zdejmowaniu wartości ze stosu użyli rejestrów w odwrotnej kolejności nic by się nie zmieniło. Tak właśnie działa stos. Jego obsługa programowa jest również bardzo prosta. Za pomocą polecenia push x, wrzucamy na stos wartość x, czyli rejestru bądź komórki pamięci (koniecznie, musi to być słowo czyli 2 bajty, żadnych rejestrów połówkowych itd.). Natomiast pop x służy do pobrania ze stosy wartości i umieszczenia jej w x (także słowo).

  asm
   mov ax, 7
   mov bx, 53
   mov cx, 11
   mov dx, 2
   push ax
   push bx
   push cx
   push dx
   mov ax, 0
   mov bx, 0
   mov cx, 0
   mov dx, 0
   pop dx
   pop cx
   pop bx
   pop ax
  end;

Ten przykład doskonale ilustruje przydatność stosu. Aby na jakiś czas zapamiętać wartości rejestrów można umieścić je w stosie zamiast w dodatkowych zmiennych czy innych rejestrach. Po wykonaniu jakiś tam operacji przywrócenie im ich pierwotnych wartości nie stanowi problemu.


Copyright © 2000-2001 Bartosz 'SILV' Jaworski
All rights reserved