AK Ćw. 2, 3
Architektura prostego procesora (8080).
Programowanie w języku maszynowym.
(Materiał na 2 jednostki)
Cel ćwiczenia: Poznanie programowania w języku maszynowym na przykładzie prostego procesora 8-bitowego
Literatura: A. NiederliÅ„ski, „Mikroprocesory, mikrokomputery, mikrosystemy”, WSiP, 1987
Sprzęt i oprogramowanie: Komputer z procesorem 8-bitowym (CA80), Komputer PC z zainstalowanym symulatorem procesora 8085
Sprzęt nadobowiązkowy: Analizator stanów logicznych
Pomoce: Tabela kodów rozkazów 8080 w kolejności alfabetycznej (do asemblacji), Tabela kodów rozkazów 8080 według numerów kodów (do dezasemblacji)
Zagadnienia:
Architektura procesora 8080 (rejestry, znaczniki, sposób adresowania pamięci, stos)
Pamięć RAM i ROM
Start komputera
Zapis szesnastkowy liczb dwójkowych
Budowa rozkazu
Zapis liczb dwójkowych, dziesiętnych i szesnastkowych
Język asembler i język maszynowy
Rozkazy procesora:
przesłań
arytmetyczne, logiczne
sterujące: skoki, skoki warunkowe, wywołanie podprogramu, powrót z podprogramu
inne: NOP, HLT, RST0
Zapis w pamięci argumentów wielobajtowych (little endian i big endian)
Tłumaczenie z języka asembler na język maszynowy
Tłumaczenie z języka maszynowego na asembler
Cykl rozkazowy - pobranie i wykonanie rozkazu
Dodawanie liczb wielobajtowych. Przeniesienie. Znacznik przeniesienia.
Polecenia:
0. Oblicz parametry, które posłużą do indywidualizacji programów
a = ( 3 ostatnie cyfry numeru indeksu) jeżeli a <100 to przyjmij a=17310
b = ( 2 ostatnie cyfry numeru indeksu) jeżeli b <20 to przyjmij =5210
Zamień a i b na postać szesnastkową i oznacz odpowiednio ah i bh. Do zamiany na postać szesnastkową możesz wykorzystać kalkulator dostępny w systemie Windows.
Oblicz zmienne par1, par2, ... Wartości zapisz szesnastkowo
par1=8500H + ah
par2 = A000H + ah
par3 = 30H + bh
par4 = 20H + bh
par5 = MSB(par1) (Most Significant Byte)
par6=LSB(par1) (Least Significant Byte)
par7=MSB(par2)
par8=LSB(par2)
a. Przetłumacz Program 1 na język maszynowy procesora 8080. Wszystkie parametry w postaci szesnastkowej (adresy też). Zapisz go w postaci:
Adres kod rozkazu rozkaz w postaci mnemonicznej. Np.,:
8000 3E 50 MVI A,50H
8002 D3 21 OUT 21H
Uwaga: przekład w kodzie HEX. Znak H na końcu liczby pominięto.
Przyjmij, że pierwszy rozkaz zapisany jest w komórce 8000H.
Przykładowy Program 1
MVI A, 3
MVI B, 6
ADD B
HLT
b. Wpisz program 1 w postaci źródłowej do symulatora a następnie skompiluj go. Czy otrzymany program binarny jest taki sam jak uzyskany w wyniku ręcznego tłumaczenia?
c. Wypróbuj program 1 wykonując go krokowo. Czy program działa zgodnie z oczekiwaniami?
2. Przetłumacz program 2 na język maszynowy.
Przyjmij, że pierwszy rozkaz zaczyna się w komórce 8000H. Uwaga w symulatorze SIM8085 możemy wskazać, od jakiego adresu ma zaczynać się przekład. Służy do tego dyrektywa ;org adres np. ;org 3000 wskazuje, że przekład należy umieścić od adresu 3000H
Przykładowy Program 2
MVI B,08H
LXI H, 9000H
MVI A,50H
POWT: MOV M,A
INR A
INX H
DCR B
JNZ POWT
HLT
Co będzie skutkiem wykonania powyższego programu?
Zmień poprzedni program, tak aby wpisywał do pamięci kolejne 100 liczb począwszy od 0.
Wykorzystując obliczone w punkcie 0 parametry przetłumacz na język maszynowy poniższy program. i ustal, co będzie wynikiem jego wykonania.
PoczÄ…tek od adresu par1.
MVI B,par3
LXI H, par2
MVI A,par4
POWT: MOV M,A
INR A
INX H
DCR B
JNZ POWT
HLT
Autor symulatora SIM8085 przewidział, że program będzie kończył się rozkazem HLT. W praktyce prawie nigdy nie kończymy aplikacji rozkazem HLT.
Dlaczego?
Dokąd powinno wrócić sterowanie po zakończeniu aplikacji?
Jak to zrobić?
Jakie będą skutki wykonania programu 3?
Program 3
POCZ: CALL POCZ
HLT
Wypróbuj ten program. Co zaobserwowałeś?
Czy działanie tego programu jest zgodne z oczekiwaniami?
Wykonaj dezasemblację następującego programu zapisanego w języku maszynowym:
Program 4: 3E 22 D3 15 00 00 21 00 AA 77 C7
Jakie skutki spowoduje wykonanie następującego programu:
Program 5
Adres Zawartość
F0A0 CD
F0A1 A0
F0A2 F0
Napisz program dodający 2 liczby 24 bitowe umieszczone w pamięci i przetłumacz go na język wewnętrzny procesora 8080.
Napisz program w języku wewnętrznym umieszczający w kolejnych 10 komórkach pamięci kolejne elementy ciągu Fibonacciego.
Ciąg Fibonacciego 1, 1, 2, 3, 5...-każda następna liczba jest sumą dwóch poprzednich
Wykonaj dezasemblację poniższego programu. Jeżeli kod nie odpowiada żadnemu rozkazowi to wstaw NR (Nielegalny Rozkaz).
Program 6: 3E 17 00 21 par3 55 par4 66 par5 par6 00 00
12. Jaki rozkaz wykonuje komputer na rysunku poniżej?