к примеру
R16 = 0b10001000 ; 136
надо разложить на
r17 = 0b00000001 ; 1
r18 = 0b00000011 ; 3
r19 = 0b00001100 ; 6
Код: Выделить всё
sign_100: ldi r21,100
clr r20 ;Count result
div_100: mov r0,r16 ;Division 100's
sub r0,r21
brcs ok_100
inc r20
mov r16,r0
rjmp div_100 ; Go again
ok_100: mov r17,r20 ; Store result
sign_10: ldi r21,10
clr r20 ;Count result
div_10: mov r0,r16 ;Division 10's
sub r0,r21
brcs ok_10
inc r20
mov r16,r0
rjmp div_10 ; Go again
ok_10: mov r18,r20 ; Store result
ok_1: mov r19,r16 ; Store result
Код: Выделить всё
sign_10000: ldi r18,$10
ldi r19,$27
clr r20 ;Count result
div_10000: movw r0,r16 ;Division 10000's
sub r0,r18
sbc r1,r19
brcs ok_10000
inc r20
movw r16,r0
rjmp div_10000 ; Go again
ok_10000: mov r25,r20 ; Store result
sign_1000: ldi r18,$e8
ldi r19,$03
clr r20 ;Count result
div_1000: movw r0,r16 ;Division 1000's
sub r0,r18
sbc r1,r19
brcs ok_1000
inc r20
movw r16,r0
rjmp div_1000 ; Go again
ok_1000: mov r24,r20 ; Store result
sign_100: ldi r18,$64
ldi r19,$00
clr r20 ;Count result
div_100: movw r0,r16 ;Division 100's
sub r0,r18
sbc r1,r19
brcs ok_100
inc r20
movw r16,r0
rjmp div_100 ; Go again
ok_100: mov r23,r20 ; Store result
sign_10: ldi r18,$0a
clr r20 ;Count result
div_10: mov r0,r16 ;Division 10's
sub r0,r18
brcs ok_10
inc r20
mov r16,r0
rjmp div_10 ; Go again
ok_10: mov r22,r20 ; Store result
ok_1: mov r21,r16 ; Store result