[an error occurred while processing this directive]
|
в аккурат сегодня ночью проверял... :-)
;*********************************************************************************
; Процедура преобразования двоичного числа (1 байт) в его строковое представление.
; Результат записывает сразу в область BCDstring, завершая нулевым байтом.
; Если старшие байты - нулевые, заменяет их пробелами
; исходное число - в temp0; для промежуточных результатов задействованы
; temp1, temp2
;*********************************************************************************
bin_to_string:
push temp1 ;
push temp2 ;
clr temp2 ;highest byte of result;
clr temp1 ;middle byte
FirstLoop:
subi temp0, 10 ;input = input - 10
brcs exit_first ;
inc temp1 ;
rjmp FirstLoop ;
exit_first:
subi temp0, -10 ;
Second_Loop:
subi temp1, 10 ;if middle byte is greater than 10...
brcs exit_second ;
inc temp2 ;
rjmp Second_Loop ;
exit_second:
subi temp1, -10 ;
;next, make ASCII codes...
tst temp2
breq Zero2
ori temp2, 0x10 ;if not zero - make digit code
ori temp1, 0x10 ;and prevent "Space" in middle, even it is equal to Zero
Zero2:
ori temp2, 0x20 ;
tst temp1
breq Zero1
ori temp1, 0x10 ;
Zero1:
ori temp1, 0x20 ;
;lowest byte don`t replaced with "Space", if is Zero
ori temp0, 0x30 ;
sts BCDstring, temp2 ;
sts BCDstring+1, temp1 ;
sts BCDstring+2, temp0 ;
clr temp0;
sts BCDstring+3, temp0 ;
pop temp2 ;
pop temp1 ;
ret
E-mail: info@telesys.ru