![]() |
![]() |
---|
H | Binaarkood | Kümnendkood, kui binaararv on | H | Binaarkood | Kümnendkood, kui binaararv on | ||
---|---|---|---|---|---|---|---|
otsekoodis | täiendkoodis | otsekoodis | täiendkoodis | ||||
F | 1111 | 15 | -1 | 7 | 0111 | 7 | +7 |
E | 1110 | 14 | -2 | 6 | 0110 | 6 | +6 |
D | 1101 | 13 | -3 | 5 | 0101 | 5 | +5 |
C | 1100 | 12 | -4 | 4 | 0100 | 4 | +4 |
B | 1011 | 11 | -5 | 3 | 0011 | 3 | +3 |
A | 1010 | 10 | -6 | 2 | 0010 | 2 | +2 |
9 | 1001 | 9 | -7 | 1 | 0001 | 1 | +1 |
8 | 1000 | 8 | -8 | 0 | 0000 | 0 | 0 |
Positiivse ja negatiivse arvu teisendamiseks vastavalt negatiivseks ja positiivseks (1) inverteeritakse teisendatava arvu kõik bitid, mis on samaväärne lahutamisega arvust, mille kõik bitid on ühed, ja liidetakse saadud arvule 1 või (2) lahutatakse teisendatav arv arvust null.
Täiendkoodis oleva sama absoluutväärtusega positiivse ja negatiivse arvu summa on null.
D | (1) | D | (1) | D | (2) | D | (2) | |||
+ 6 | 0110 | - 6 | 1010 | 0000 | 0000 | arv null | ||||
1001 | 0101 | inverteeritud arv | + 6 | -0110 | - 6 | -1010 | lahutada teisendatav arv | |||
+ 1 | + 1 | liita 1 | - 6 | 1010 | + 6 | 0110 | tulemus | |||
- 6 | 1010 | + 6 | 0110 | tulemus |
Programmi täitmise kiiruse seisukohast on meetod (2) kiirem, sest kahe tehte (lahutamine ja liitmine) asemel tuleb teha vaid 1 tehe (lahutamine).
Protsessoril on olemas käsk CPL 8-bitise arvu inverteerimiseks ja käsk NEG 8-bitise arvu teisendamiseks negatiivseks või positiivseks.
4.4.1.2. Ülesanded
(1) Koostada algoritm ja programm 16-bitise arvu teisendamiseks negatiivseks ja positiivseks.
4.4.2. Korrutamine
4.4.2.1. Põhimõte
Protsessoril Z80180 on olemas käsk MLT ww 8-bitiste arvude korrutamiseks. Kui vajatakse suuremat bittide arvu, tuleb vastavad (alam)programmid ise koostada. See vajadus tekib aga kohe siis, kui soovitakse teostada signaali- ja andmetöötlust
Korrutamisalgoritme on mitmeid. Siin vaadeldakse algoritmi, mille korral korrutatakse järjest korrutaja vanima kohaga läbi korrutatav, saadud vahetulemus liidetakse lõpptulemusele ja nihutatakse lõpptulemust 1 koha võrra vasemale [14, lk. 185...187]. Selliste tsüklite arv on võrdne korrutaja kohtade arvuga. Tulemuse kohtade arv on võrdne korrutaja ja korrutatava kohtade arvu summaga. Seega kahe 8-bitise arvu korrutis on maksimaalselt 16-bitine, 8- ja 16-bitise arvu korrutis on maksimaalselt 24-bitine jne. Nt.:
56D*453D=25368D 38H*1C5H=(0)6318H 01B*101B=(00)101B 99D*999D=98901D FFH*FFFH=FEF01H 11B*111B=10101B (D - kümnendkood; H - heksakood; B - binaarkood)
14.5D*10.5D=(0)152.25D E.8H*A.8H=98.4(0)H 1110.1000B*1010.1000B=10011000.01000000BAlgoritmis joonisel 4.4.2 esinevad tähised nagu VAHETULEMUS, LOENDUR, KORRUTAJA, KORRUTATAV, TULEMUS jne. tähistavad registreid ja/või mälupesi, kus on vastavad suurused. Korrutamisprogrammi sisendandmeteks on tegurid, väljundandmeteks korrutis.
4.4.2.2. Ülesanded
(1) Siluda alljärgnev programm MLT816 vastavalt algoritmile joonisel 4.4.2. Esitada leitud vead. Täiendada seda programmi monitorprogrammis olevate alamprogrammidega nii, et tegureid oleks võimalik sisestada klaviatuurilt ja korrutis inditseerida kuvaril.
(2) Koostada programm kahe 32-bitise märgita arvu korrutamiseks. Programm koostada nii, et seda oleks võimalik kasutada teiste programmide alamprogrammina.
; Programm MLT816
;Programm korrutab omavahel 2 8-bitist märgita täis- vôi murdarvu, kusjuures korrutis
;on 16-bitine. Korrutatav peab olema D-registris ja korrutaja E-registris. Korrutis on
;registris HL. Kasutatakse DE-, HL-, BC- ja A-registreid.
include LKZ180.INC
MLT816: LD SP,STACK ;Seada pinuviit
LD HL,0H ;Vahetulemus:=0
LD BC,08H ;C:=loendur
MLT8162: LD A,L
SRA E
JP C,MLT8163 ;Korrutaja vanim bitt = 0?
ADD A,D ;Liita tulemusele korrutatav
LD L,A
LD A,H
ADC A,B
LD H,A
MLT8163: DEC C ;Vähendada loendurit
JP Z,MLT8161 ;Loendur = 0? Kui JA, minna lõppu
SLA L ;Ei, nihutada tulemust vasemale
RR H
JP MLT8162 ;Tagasi tsükli algusesse
MLT8161: RST 8
END
(3) Koostada algoritm märgiga arvude korrutamiseks. Koostada programm märgiga arvude korrutamiseks, kasutades silutud programmi MLT816, enda koostatud programmi 32-bitiste arvude korrutamiseks või püsimälus olevat 16-bitiste arvude korrutamise alamprogrammi MULT16.
4.4.3. Täisarvude jagamine
4.4.3.1. Põhimõte
Protsessoril Z80180 puuduvad käsud jagamistehete sooritamiseks. Seepärast tuleb kasutajal vajaduse korral vastavad alamprogrammid ise koostada.
Jagamine toimub binaar- ja heksakoodis sama algoritmi järgi nagu kümnendkoodiski [14, lk.187...192]:
Kui jagatav ja/või jagaja on märgiga arvud, tuleb selgitada välja jagatise ja jäägi märgid ning need jagamise ajaks salvestada. Seejärel teisendada negatiivsed arvud positiivseks, teostada jagamine ja vastavalt salvestatud märkidele teisendada jagatis ning jääk.
Märgid määratakse järgmiselt [15, lk.95]:
4.4.3.2. Ülesanded
(1) Siluda ja kommenteerida alamprogramm DIV8. Esitada avastatud vead. Millises registris on jääk?
(2) Koostada jagamisalgoritmid koos nullise jagaja kontrolliga, nullise jagatava kontrolliga ning jagatise ja jäägi märkide määramisega.
(3) Koostada programm 16-bitise märgiga täisarvu jagamiseks 16-bitise märgita täisarvuga, kontrollides seejuures kas jagatav ja jagaja on nullid või mitte.
; Programm DIV8
;Programm jagab 2 8-bitist märgita täisarvu. Jagatav peab olema registris B, jagaja aga
; registris C. Tulemus on registris L. Kui jagaja on 0, kirjutatakse L-registrisse tulemus FFH.
;Jääk on D-registris. Kasutatakse A-, BC-, HL- ja D-registreid.
include LKZ180.INC
DIV8: LD SP,STACK
LD H,08H
LD D,0H
LD L,0H
LD A,0FFH
TST C
JP NZ,DIV80
LD L,0FFH
JP DIV82
DIV80: SLA B
RR D
LD D,A
ADD C
JP NC,DIV81
LD D,A
SCF
RL L
JP DIV83
DIV81: SCF
CCF
RR L
DIV83: DEC H
JP Z,DIV82
JP DIV80
DIV82: RST 8
END
4.4.4. Murdarvude jagamine
4.4.4.1. Põhimõte
Murdarvu T.M saab esitada järgmisel kujul [15, lk.12]:
Märgiga murdarvude jagamine toimub analoogselt märgiga täisarvude jagamisele: määrata jagatise märk, salvestada see, teisendada negatiivsed arvud positiivseteks, jagada, teisendada vastavalt märgile jagatis. Samuti tuleb kontrollida, kas jagaja on null või mitte ja võiks kontrollida ka, kas jagatav on null.
4.4.4.2. Ülesanded
(1) Koostada algoritm ja programm 16-bitise (8+8) märgita murdarvu jagamiseks 16-bitise (8+8) märgita murdarvuga. Seejuures kontrollida, kas jagaja on null või mitte.
(2) Koostada algoritm ja programm 16-bitise (8+8) märgiga murdarvu jagamiseks 16-bitise (8+8) märgiga murdarvuga. Seejuures kontrollida, kas jagaja on null või mitte.
![]() |
![]() |
![]() |
![]() |
---|