Konwersja l. stałoprzecinkowej na ascii

0

Dawno tu nie byłem. Ciekawe czy ktoś jeszcze mnie pamięta :).

Stanąłem ostatnio przed ciekawym problemem i zastanawiam się nad prostszym sposobem od mojego. Muszę zrobić konwersje liczby stałoprzecinkowej (int32 część dziesiętna i 16 bitów część ułamkowa). W praktyce to nic trudnego jak się dysponuje operacjami +, - itp. Jednak w moim problemie są dwa kruczki. Pierwszy już wymieniłem (48 bitów i w tym ułamek) oraz drugi assembler i to nie procesorów Intel/AMD na PC. I tu widać właśnie problem, bo istnieje ograniczenie pamięciowe (jak najmniej), ograniczenie czasowe (w miarę szybko), ograniczenie stopniem skomplikowania tegoż algorytmu, bo w asemblerze to i tak jest tragedia pisać takie rzeczy. Do dyspozycji są działania +, -, * na liczbach 16 bitowych.

Oceńcie moje proste rozwiązanie. Opera się ono na tablicy liczb, gdzie każdy bajt to jeden znak liczby dziesiętnej. Oczywiście na początku to są zwykłe liczby, jeszcze nie ascii. Tablica to przyporządkowane ciągi cyfr zapisane w ten sposób odpowiadające poszczególnym bitom. To potem jest sumowane i tak otrzymywany jest wynik. Oczywiście w praktyce jest z tym trochę zabawy, jak to zwykle w asemblerze, ale pomysł wydał mi się prosty i nie wymagający myślenia i najważniejsze, ze bez skomplikowanej matematyki.

Dodatkowo napiszę, bo pewnie pytanie się pojawi - dlaczego assembler? Bo tylko on jest do wyboru oraz C bez optymalizacji. Z optymalizacją nie stać mnie na legalny kompilator a tylko taki wchodzi w grę. Zaś C bez optymalizacji pochłonąłby stanowczo za dużo pamięci, której ilość jest ograniczona.

0
RR napisał(a)

Muszę zrobić konwersje liczby stałoprzecinkowej

Zdefiniuj konwersję. Z czego na co chesz konwertować?

assembler i to nie procesorów Intel/AMD na PC.

A jaki?

I tu widać właśnie problem, bo istnieje ograniczenie pamięciowe (jak najmniej), ograniczenie czasowe (w miarę szybko), ograniczenie stopniem skomplikowania tegoż algorytmu

jakie, ile, czego, daj jakieś konkrety…

0

Z tego wszystkiego myślałem, że nie podałem, ale podałem :). W tytule jest napisane, że chodzi o konwersje liczby na ascii. Oczywiście łatwo się domyślić, że konwersja jest z BIN/HEX, bo to logiczne.

Procesor - rodzina dspic33
Ograniczenia pamięciowe - ram minimalnie, tylko bufor na wynik (czyli razem tak maksymalnie 40-50 bajtów), dostępnych parę rejestrów 16-bitowych, pamięć flash im mniej tym lepiej, bo do rozwiązania jest jeszcze klawiatura, wyświetlanie wyników a takie kilkadziesiąt funkcji, niektóre z dużym zbiorem danych, które również będą we flash.

1 użytkowników online, w tym zalogowanych: 0, gości: 1