Pamięć programu, licznik rozkazów
Adres ---------------- 4095 +---------------+ Wewnątrz układu ... | | Tom 1 (DBF=1) 8050 ... | | ... | | 2048 | | ---------------- 2047 +---------------+ Wewnątrz układu ... | | Tom 1 (DBF=0) 8049, 8749 ... | | ... | | 1024 | | ---------------- 1023 +---------------+ Wewnątrz układu ... | | Strona 2 8048, 7848 ... | | ... | | 512 | | ---------------- 511 +---------------+ ... | | Strona 1 ... | | ... | | 256 | | ---------------- 255 +---------------+ ... | | Strona 0 ... | | ... | | 8 | | 7 +---------------+ <- Początek programu obsługi 6 | | przerwania z układu 5 | | czasowo-licznikowego 4 | | 3 +---------------+ <- Początek programu obsługi 2 | | przerwania zewnętrznego /INT 1 | | 0 +---------------+ <- Start programu po zerowaniu
Wyróżnia się tu trzy miejsca o adresach:
0 - od którego rozpoczyna się wykonywanie programu po
wyzerowaniu mikrokomputera (RESET),
3 - od którego rozpoczyna się wykonywanie programu obsługi
przerwania zewnętrznego (INT),
7 - od którego rozpoczyna się wykonywanie programu obsługi
przerwania z układu czasowo-licznikowego.
W pamięci programu mogą być umieszczone dane (stałe). Dostęp do nich (pobranie do akumulatora) jest możliwy tylko za pomocą specjalnych rozkazów MOVP (pobranie danej ze strony bieżącej, tzn. tej, na której jest umieszczony rozkaz MOVP) lub MOVP3 (pobranie danej ze strony trzeciej). W obu przypadkach adresowanie na stronie jest pośrednie (zawartością akumulatora). Poza tym stałe dane mogą być umieszczone w pamięci programu jako argumenty bezpośrednie rozkazów. Część pamięci programu znajduje się wewnątrz układu mikrokomputera i stanowi wewnętrzną pamięć programu (ang. resident program memory lub internal program memory). Jest to zawsze pamięć stała (typu ROM lub EPROM).
Pozostała część przestrzeni adresowej (4096 słów minus wielkość pamięci wewnętrznej) może być wykorzystana przez dołączenie do układu zewnętrznej pamięci programu (ang. external program memory). Może to być pamięć dowolnego typu, ale w praktycznych systemach stosuje się w zasadzie wyłącznie EPROM. Sposób dołączenia zewnętrznej pamięci programu opisano w kolejnym rozdziale. Podział pamięci programu na część wewnętrzną i zewnętrzną jest niezauważalny od strony programowej.
Pamięć programu jest adresowana przez 12-bitowy licznik rozkazów (ang. program counter) - PC:
Konwecjonalny licznik rozkazów to 11 mniej znaczących bitów. Ich zawartość zwiększa się o 1 w czasie cyklu pobrania z pamięci programu. Najbardziej znaczący bit może być zmieniony tylko w wyniku wykonania rozkazów skoku JMP lub skoku do podprogramu CALL; przepisuje się do niego zawartość wskaźnika tomu (ang. memory bank flag) - DBF. Wskaźnik tomu może być ustawiany za pomocą specjalnych rozkazów SEL MB. Wspomniane wyżej rozkazy skoków mają adres 11-bitowy, co umożliwia skoki w obrębie ostatnio ustawionego tomu. Dopiero stosując sekwencję z rozkazem SEL MB, można uzyskać skok do dowolnego miejsca pamięci. Pozostałe rozkazy skoków (w tym wszystkie warunkowe) zmieniają tylko osiem mniej znaczących bitów licznika rozkazów - są więc wykonywane w obrębie bieżącej strony.