Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor: Steven Vickers
Tłumaczył: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

ROZDZIAŁ 26 – Stosowanie kodu maszynowego

Rozkaz: NEW
Funkcja: USR

SPIS TREŚCI
ROZDZIAŁ 1 Przygotowanie ZX81
ROZDZIAŁ 2 Wydawanie komputerowi poleceń
ROZDZIAŁ 3 Lekcja historii
ROZDZIAŁ 4 Sinclair ZX81 jako kalkulator kieszonkowy
ROZDZIAŁ 5 Funkcje
ROZDZIAŁ 6 Zmienne
ROZDZIAŁ 7 Łańcuchy tekstowe
ROZDZIAŁ 8 Programowanie komputera
ROZDZIAŁ 9 Dalsze programowanie komputera
ROZDZIAŁ 10 Jeśli ...
ROZDZIAŁ 11 Zestaw znaków
ROZDZIAŁ 12 Pętle
ROZDZIAŁ 13 Wolno i Szybko
ROZDZIAŁ 14 Podprogramy
ROZDZIAŁ 15 Uruchamianie programów
ROZDZIAŁ 16 Pamięć taśmowa
ROZDZIAŁ 17 Wyświetlanie z bajerami
ROZDZIAŁ 18 Grafika
ROZDZIAŁ 19 Czas i ruch
ROZDZIAŁ 20 Drukarka dla ZX81
ROZDZIAŁ 21 Podłańcuchy
ROZDZIAŁ 22 Tablice
ROZDZIAŁ 23 Gdy zaczyna brakować pamięci
ROZDZIAŁ 24 Liczenie na palcach
ROZDZIAŁ 25 Jak pracuje komputer
ROZDZIAŁ 26 Stosowanie kodu maszynowego
ROZDZIAŁ 27 Organizacja pamięci
ROZDZIAŁ 28 Zmienne systemowe
DODATKI
A Zestaw znaków
B Numery komunikatów
C ZX81 dla znających język BASIC

ROZDZIAŁ 26 – Stosowanie kodu maszynowego

Ten rozdział napisano dla tych, którzy rozumieją kod maszynowy Z80, czyli zbiór instrukcji używanych przez układ scalony mikroprocesora Z80. Jeśli nie znasz go, lecz chciałbyś poznać, to są o nim książki: dwie wprowadzające "Programming the Z80" autorstwa Rodnaya Zaksa, wydane przez Sybex w cenie około £10 oraz "Z80 and 8080 Assembly language programming' napisana przez Rathe Spracklena, wydana przez Hayden w cenie £5.25.

Ostatecznym autorytetem jest "Z80 Assembly Language Programming Manual' wraz z "Z80-CPU, Z80A-CPU Technical Manual" wydane przez Zilog po około £6 za parę, lecz trudno je polecać początkującym. (W naszym serwisie znajduje się artykuł pt. "Instrukcja użytkownika mikroprocesora Z80").

Procedury w języku maszynowym mogą być wywoływane z poziomu języka BASIC przy pomocy funkcji USR (ang. user = użytkownik). Argumentem USR jest początkowy adres procedury, a jej wynikiem jest dwubajtowa liczba całkowita bez znaku zwrócona przez procedurę w parze rejestrów BC. Adres powrotny do BASIC'a jest umieszczany w normalny sposób na stosie procesora, zatem powrót następuje za pomocą instrukcji ret procesora Z80.

Istnieje kilka ograniczeń przy procedurach USR:

(i) Przy powrocie rejestry iy oraz i muszą posiadać wartości 4000h i 1Eh (rejestr iy jest automatycznie odtwarzany przez procedurę w ROM, zatem nie musi mieć on wartości 4000h - przyp. tłum.).

(ii) Procedura wyświetlania wykorzystuje rejestry a', f', ix, iy i r, zatem procedura USR nie powinna ich używać gdy komputer pracuje w trybie obliczeń i wyświetlania obrazu (nawet nie jest bezpiecznie czytać parę af').

Magistrale sterująca, danych i adresowa są wyprowadzone na zewnątrz z tyłu ZX81, zatem z komputerem możesz zrobić prawie wszystko to samo co z Z80. Chociaż czasami układy w ZX81 mogą ci wchodzić w drogę, szczególnie podczas wyświetlania i obliczeń. Oto schemat wyprowadzeń z tyłu komputera:

obrazek

Fragment kodu maszynowego w środku pamięci komputera stwarza ryzyko nadpisania przez system języka BASIC. Bezpieczniejsze miejsca to:

(i) W poleceniu REM: wpisz polecenie REM zawierające wystarczającą liczbę znaków do przechowania twojego kodu maszynowego, który następnie wpiszesz. Niech będzie to pierwszy wiersz programu, w przeciwnym razie mógłby zostać gdzieś przesunięty. Unikaj instrukcji halt, ponieważ zostaną rozpoznane jako koniec polecenia REM.

(ii) W łańcuchu: utwórz wystarczająco długi łańcuch, a następnie przypisz kod maszynowy do kolejnych znaków. Łańcuchy zawsze są podatne na przesunięcia w pamięci.

W dodatku A jest zestaw znaków wraz z odpowiadającymi im instrukcjami Z80 umieszczonymi obok siebie w kolumnach, co może ci się przydać przy wprowadzaniu kodu maszynowego.

(iii) Na szczycie pamięci. Gdy ZX81 jest włączany, sprawdza, ile posiada pamięci i umieszcza stos maszynowy na samej górze, zatem nie ma tam miejsca na procedury USR. Przechowuje on adres pierwszego nieistniejącego bajtu (tj. 17K lub 17408, jeśli masz 1K pamięci) w zmiennej systemowej znanej jako RAMTOP w postaci dwóch bajtów o adresach 16388 i 16389. NEW z drugiej strony nie dokonuje pełnego testu pamięci, lecz jedynie sprawdza ją do adresu tuż przed adresem przechowywanym w RAMTOP. Stąd jeśli wstawisz adres istniejącego bajtu do RAMTOP, to dla NEW pamięć od tego bajtu w górę będzie leżała poza systemem BASIC i pozostanie nienaruszona. Na przykład, załóżmy, iż posiadasz 1K pamięci i właśnie włączyłeś komputer.

PRINT PEEK 16388+256*PEEK 16389

powie ci adres (17408) pierwszego nieistniejącego bajtu.

Teraz załóżmy, iż posiadasz procedurę USR o długości 20 bajtów. Chcesz zmienić RAMTOP na 17388 = 236 + 256*67 (jak obliczyłbyś to na komputerze?), więc wpisz:

POKE 16388,236
POKE
16389,67

a następnie NEW. Dwadzieścia bajtów pamięci od adresu 17388 do 17407 są teraz twoje i możesz z nimi robić co ci się podoba. Jeśli ponownie wpiszesz NEW, to nie wpłynie ono na te dwadzieścia bajtów.

Szczyt pamięci jest dobrym miejscem na procedury maszynowe USR, bezpiecznym (nawet od NEW) oraz nieruchomym. Jego główną wadą jest to, iż nie zostaje zapamiętany przez rozkaz SAVE.

Podsumowanie

Funkcja: USR

Polecenie: NEW

Ćwiczenie

Ustaw RAMTOP na 16700 i następnie wykonaj NEW. Zobaczysz, co się dzieje, gdy pamięć się zapełni.

 
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.