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
