Article View: pl.comp.lang.asm
Article #2556Re: Konwersja dużych liczb
From: Bogdan (bogdro)
Date: Mon, 09 Sep 2013 16:48
Date: Mon, 09 Sep 2013 16:48
80 lines
4751 bytes
4751 bytes
W dniu 08.09.2013 13:38, Kamil pisze: > Użytkownik "Bogdan (bogdro)" napisał: > >>> GetDlgItemText wczytuje liczby dec z kontrolki zamieniając je na >>> ASCII. > >> Tak właściwie, to już są w ASCII. Funkcja po prostu umieszcza tekst w >> buforze, nie konwertuje sama sobie np. cyfry "1" na wartość 31h, bo >> to, co robi za cyfrę "1", już ma wartość 31h. > > W kontrolce jest 1, a funkcja pobierając znak "w locie" go konwertuje > i do > bufora wpisuje już 31. Widziałem to w debuggerze. Nie do końca. W kontrolce NA EKRANIE wyświetla się "1". Ale w buforze kontrolki jest kod ASCII tego znaku, czyli 31h. Pewnie gdybyś podejrzał pamięć kontrolki, to znalazłbyś tam 31h, aby moim zdaniem trzymanie wartości w wewnętrznym buforze i konwersja "w locie" na ekran nie ma wielkiego sensu, bo co np. zrobić z innymi znakami. Tak samo, jakbyś sobie na konsoli wyświetlił znak 31h. Nie wyświetli się "49", tylko "1". >> Dobrze, to kroki powinny być takie: > >> 1. Oczyszczanie z ASCII: iterujemy po jednym znaku na raz: >> a) wczytaj kolejny znak z bufora (od przodu) >> b) odejmij 30h (kod zera w ASCII) lub po prostu '0' czy "0" >> c) bieżącą liczbę pomnóż przez 10 (mnożenie wielokrotnej precyzji z >> mojej strony) >> d) do bieżącej liczby dodaj znak pomniejszony o 30h w punkcie b) - tu >> nie trzeba dodawania wielokrotnej precyzji > > Jak rozumiem powyższe kroki trzeba wykonać wielokrotnie w pętli? Tyle > razy > ile mamy znaków? Ostatniego znaku nie mnożymy, a tylko go dodajemy do > wyniku? Wszystko się zgadza. Przed ostatnim znakiem mnożysz ostatni raz liczbę przez 10, po czym dodajesz ten ostatni znak. >> 2. Zamieniać na hex w pamięci już nie musisz. > > Nie muszę ponieważ mnożenie przez 10 jest właśnie konwersją dec na hex. Tak. Jest konwersją na postać w pamięci. >> 3. Mając tak przygotowane dane wejściowe, wykonujesz odpowiednie >> działanie (dodawanie, odejmowanie itp.). >> 4. Zamieniać na postać dziesiętną w pamięci nie musisz. > > A to niżej to co to jest jak nie właśnie konwersja hex na dec? :) Niezupełnie. To konwersja z hex/dec/oct/bin/cokolwiek na "zrozumiałą dla człowieka" formę zapisu dziesiętnego :), czyli na napis składający się ze znaków ASCII. Po tej operacji liczba nie jest w postaci dziesiętnej, ani żadnej innej logicznej. Jest konwertowana na postać gotową do wyświetlenia. Konwertować na dziesiętny można też w innym sensie, niż to, co tutaj jest. >> 5. Konwersja na ASCII: najlepiej też metoda po jednym znaku na raz: >> a) wyczyść bufor podręczny i wyjściowy >> b) jeśli liczba jest zerem, to przejdź do g) >> c) dzielimy liczbę przez 10 (dzielenie wielokrotnej precyzji) >> d) do RESZTY z dzielenia dodajemy '0' (lub 30h) >> e) zmienioną resztę z dzielenia zapisujemy w buforze podręcznym >> f) wracamy do punktu a) >> g) w buforze wyjściowym zapisz reszty z dzielenia znajdujące się w >> buforze podręcznym, ale WSPAK (pierwszy bajt ma być ostatnim) >> h) wyświetl bufor wyjściowy -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.Xiph.org www.TorProject.org Soft(EN): tinyurl.com/bogdro-soft
Technical Details
Message-ID:
<522dfbe2$0$1267$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<52239cda$0$1225$65785112@news.neostrada.pl> <522a0fcd$0$1459$65785112@news.neostrada.pl> <522a4a2c$0$1268$65785112@news.neostrada.pl> <522b5a7a$0$1263$65785112@news.neostrada.pl> <522c61b4$0$1470$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Date: Mon, 09 Sep 2013 18:48:29 +0200 From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 Newsgroups: pl.comp.lang.asm Subject: Re: Konwersja dużych liczb References: <52239cda$0$1225$65785112@news.neostrada.pl> <522a0fcd$0$1459$65785112@news.neostrada.pl> <522a4a2c$0$1268$65785112@news.neostrada.pl> <522b5a7a$0$1263$65785112@news.neostrada.pl> <522c61b4$0$1470$65785112@news.neostrada.pl> In-Reply-To: <522c61b4$0$1470$65785112@news.neostrada.pl> Lines: 80 Message-ID: <522dfbe2$0$1267$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: rudy.mif.pg.gda.pl X-Trace: 1378745316 unt-rea-a-02.news.neostrada.pl 1267 153.19.42.16:55293 X-Complaints-To: abuse@news.neostrada.pl X-Received-Bytes: 4410 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit