Bitové dělení

Zdrojový kód

3      5b00            *s
4      5b00            ;==============================================================;
5      5b00            ;== Verzia 04 == "xdiv" bitove delenie == 08.12.96 Busy soft ==;
6      5b00            ;==============================================================;
7      5b00            ;
8      5b00            ; Vstup:    aaa = 8 bajtov delenca
9      5b00            ;           bbb = 4 bajty delitela
10     5b00            ; Vystup:   ccc = 4 bajty podielu
11     5b00            ;           zvs = 4 bajty zvysku
12     5b00            ;
13     5b00            ; Cisla su kodovane v priamom kode, bez znamienka,
14     5b00            ; na nizsej adrese lezi vyssi bajt cisla.
15     5b00             
16     5b00                   org  #5b00               Buffery pre vypocet
17     5b00 00000001   aaa    db   0,0,0,1             8-bajtovy delenec (aj vysok)
18     5b04 010000ff   zvs    db   1,0,0,255           4-bajtovy zvysok
19     5b08 00000100   bbb    db   0,0,1,0             4-bajtovy delitel
20     5b0c 55555555   nic    db   #55,#55,#55,#55       (nic)
21     5b10 55555555   ccc    db   #55,#55,#55,#55     4-bajtovy podiel
22     5b14             
23     5b14                   org  #8000
24     8000 210000     del64  ld   hl,#00              Vycistenie pomocneho buffera
25     8003 220c5b            ld   (nic+0),hl
26     8006 220e5b            ld   (nic+2),hl
27     8009             
28     8009 0e20              ld   c,32                Hlavna slucka
29     800b             
30     800b af         loop   xor  a                   Vydelenie delitela dvomi
31     800c 0608              ld   b,8
32     800e 21085b            ld   hl,bbb
33     8011 cb1e       rot2   rr   (hl)
34     8013 23                inc  hl
35     8014 10fb              djnz rot2
36     8016 0608              ld   b,8
37     8018 21085b            ld   hl,bbb              Porovnanie delitela a delenca
38     801b 11005b            ld   de,aaa
39     801e 1a         comp   ld   a,(de)
40     801f be                cp   (hl)
41     8020 23                inc  hl
42     8021 13                inc  de
43     8022 3811              jr   c,nesub             ak je vecsi, tak nic
44     8024 10f8              djnz comp
45     8026 0608              ld   b,8                 ale ak nie je, tak potom
46     8028 210f5b            ld   hl,bbb+7            odcitanie delitela od delenca
47     802b 11075b            ld   de,aaa+7            (tu je carry nulove)
48     802e 1a         sub    ld   a,(de)
49     802f 9e                sbc  a,(hl)
50     8030 12                ld   (de),a
51     8031 1b                dec  de
52     8032 2b                dec  hl
53     8033 10f9              djnz sub                 (tu je carry nulove)
54     8035 3f         nesub  ccf
55     8036 0604              ld   b,4                 Zarotovanie bitu do podielu
56     8038 21135b            ld   hl,ccc+3            (ak sme odcitavali, bude to 1)
57     803b cb16       rot1   rl   (hl)
58     803d 2b                dec  hl
59     803e 10fb              djnz rot1
60     8040 0d                dec  c                   Uz sme to vykonali
61     8041 20c8              jr   nz,loop             pre vsetkych 32 bitov podielu ?
62     8043 c9                ret
63     8044             
64     8044            ;== Druha rutinka na delenie: v registroch
65     8044             
66     8044            ; Vstup:   HL = delenec
67     8044            ;           D = delitel
68     8044            ; Vystup:   A = podiel
69     8044            ;           L = zvysok
70     8044             
71     8044 0608       del16  ld   b,#08
72     8046 1e00              ld   e,#00
73     8048 cb3a       lopp   srl  d
74     804a cb1b              rr   e
75     804c ed52              sbc  hl,de
76     804e 3001              jr   nc,rot3
77     8050 19                add  hl,de
78     8051 3f         rot3   ccf
79     8052 17                rla
80     8053 10f3              djnz lopp
81     8055 c9                ret

 aaa    5b00  *  bbb    5b08  *  ccc    5b10  *  comp   801e  *
 del16  8044  *  del64  8000  *  loop   800b  *  lopp   8048  *
 nesub  8035  *  nic    5b0c  *  rot1   803b  *  rot2   8011  *
 rot3   8051  *  sub    802e  *  zvs    5b04  *                

Bytes:106  labels:15  errors:0   




Popis
Viz. zdroják

Poznámky
Nic...

Poslal
Busy