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=173
10
b = ( 2 ostatnie cyfry numeru indeksu) jeżeli b <20 to przyjmij =52
10
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)
1.
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
3.
Co będzie skutkiem wykonania powyższego programu?
4.
Zmień poprzedni program, tak aby wpisywał do pamięci kolejne 100 liczb począwszy od 0.
5.
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
6.
Autor symulatora SIM8085 przewidział, że program będzie kończył się rozkazem HLT. W praktyce
prawie nigdy nie kończymy aplikacji rozkazem HLT.
a.
Dlaczego?
b.
Dokąd powinno wrócić sterowanie po zakończeniu aplikacji?
c.
Jak to zrobić?
7.
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?
8.
Wykonaj dezasemblację następującego programu zapisanego w języku maszynowym:
Program 4: 3E 22 D3 15 00 00 21 00 AA 77 C7
9.
Jakie skutki spowoduje wykonanie następującego programu:
Program 5
Adres
Zawarto
ść
F0A0
CD
F0A1
A0
F0A2
F0
10.
Napisz program dodający 2 liczby 24 bitowe umieszczone w pamięci i przetłumacz go na język
wewnętrzny procesora 8080.
11.
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
12.
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?