Maszyna stosowa

Sprzątanie Wikipedii
Ten artykuł należy dopracować:
co oznaczają poszczególne komendy w kodzie.
Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się w dyskusji tego artykułu.
Po wyeliminowaniu niedoskonałości należy usunąć szablon {{Dopracować}} z tego artykułu.

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 {\displaystyle A}
push memory(C) C {\displaystyle C} A {\displaystyle A}
push 4 4 {\displaystyle 4} C {\displaystyle C} A {\displaystyle A}
mul 4 C {\displaystyle 4C} A {\displaystyle A}
mul 4 A C {\displaystyle 4AC}
push memory(B) B {\displaystyle B} 4 A C {\displaystyle 4AC}
dup B {\displaystyle B} B {\displaystyle B} 4 A C {\displaystyle 4AC}
mul B 2 {\displaystyle B^{2}} 4 A C {\displaystyle 4AC}
sub Δ = B 2 4 A C {\displaystyle \Delta =B^{2}-4AC}
sqrt Δ {\displaystyle {\sqrt {\Delta }}}
dup Δ {\displaystyle {\sqrt {\Delta }}} Δ {\displaystyle {\sqrt {\Delta }}}
push memory(B) B {\displaystyle B} Δ {\displaystyle {\sqrt {\Delta }}} Δ {\displaystyle {\sqrt {\Delta }}}
neg B {\displaystyle -B} Δ {\displaystyle {\sqrt {\Delta }}} Δ {\displaystyle {\sqrt {\Delta }}}
add B + Δ {\displaystyle -B+{\sqrt {\Delta }}} Δ {\displaystyle {\sqrt {\Delta }}}
xchg Δ {\displaystyle {\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
push memory(B) B {\displaystyle B} Δ {\displaystyle {\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
neg B {\displaystyle -B} Δ {\displaystyle {\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
sub B Δ {\displaystyle -B-{\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
push memory(A) A {\displaystyle A} B Δ {\displaystyle -B-{\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
push 2 2 {\displaystyle 2} A {\displaystyle A} B Δ {\displaystyle -B-{\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
mul 2 A {\displaystyle 2A} B Δ {\displaystyle -B-{\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
xchg B Δ {\displaystyle -B-{\sqrt {\Delta }}} 2 A {\displaystyle 2A} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
div B Δ 2 A {\displaystyle {\frac {-B-{\sqrt {\Delta }}}{2A}}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
pop memory(X1) B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
push memory(A) A {\displaystyle A} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
push 2 2 {\displaystyle 2} A {\displaystyle A} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
mul 2 A {\displaystyle 2A} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
xchg B + Δ {\displaystyle -B+{\sqrt {\Delta }}} 2 A {\displaystyle 2A}
div B + Δ 2 A {\displaystyle {\frac {-B+{\sqrt {\Delta }}}{2A}}}
pop memory(X2)

Argument znajdują się w komórkach pamięci A, B i C. Wynik 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 x87 są zorganizowane w stos.