Страница 1 из 1
Convert to ASCII
Добавлено: Ср мар 15, 2017 10:42:04
pokk
Кто какими набором функциями пользуется для преобразования числа в строку?
У меня что-то набор большой получается, и когда в следующий раз возникает потребность преобразовать число в строку, то вечно какой нибудь функции не хватает

.
В частности интересует с отображением нулей перед значением, или нет.
Re: Convert to ASCII
Добавлено: Ср мар 15, 2017 10:54:27
BOB51
Для ассемблера - это табличная перекодировка...

Re: Convert to ASCII
Добавлено: Ср мар 15, 2017 11:23:19
akl
Для ASCII преобразование в тетрады+0x30. Незначащие 0 заменяются кодом 0x20. Типа такого.
Спойлер
Код: Выделить всё
;Преобразование 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
Re: Convert to ASCII
Добавлено: Ср мар 15, 2017 11:58:09
pokk
С самим алгоритмом преобразованием все понятно, вся загвоздка начинается когда надо то 3 нуля вывести перед числом то четыре нуля, то хвост отбросить, то точку где-то в середине воткнуть, ну и все тоже самое для отрицательных чисел.
Re: Convert to ASCII
Добавлено: Ср мар 15, 2017 12:15:29
BOB51
Это уже относится к опциям редактирования/разметки страницы/формата.

Re: Convert to ASCII
Добавлено: Ср мар 15, 2017 15:37:19
ARV
на Си все проблемы решаются при помощи единственной функции printf.
если надо экономно - itoa или аналоги ltoa и т.п. (нули дописывать слева самостоятельно).