Odkazy:
Architektura PDP-8 nemá žádný hardwarový zásobník nebo instrukce které by při jeho realizaci v programu byly nápomocny. I přesto se ale v programu zásobník realizovat dá. Následující procedury realizují zásobníkové operace programově. V našem případě je zásobník oblast paměti od adresy 0377 směrem k nižším adresám. Zásobník tedy „roste“ směrem od vyšších k nižším adresám. Ukazatel zásobníku je v paměťové buňce označené SP
a ukazuje vždy na poslední uloženou hodnotu. Proto se při inicializaci zásobníku nastavuje na adresu u jedničku vyšší než je paměť vyhražená pro zásobník.
Příklad 63.9. Operace se zásobníkem, PUSH a POP, pro PDP-8
1 / File: db/pdp8.code/stack-push.pal -*- mode:asm; -*- 2 / From: http://en.wikipedia.org/wiki/PDP-8#Software_stack 3 0400 *400 4 00400 0000 PUSH, 0 / Value in AC 5 00401 3222 DCA DATA / Temporary save value to push. 6 00402 7240 CLA CMA / SP-- 7 00403 1223 TAD SP /+ 8 00404 3223 DCA SP /+ 9 00405 1222 TAD DATA / Load saved value to push 10 00406 3623 DCA I SP / Store value to Mem[SP] 11 00407 5600 JMP I PUSH /Return 12 13 00410 0000 POP, 0 14 00411 7300 CLA CLL / 15 00412 1623 TAD I SP / Load AC with Mem[SP] 16 00413 2223 ISZ SP / SP++ 17 00414 5610 JMP I POP / Return, value in AC 18 19 / Stack initialization procedure 20 00415 0000 STKINI, 0 21 00416 7300 CLA CLL / SP=STKBOT 22 00417 1224 TAD STKBOT /+ 23 00420 3223 DCA SP /+ 24 00421 5615 JMP I STKINI / Return 25 26 00422 0000 DATA, 0 / Temporary place for pushed value 27 00423 0000 SP, 0 / Stack pointer. Must be initialized before using stack! 28 00424 0400 STKBOT, 400 / Bottom of the stack is 377. 29 $ No detected errors