Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
Wprowadzenie USR z argumentem liczbowym
SPIS TREŚCI |
|
USR z argumentem liczbowym
Ten rozdział został napisany dla tych, którzy rozumieją kod maszynowy mikroprocesora Z80, czyli zbiór instrukcji używanych przez ten układ scalony. Jeśli nie znasz tego, a chciałbyś poznać, to wokoło znajdziesz mnóstwo książek na ten temat. Musisz zdobyć jakąś, której tytuł brzmi jakoś tak "Kod maszynowy z80 (lub język maszynowy) dla zupełnie zielonych", a jeśli będzie w niej wspomniany Spectrum, to tym lepiej.
Programy maszynowe są zwykle zapisywane w języku asemblera i chociaż wyglądają jak szyfr, nie są zbytnio trudne do zrozumienia przy odrobinie praktyki. (Instrukcje języka asemblera możesz zobaczyć w Dodatku A.) Jednakże do ich uruchomienia na komputerze będziesz musiał taki program zakodować na ciąg bajtów, a w tej postaci są one nazywane kodem maszynowym. To kodowanie jest zwykle dokonywane przez sam komputer przy pomocy programu o nazwie asembler. Spectrum nie posiada wbudowanego żadnego asemblera, lecz możesz taki kupić sobie na kasecie. Jeśli ci się to nie uda, to możesz też ręcznie dokonać takiego kodowania, o ile program nie jest zbyt długi.
Weźmy przykładowy program:
ld bc, 99 ret |
który ładuje parę rejestrów bc liczbą 99. Tłumaczy się to na cztery bajty kodu maszynowego 1, 99, 0 (dla ld bc,99) i 201 (dla ret). (Jeśli w Dodatku A wyszukasz 1 i 201, to znajdziesz ld bc, NN — gdzie NN oznacza dowolną liczbę dwubajtową — i ret.)
Gdy masz swój program maszynowy, następnym krokiem jest umieszczenie go w komputerze. (Asembler prawdopodobnie zrobiłby to automatycznie.) Musisz zdecydować, gdzie umieścić go w pamięci, a najlepiej jest zrobić dodatkowe miejsce pomiędzy obszarem BASIC a grafikami definiowanymi przez użytkownika.
Przykładowo załóżmy, że masz ZX Spectrum 16K. Na początku szczyt pamięci RAM wygląda następująco:
Jeśli wpiszesz:
CLEAR 32499 |
dostaniesz 100 bajtów (aby nie brakło) od adresu 32500.
Aby wstawić ten program w kodzie maszynowym, możesz uruchomić taki program:
10 LET a=32500 20 READ n: POKE a,n 30 LET a=a+1:GOTO20 40 DATA 1,99,0,201 |
(Zatrzyma się on z komunikatem E Out of DATA [E Koniec danych], gdy wypełni te cztery podane przez ciebie bajty.)
Aby uruchomić ten kod maszynowy, użyjesz funkcji USR, lecz tym
razem z argumentem liczbowym będącym adresem początku kodu maszynowego w
pamięci. Wynikiem tej funkcji zawsze jest zawartość
PRINT USR 32500 |
to otrzymasz odpowiedź 99.
Adres powrotny do systemu BASIC jest umieszczany na stosie procesora Z80 w normalny sposób, zatem powracasz przy pomocy instrukcji ret. W swoich programach nie powinieneś korzystać z rejestrów iy oraz i. Swój program w kodzie maszynowym możesz bardzo łatwo zapisać na taśmie przy pomocy polecenia:
SAVE "jakaś nazwa" CODE 32500,4 |
Niestety, nie ma sposobu takiego zapisu, aby po załadowaniu program sam się uruchomił, lecz możesz to obejść przy pomocy programu w języku BASIC:
10 LOAD "" CODE 32500,4 20 PRINT USR 32500 |
Wykonaj najpierw:
SAVE "jakaś nazwa" LINE |
a następnie:
SAVE "xxxx" CODE 32500,4 LOAD "jakaś nazwa" |
To załaduje i automatycznie uruchomi program w języku BASIC, a ten z kolei załaduje i uruchomi program w kodzie maszynowym.
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 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.