Lars Gjörling
<6825>
· Text 992 · w8 · kommentar
1987-10-28 16:55
Ärende: HEX till DEC
Även förslaget i mitt inlägg 990 kan lätt generaliseras till att
gälla godtycklig bas. Om man skall omvandla en ASCII-sträng, som
innehåller siffror (A-F... räknas också som siffror) av ett god-
tyckligt tal i en godtycklig bas och med godtyckligt antal bytes till
ett 16-bitars binärt tal (svaret får inte bli större), så kan man
göra så här:
IN: DE pekar på strängen
B = antalet bytes
C = basen (radix)
UT: HL = 16-bitars binärt tal, som utgör svaret
START LD HL,0 ; B = antalet bytes, C = basen
IGEN CALL MUL_BAS ; Multiplicera HL med basen.
LD A,(DE) ; DE pekar på in-strängen.
CALL ASC_TAL ; Ascii --> tal. Addera till HL
INC DE
DJNZ IGEN
RET ; Återgå med HL = resultatet.
;
ASC_TAL SUB 48 ; Om 0-9, ascii --> tal 0-9.
CP 10
JR C,SIFFRA
SUB 7 ; Om A-F, ascii --> tal 10-15
SIFFRA ADD A,L ; Addera ..........
JR NC,NOCARRY
INC H
NOCARRY LD L,A ; ...... A till HL.
RET
;
MUL_BAS PUSH BC ; HL skall multipliceras med basen
PUSH DE
LD B,C
DEC B ; B laddas med basen minus 1
LD D,H
LD E,L
LOOP ADD HL,DE
DJNZ LOOP ; Multiplikation genom upprepad ad-
POP DE ; dition (en mycket klumpig metod,
POP BC ; men basen är ju inte så stor).
RET
Mvh Lars