Moderators: simonsunnyboy, Mug UK, Zorro 2, Moderator Team
Code: Select all
tohex:
lea hexval,a0
move.l #'0000',(a0)+
_loop:
moveq #$f,d1
and d0,d1
move.b hextbl(pc,d1),-(a0)
lsr #4,d0
bne _loop
rts
hexval:
dc.b 0,0,0,0,0
hextbl:
dc.b '0123456789abcdef'
Code: Select all
todec:
lea decval,a0
move.l #'0000',(a0)+
move.b #'0',(a0)+
_loop:
ext.l d0
beq _exit
divu #10,d0
swap d0
add.b d0,-(a0)
swap d0
bra _loop
exit:
rts
decval:
dc.b 0,0,0,0,0,0
Code: Select all
hex_ascii:
moveq.l #0,d2
decimal:
ext.l d1
beq.s ascii
divu.w #10,d1
swap d1
lsl.l #4,d2
add.b d1,d2
swap d1
bra.s decimal
ascii:
move.b d2,(a2)
and.b #$f,(a2)
add.b #$30,(a2)+
lsr.l #4,d2
bne.s ascii
move.b #$d,(a2)+
move.b #$a,(a2)+
rts
rockyone wrote:I adapted to my needs.
how to optimize?
d1 = minimum 3 maximum 32000Code: Select all
hex_ascii:
moveq.l #0,d2
decimal:
ext.l d1
beq.s ascii
divu.w #10,d1
swap d1
lsl.l #4,d2
add.b d1,d2
swap d1
bra.s decimal
ascii:
move.b d2,(a2)
and.b #$f,(a2)
add.b #$30,(a2)+
lsr.l #4,d2
bne.s ascii
move.b #$d,(a2)+
move.b #$a,(a2)+
rts
Code: Select all
lsl.l #4,d2
add.b d1,d2
+ add.b #1,d2
swap d1
bra.s decimal
ascii:
move.b d2,d1
and.b #$f,d1
add.b #$2f,d1
move.b d1,(a2)+
- move.b d2,(a2)
- and.b #$f,(a2)
- add.b #$30,(a2)+
lsr.l #4,d2
bne.s ascii
Code: Select all
hex_ascii:
moveq.l #0,d2
decimal:
ext.l d1
beq.s ascii
divu.w #10,d1
swap d1
lsl.l #4,d2
add.b d1,d2
add.b #1,d2 ;+1
swap d1
bra.s decimal
ascii:
move.b d2,(a2) ; even or odd address
and.b #$f,(a2)
add.b #$2f,(a2)+ ; -1
lsr.l #4,d2
bne.s ascii
move.b #$d,(a2)+
move.b #$a,(a2)+
rts
rockyone wrote:always bored with the conversions.
How to convert back?
Code: Select all
atoi:
moveq.l #0,d0
moveq.l #0,d1
.loop:
move.b (a0)+,d1
tst.b d1
beq .end
subi.b #$30,d1
mulu.w #10,d0
add.w d1,d0
bra .loop
.end:
rts
Users browsing this forum: No registered users and 5 guests