Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Tłumaczenie: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

Rozdział 26

Używanie kodu maszynowego

Wprowadzenie USR z argumentem liczbowym

SPIS TREŚCI

Rozdział 26: Używanie kodu maszynowego

Podsumowanie

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:

obrazek

Jeśli wpiszesz:

CLEAR 32499

obrazek

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ść pary rejestrów bc przy powrocie z programu w kodzie maszynowym, zatem jeśli wpiszesz:

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.

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.