Politechnika Białostocka
Wydział Elektryczny
Technika Mikroprocesorowa 2
Ćwiczenie numer: 2
Temat: Obsługa struktur tablicowych
na poziomie asemblera
Wykonujący ćwiczenie: Wróblewski Łukasz
Niewierowski Paweł
Studia dzienne
Kierunek: Elektronika i Telekomunikacja
Semestr V Grupa laboratoryjna L05
Prowadzący ćwiczenie: dr inż. R. Kociszewski
...........................
OCENA
25.10.2010r.
Data wykonania ćwiczenia
.........................................
Data i podpis prowadzącego
Cel ćwiczenia
Zdobycie praktycznych umiejętności w obsłudze struktur tablicowych na poziomie języka maszynowego.
Przebieg ćwiczenia
Z3. wypełnienie tablicy 8 wartości 1-bajtowych w NB ciągiem
geometrycznym o a0=1 i q=2;
CPU "z80.tbl"
HOF "int8"
Znaki: equ 30h ;zmienna o adresie zaczynającym się
;w 30 komorce pamieci
ld a,1 ;wartość poczatkowa akumulatora
ld b,8 ;tablica sklada się z 8 wartosci,
;czyli 8 powtórzeń petli
ld hl, znaki ;zmiana adresu,
Czysc: ld (hl), a ;przy każdej petli zwiekszanie
;naszej liczby o 1.
sla a ;przesuniecie bitowe
inc hl ;zmiana adresu, na kolejny
djnz czysc ;skok
halt
end
Program miał na celu stworzenie tablicy o odpowiedniej długości, wypełnionej ciągiem liczbowym (1;2;4;8 itd.)
Program zrealizowano za pomocą przesunięcia (które działa jak mnożenie lub dzielenie),
Z31. zmiana kolejności elementów w tablicy wartości 1-bajtowych według
reguły: 0,1,2,3,4,5,6,.. -> 0,2,4,6,...,1,3,5,7,...;
CPU "Z80.TBL"
HOF "INT8"
znaki: equ 100h ;zadeklarowanie zmiennej w 100h
tab1: equ 120h ;jak powyżej,
tab2: equ 140h ;jak powyżej
ld a,1 ;załadowanie do akumulatora 1
ld b,20 ;domyślnie b, jest długością
;np. zmiennej (adresu)
ld hl, znaki ;załadowanie adresu zmiennej `znaki'
czysc: ld (hl),a ;petla za pomocą której wypełnimy tablice ciągiem liczb (1;2;3, itd.)
add a,1
inc hl
djnz czysc
ld de,tab1 ;przypisanie do rejestru tab1.
ld hl,znaki ;analogicznie
ld b, 10
inc hl
parz: ;stworzenie oddzielnej tablicy,
;przepisujac liczby parzyste
ld a,(hl) ;przypisanie do a adresu hl
ld (de),a ;analogicznie
inc hl ;podwójna zmiana adresu
inc hl ;przepisujemy co druga liczbę
inc de
djnz parz
ld de,tab2 ;analogicznie, jak powyżej
ld hl,znaki
ld b, 10
nieparz:
ld a,(hl)
ld (de),a
inc hl ;ponownie co 2, jak dla parzystych
inc hl
inc de
djnz nieparz
ld de,tab1 ;
ld hl,znaki
ld b, 10
przepis1: ;przepisywanie tablicy 1.
ld a,(de)
ld (hl),a
inc hl
inc de
djnz przepis1
ld de,tab2
ld b, 10
przepis2: ;przepisywanie tablicy 2.
ld a,(de)
ld (hl),a
inc hl
inc de
djnz przepis2
halt
end
Ten program zrealizowaliśmy za pomocą przepisywania. Na początku zadeklarowaliśmy adresy naszych zmiennych - tablic. Żeby stworzyć tablicę w porządku: 1,3,5, … 2,4,6, najprościej było stworzyć nową tablicę o liczbach porządkowych w szeregu: 1,2,3,4 itd. Zaczynając od liczb nieparzystych, odpowiednio odczytywaliśmy (zapisując) co drugą zmienną, analogicznie było z liczbami parzystymi. Na końcu przepisaliśmy nasze tablice, pierwszo tablica z liczbami nieparzystymi, po niej z parzystymi. Cel został osiągnięty! Jak zazwyczaj - program można byłoby zrealizować inaczej, np. za pomocą rozkazów skoku (JP, JR dla warunku PO, PE gdy spełniona jest flaga), np. program `przeskakuje' dalej gdy liczba jest nieparzysta gdy rozpatrujemy przypadek dla parzystych.
Wnioski
Zajęcia pozwoliły na bliższe zapoznanie się z językiem niskiego poziomu jakim jest asembler.
Zapisywanie np. ciągu liczb, złożonych danych na pojedynczych zmiennych jest irracjonalne, mija się z celem. I tutaj okazuję się, że wykorzystanie tablic jednowymiarowych jest niezbędne. Posługiwanie się tablicami w programie, jako ciąg zmiennych jest bardzo wygodne i proste.
2