Převody bin<->dec

Zdrojový kód

0            *s
4      5b00                                            06 "xdec" Prevod cisel
5      5b00            *z!
6      5b00            z
7      5b00            ;Prevod bin->dec bez znamienka
8      5b00            ; in: bin
9      5b00            ;out: dec
10     5b00             
11     5b00 210560     bindec ld   hl,zzdec            Vynulovanie buffera dec
12     5b03 01000a            ld   bc,lldec*#0100
13     5b06 71         cls1   ld   (hl),c
14     5b07 23                inc  hl
15     5b08 10fc              djnz cls1
16     5b0a 0e20              ld   c,8*llbin           Opakuj pre kazdy bit bin:
17     5b0c cd735b     bndc0  call binx2               vyrotovanie bitu z bin
18     5b0f 210f60            ld   hl,eedec
19     5b12 060a              ld   b,lldec             a zarotovanie toho bitu do dec
20     5b14 2b         bndc2  dec  hl
21     5b15 7e                ld   a,(hl)
22     5b16 8f                adc  a,a
23     5b17 fe0a              cp   #0a
24     5b19 3802              jr   c,bndc3
25     5b1b d60a              sub  #0a
26     5b1d 77         bndc3  ld   (hl),a
27     5b1e 3f                ccf
28     5b1f 10f3              djnz bndc2
29     5b21 0d                dec  c
30     5b22 20e8              jr   nz,bndc0
31     5b24 c9                ret
32     5b25             
33     5b25            ;Prevod dec->bin bez znamienka
34     5b25            ; in: dec
35     5b25            ;out: bin
36     5b25             
37     5b25 210060     decbin ld   hl,zzbin            Vynulovanie bin
38     5b28 010004            ld   bc,llbin*#0100
39     5b2b 71         cls2   ld   (hl),c
40     5b2c 23                inc  hl
41     5b2d 10fc              djnz cls2                Vynasobenie bin desiatimi,
42     5b2f dd210560          ld   ix,zzdec            a to takto:
43     5b33 0e0a              ld   c,lldec             Najprv to vynasobime dvomi
44     5b35 cd735b     dcbn0  call binx2
45     5b38 210060            ld   hl,zzbin
46     5b3b 110f60            ld   de,zzbuf            Potom to presunieme
47     5b3e 0604              ld   b,llbin             do pomocneho buffera
48     5b40 7e         dcbn1  ld   a,(hl)
49     5b41 12                ld   (de),a
50     5b42 23                inc  hl
51     5b43 13                inc  de
52     5b44 10fa              djnz dcbn1
53     5b46 cd735b            call binx2               Vynasobime styrmi
54     5b49 cd735b            call binx2               (cize dva krat dvomi)
55     5b4c 210060            ld   hl,zzbin
56     5b4f 110f60            ld   de,zzbuf
57     5b52 0604              ld   b,llbin             A potom k tomu pripocitame
58     5b54 af                xor  a                   to z pomocneho buffera
59     5b55 1a         dcbn2  ld   a,(de)
60     5b56 8e                adc  a,(hl)
61     5b57 77                ld   (hl),a
62     5b58 13                inc  de
63     5b59 23                inc  hl
64     5b5a 10f9              djnz dcbn2               A je to.
65     5b5c 210060            ld   hl,zzbin
66     5b5f 0603              ld   b,llbin-1           Este pripocitame
67     5b61 dd7e00            ld   a,(ix+#00)          jednu cislicu z dec
68     5b64 86                add  a,(hl)
69     5b65 77                ld   (hl),a
70     5b66 23         dcbn3  inc  hl
71     5b67 3e00              ld   a,#00
72     5b69 8e                adc  a,(hl)
73     5b6a 77                ld   (hl),a
74     5b6b 10f9              djnz dcbn3
75     5b6d dd23              inc  ix
76     5b6f 0d                dec  c                   a opakujeme pre
77     5b70 20c3              jr   nz,dcbn0            kazdu cislicu z dec
78     5b72 c9                ret
79     5b73             
80     5b73            ;Nejake podprogramy
81     5b73             
82     5b73 210060     binx2  ld   hl,zzbin            Nasobenie bin dvomi
83     5b76 0604              ld   b,llbin
84     5b78 af                xor  a
85     5b79 cb16       bnxx2  rl   (hl)
86     5b7b 23                inc  hl
87     5b7c 10fb              djnz bnxx2
88     5b7e c9                ret
89     5b7f             
90     5b7f 210060     binneg ld   hl,zzbin            Negacia bin
91     5b82 0604              ld   b,llbin
92     5b84 37                scf
93     5b85 7e         bnngx  ld   a,(hl)
94     5b86 2f                cpl
95     5b87 ce00              adc  a,#00
96     5b89 77                ld   (hl),a
97     5b8a 23                inc  hl
98     5b8b 10f8              djnz bnngx
99     5b8d c9                ret
100    5b8e             
101    5b8e            ;Prevod bin-dec so znamienkom
102    5b8e            ; in: bin v doplnkovom formate
103    5b8e            ;out: dec + znamienko
104    5b8e             
105    5b8e 3a0360     zbndec ld   a,(eebin-1)
106    5b91 cb7f              bit  7,a                 znamienkovy bit
107    5b93 3e2b              ld   a,'+'
108    5b95 2805              jr   z,zbn1
109    5b97 cd7f5b            call binneg
110    5b9a 3e2d              ld   a,'-'
111    5b9c 320460     zbn1   ld   (sign),a            zapis znamienka
112    5b9f c3005b            jp   bindec
113    5ba2             
114    5ba2            ;Prevod dec->bin so znamienkom
115    5ba2            ; in: dec + znamienko
116    5ba2            ;out: bin v doplnkovom formate
117    5ba2             
118    5ba2 cd255b     zdcbin call decbin
119    5ba5 3a0460            ld   a,(sign)
120    5ba8 fe2d              cp   '-'                 Ak to nie minus,
121    5baa c0                ret  nz                  tak nic
122    5bab 18d2              jr   binneg              ak je minus, tak negacia
123    5bad             
124    5bad            k
125    5bad            l      =    k-z
126    5bad                   org  #6000
127    6000             
128    6000            ;Buffery systemu - pre ulozenie vstupov a vystupov rutiniek
129    6000             
130    6000            ;BIN ... binarna hodnota cisla
131    6000            ;        najprv ide nizsi bajt
132    6000            ;        a po nom vyssie bajty
133    6000             
134    6000 ffffffff   zzbin  db   #ff,#ff,#ff,#ff
135    6004            eebin
136    6004            llbin  =    eebin-zzbin
137    6004             
138    6004            ;DEC ... postupnost desiatkovych cislic
139    6004            ;        najprv idu najvyssie rady
140    6004            ;        a po nich nizsie desiatkove rady
141    6004            ; Dlzka buffera musi byt taka aby sa do nej mestilo cislo z bin
142    6004            ; V pripade prevodov so znamienkom sa pouziva aj znamienko
143    6004             
144    6004 2b         sign   db   '+'
145    6005 00000000   zzdec  db   0,0,0,0,0
            00          
146    600a 06050503          db   6,5,5,3,5
            05          
147    600f            eedec
148    600f            lldec  =    eedec-zzdec
149    600f             
150    600f            ;Pomocny buffer pouzity pre nasobenie desiatimi,
151    600f            ;struktura dat taka ista ako BIN
152    600f             
153    600f 55555555   zzbuf  db   #55,#55,#55,#55
154    6013            eebuf

 bindec 5b00  *  binneg 5b7f  *  binx2  5b73  *  bndc0  5b0c  *
 bndc2  5b14  *  bndc3  5b1d  *  bnngx  5b85  *  bnxx2  5b79  *
 cls1   5b06  *  cls2   5b2b  *  dcbn0  5b35  *  dcbn1  5b40  *
 dcbn2  5b55  *  dcbn3  5b66  *  decbin 5b25  *  eebin  6004  *
 eebuf  6013  *  eedec  600f  *  k      5bad  *  l      00ad  *
 llbin  0004  *  lldec  000a  *  sign   6004  *  z      5b00  *
 zbn1   5b9c  *  zbndec 5b8e  *  zdcbin 5ba2  *  zzbin  6000  *
 zzbuf  600f  *  zzdec  6005  *                                

Bytes:192  labels:30  errors:0   




Popis
Viz. zdroják

Poznámky
Obsahuje všechny varianty převodu se znaménkem i bez něj...

Poslal
Busy