Maszyna rejestrowa

Maszyna rejestrowa – maszyna (procesor bądź maszyna wirtualna), w której podstawowe operacje prowadzi się na niewielkiej grupie rejestrów, nie zaś na stosie.

Maszyny rejestrowe dysponują też stosem – dostępnym jawnie (instrukcjami dodawania do stosu push i zdejmowania ze stosu pop) bądź emulowanym (program modyfikuje rejestr bądź zmienną będącą wskaźnikiem do stosu), ale jest on używany do przechowywania i przekazywania danych, nie do obliczeń.

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

Operacja Stan maszyny
reg_a reg_b reg_c reg_d
reg_a = memory(A) A {\displaystyle A} ? ? ?
reg_b = memory(B) A {\displaystyle A} B {\displaystyle B} ? ?
reg_c = memory(C) A {\displaystyle A} B {\displaystyle B} C {\displaystyle C} ?
reg_c = reg_c * reg_a A {\displaystyle A} B {\displaystyle B} A C {\displaystyle AC} ? {\displaystyle ?}
reg_d = reg_b * reg_b A {\displaystyle A} B {\displaystyle B} A C {\displaystyle AC} B 2 {\displaystyle B^{2}}
reg_c = 4 * reg_c A {\displaystyle A} B {\displaystyle B} 4 A C {\displaystyle 4AC} B 2 {\displaystyle B^{2}}
reg_d = reg_d - reg_c A {\displaystyle A} B {\displaystyle B} 4 A C {\displaystyle 4AC} Δ = B 2 4 A C {\displaystyle \Delta =B^{2}-4AC}
reg_d = sqrt(reg_d) A {\displaystyle A} B {\displaystyle B} 4 A C {\displaystyle 4AC} Δ {\displaystyle {\sqrt {\Delta }}}
reg_a = 2*reg_a 2 A {\displaystyle 2A} B {\displaystyle B} 4 A C {\displaystyle 4AC} Δ {\displaystyle {\sqrt {\Delta }}}
reg_b = -reg_b 2 A {\displaystyle 2A} B {\displaystyle -B} 4 A C {\displaystyle 4AC} Δ {\displaystyle {\sqrt {\Delta }}}
reg_c = reg_b - reg_d 2 A {\displaystyle 2A} B {\displaystyle -B} B Δ {\displaystyle -B-{\sqrt {\Delta }}} Δ {\displaystyle {\sqrt {\Delta }}}
reg_d = reg_d + reg_b 2 A {\displaystyle 2A} B {\displaystyle -B} B Δ {\displaystyle -B-{\sqrt {\Delta }}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
reg_c = reg_c / reg_a 2 A {\displaystyle 2A} B {\displaystyle -B} B Δ 2 A {\displaystyle {\frac {-B-{\sqrt {\Delta }}}{2A}}} B + Δ {\displaystyle -B+{\sqrt {\Delta }}}
reg_d = reg_d / reg_a 2 A {\displaystyle 2A} B {\displaystyle -B} B Δ 2 A {\displaystyle {\frac {-B-{\sqrt {\Delta }}}{2A}}} B + Δ 2 A {\displaystyle {\frac {-B+{\sqrt {\Delta }}}{2A}}}
memory(X1) = reg_c 2 A {\displaystyle 2A} B {\displaystyle -B} B Δ 2 A {\displaystyle {\frac {-B-{\sqrt {\Delta }}}{2A}}} B + Δ 2 A {\displaystyle {\frac {-B+{\sqrt {\Delta }}}{2A}}}
memory(X2) = reg_d 2 A {\displaystyle 2A} B {\displaystyle -B} B Δ 2 A {\displaystyle {\frac {-B-{\sqrt {\Delta }}}{2A}}} B + Δ 2 A {\displaystyle {\frac {-B+{\sqrt {\Delta }}}{2A}}}

Argumenty 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 stosowej.

Większość procesorów to maszyny rejestrowe. Do wirtualnych maszyn rejestrowych należy Parrot.