Temat: Dzielenie liczb na procesorze Z80
Skład grupy:
Paweł Wyszyński
Arkadiusz Żanowski
Zadanie:
Zamodelować program realizujący dzielenie dwóch liczb dodatnich bez znaku.
Dla zrealizowania zadanego zadania zakładam, że:
rejestry B i C przechowują odpowiedni najbardziej i najmniej znaczący bajt dzielnej
rejestr D przechowuje dzielnik
ośmiobitowy iloraz powstaje w rejestrze C, natomiast reszta z dzielenia w rejestrze B
maksymalna wartość dzielnika to FF
maksymalna wartość dzielnej to FF FF
Algorytm dzielenia można sformułować w następujący sposób:
Testuj najmniej znaczący bit dzielnika. Jeżeli jest on równy 0, przejdź do 2). Jeżeli jest równy 1, odejmij dzielnik od najbardziej znaczącego bajtu wyniku.
Przesuń 2-bajtowy wynik o jeden bit w lewo
Powtórz 1) i 2) tyle razy, aby wszystkie bity dzielnika zostały przetestowane.
Algorytm dzielenia graficzny
Program dzielenia z opisami:
################################################################################
# #
# Micro Series Z80 Assembler V1.25/MD1 14/Apr/99 17:30:37 #
# #
# Source = c:dziel.s01 #
# List = c:dziel.lst #
# Object = c:dziel.r01 #
# Options = #
# #
# (c) Copyright IAR Systems 1984 #
################################################################################
1 ;dzielenie liczb dzielna 16 bitowa dzielnik 8 bitowy
2 ;B - najbardziej znaczący bit C-najmniej znaczący bit
3 ;D-dzielnik
4 ;WYNIK dzielenia - C, reszta z dzielenia - B
5 ;E - rejestr pomocniczy
6
7
8 0000 1E09 ld e,9 ;inicjalizacja licznika bitów w rejestrze pomocniczym
9 0002 78 ld a,b ;najbardziej znaczący bit dzielnika do akumulatora
10 0003 start:
11 0003 47 ld b,a ;zawartość a do b
12 0004 79 ld a,c ;najmniej znaczący bit dzielnej do akumulatora
13 0005 17 rla ;przesuń akumulator w lewo (najmniej znaczący bit
14 ;dzielnika)
15 0006 4F ld c,a ;zawartość akumulatora zapisz do c
16 0007 1D dec e ;zmniejsz o 1 licznik bitów
17 0008 CA1500 jp z,p1 ;jeśli licznik=0 to skocz do p1
18 000B 78 ld a,b ;najbardziej znaczący bit dzielnej do akumulatora
19 000C 17 rla ;przesuń w lewo a (najbardziej znaczący bit dzielnika)
20 000D 92 sub d ;odejmij od a zawartość d (dzielnik)
21 000E D20300 jp nc,start ;jeśli CY=0 to skocz na start
22 0011 82 add a,d ;jeśli nie to dodaj do a zawartość d (dzielnik)
23 0012 C30300 jp start ;skocz na start
24 0015 p1:
25 ;p1 jest wykonywane dopiero po przetestowaniu
26 ;wszystkich bitów
27
28 0015 17 rla ;przesuń a w lewo
29 0016 5F ld e,a ;zawartość a do e (rejestr pomocniczy)
30 0017 3EFF ld a,255 ;do a wpisz wartość 255 (FFh)
31 0019 A9 xor c ;dodaj modulo 2 zawartość c do akumulatora
32 001A 4F ld c,a ;zawartość a zapisz do c (wynik dzielenia)
33 001B 7B ld a,e ;zawartość e (rejestr pomocniczy) do akumulatora
34 001C 1F rra ;przesuń w prawo akumulator
35
36 001D 76 halt
37 001E end
Errors: None #########
Bytes: 30 # dziel #
CRC: F53C #########
Algorytm programu wzorowany jest na algorytmie mnożenia dwubajtowego realizowanego w toku poprzedniego laboratorium z tą różnicą, że:
rozkazy dodawania zostały zastąpione rozkazami odejmowania;
rozkazy przesunięcia w prawo są zastępowane rozkazami przesunięcia w lewo.
Laboratorium
z
Techniki Mikroprocesorowej
Temat: Dzielenie liczb na procesorze Z80.
Skład grupy:
Paweł Wyszyński
Arkadiusz Żanowski
START
Sprawdź, czy najmniej znaczący bit dzielnika, jest ...
Przesuń dwubajtowy wynik o 1 bit w lewo
Odejmij dzielnik od najbardziej znaczącego bajtu wyniku
Sprawdź, czy jest to ostatni bit ?
Testuj następny bit !
Koniec !!!