У меня что-то набор большой получается, и когда в следующий раз возникает потребность преобразовать число в строку, то вечно какой нибудь функции не хватает
В частности интересует с отображением нулей перед значением, или нет.
Код: Выделить всё
;Преобразование HEX значения R8:R9 в BCD R18,R19 и преобразование в ASCII -
HEX16_BCD4_ASCII:
CLR R18 ; BCD OUT 1'000,100
CLR R19 ; BCD OUT 10,1
LDI R16,16
GO_HEX:
subi r19,-0x33 ;add 0x33
sbrs r19, 3 ;if carry to bit 3
subi r19, 3 ;subtract 3
sbrs r19, 7 ;if carry to bit 7
subi r19, 0x30 ;subtract 0x30
subi r18,-0x33 ; \n" /*add 0x33*/
sbrs r18, 3 ; \n" /*if carry to bit 3,*/
subi r18, 3 ; \n" /*subtract 3*/
sbrs r18, 7 ; \n" /*if carry to bit 7,*/
subi r18, 0x30 ; \n" /*subtract 0x30*/
LSL R9
ROL R8 ;shift input*/
ROL r19
ROL r18 ; \n" /*shift out buffer*/
DEC R16 ;\n"
BRNE GO_HEX ;repeat for all bits*/
MOV R16,R18
MOV R17,R19
ANDI R19,$0F
SUBI R19,-$30 ;единицы для индикатора
SWAP R17
ANDI R17,$0F
SUBI R17,-$30 ;десятки для индикатора
ANDI R18,$0F
SUBI R18,-$30 ;сотни для индикатора
SWAP R16
ANDI R16,$0F
SUBI R16,-$30 ;тысячи для индикатора
MOV I1000,R16
MOV I100,R18
MOV I10,R17
MOV I1,R19
RET