@RomanWorkshop, post #2
@Phibrizzo, post #7
@Phibrizzo, post #1
@Phibrizzo, post #7
@Don_Adan, post #9
; input D0 (word) ; output D1 (longword) ; D2,D3 temp move.l #$FFFF00FF,D1 ; wartosci poczatkowe to $FF dla kazdej z 5 cyfr move.w #$FFFF,D2 ; wartosci poczatkowe to $FF dla kazdej z 5 cyfr move.w #10000,D3 B10000 addq.b #1,D1 sub.w D3,D0 bcc.b B10000 add.w D3,D0 swap D1 ; pierwsza cyfra ustawiona move.w #1000,D3 B1000 addq.b #1,D2 sub.w D3,D0 bcc.b B1000 add.w D3,D0 rol.w #8,D2 ; druga cyfra (high byte, nieustawiona) moveq #100,D3 B100 addq.b #1,D1 sub.w D3,D0 bcc.b B100 add.w D3,D0 rol.w #8,D1 ; trzecia cyfra (high byte, ustawiona) moveq #10,D3 B10 addq.b #1,D2 sub.w D3,D0 bcc.b B10 add.w D3,D0 lsl.w #4,D2 ; czwarta i druga cyfra ustawiona move.b D0,D1 ; piata cyfra ustawiona or.w D2,D1 ; ustawienie wszystkich cyfr po kolei
@Phibrizzo, post #16
Idea jest prosta: przesuwamy w lewo po 1 bicie konwertowaną liczbę pakując wysuwany bit w szereg kolejnych pozycji BCD. Jeśli w każdej iteracji wartość w kolumnie (danym miejscu dziesiętnym) jest większe lub równe 5 to zwiększamy wartość tej liczby o 3
@Don_Adan, post #15
; input D0 (word) ; output D1 (longword) ; D2,D3 temp move.l #$FFFF00FF,D1 ; wartosci poczatkowe to $FF dla kazdej z 5 cyfr ; move.w #$FFFF,D2 ; wartosci poczatkowe to $FF dla kazdej z 5 cyfr move.w #10000,D3 B10000 addq.b #1,D1 sub.w D3,D0 bcc.b B10000 add.w D3,D0 swap D1 ; pierwsza cyfra ustawiona move.w D1,D2 ; + move.w #1000,D3 B1000 addq.b #1,D2 sub.w D3,D0 bcc.b B1000 add.w D3,D0 rol.w #8,D2 ; druga cyfra (high byte, nieustawiona) moveq #100,D3 B100 addq.b #1,D1 sub.w D3,D0 bcc.b B100 add.w D3,D0 rol.w #8,D1 ; trzecia cyfra (high byte, ustawiona) moveq #10,D3 B10 addq.b #1,D2 sub.w D3,D0 bcc.b B10 add.w D3,D0 lsl.w #4,D2 ; czwarta i druga cyfra ustawiona move.b D0,D1 ; piata cyfra ustawiona or.w D2,D1 ; ustawienie wszystkich cyfr po kolei