Maszyna stosowa

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Maszyna stosowa to maszyna (procesor bądź maszyna wirtualna), w której podstawowe operacje prowadzi się na stosie, nie zaś na rejestrach.

Liczenie pierwiastków równania kwadratowego na przykładowej maszynie stosowej (pomijając sprawdzenie czy w ogóle istnieją pierwiastki rzeczywiste):

Operacja Stos (tylko część używana w algorytmie)
push memory(A) A
push memory(C) C A
push 4 4 C A
mul 4C A
mul 4AC
push memory(B) B 4AC
dup B B 4AC
mul B^2 4AC
sub \Delta = B^2 - 4AC
sqrt \sqrt \Delta
dup \sqrt \Delta \sqrt \Delta
push memory(B) B \sqrt \Delta \sqrt \Delta
neg -B \sqrt \Delta \sqrt \Delta
add -B + \sqrt \Delta \sqrt \Delta
xchg \sqrt \Delta -B + \sqrt \Delta
push memory(B) B \sqrt \Delta -B + \sqrt \Delta
neg -B \sqrt \Delta -B + \sqrt \Delta
sub -B - \sqrt \Delta -B + \sqrt \Delta
push memory(A) A -B - \sqrt \Delta -B + \sqrt \Delta
push 2 2 A -B - \sqrt \Delta -B + \sqrt \Delta
mul 2A -B - \sqrt \Delta -B + \sqrt \Delta
xchg -B - \sqrt \Delta 2A -B + \sqrt \Delta
div \frac{-B - \sqrt \Delta}{2A} -B + \sqrt \Delta
pop memory(X1) -B + \sqrt \Delta
push memory(A) A -B + \sqrt \Delta
push 2 2 A -B + \sqrt \Delta
mul 2A -B + \sqrt \Delta
xchg -B + \sqrt \Delta 2A
div \frac{-B + \sqrt \Delta}{2A}
pop memory(X2)

Argument znajdują się w komórkach pamięci A, B i C. Wyniki znajduje się w komórkach pamięci X1 i X2.

Porównaj z tym samym algorytmem na maszynie rejestrowej.

Większość maszyn wirtualnych to maszyny stosowe. Maszyną stosową był Transputer oraz polski minikomputer Mera 400. Także rejestry koprocesorów arytmetycznych z serii x86 są zorganizowane w stos.