Article View: pl.comp.lang.asm
Article #2119Re: Algorytm szybkiego mnozenia - podnoszenie do kwadratu
From: Bogdan (bogdro)
Date: Tue, 02 Mar 2010 18:07
Date: Tue, 02 Mar 2010 18:07
40 lines
2803 bytes
2803 bytes
W dniu 28.02.2010 22:59, roxy pisze: > Witam > Czy ktos moze mi podac namiary na algorytm szybkiego mnozenia dwoch liczb > 16bitowych. > Dokladnie chodzi o pomnozenie liczby A przez samą siebie czyli AxA > (podnoszenie do potęgi 2). > Do dyspozycji mam mikrokontroler 8bit i mozliwosc wykonywania dodawania, > odejmowania i mnozenie dwoch liczb 8 bit. > Moze jest jakas własciwośc podczas podnoszenia do kwadratu liczby ktorą > mozna by wykorzystać i przyspieszyć znacząco obliczenia? (tak jak np podczas > mnozenia liczby A x 4 to to samo co a<<2 a znaczaco brzyspiesza działanie). Witam. Mi przyszło do głowy takie coś: 1. ustaw wynik na zero 2. idąc bit po bicie w A: jeśli bit numer n (licząc od zera) jest ustawiony, dodaj do wyniku A<<n. 3. wypychanie bitów nie mieszczących się w rejestrach jest łatwe - wysunięty bit wstawiasz jako najmłodszy do rejestru grającego rolę "starszej części" w stosunku do bieżącego rejestru Oczywiście, nie musisz za każdym razem wyliczać A<<n, możesz wyniki tymczasowe trzymać sobie w zmiennej i tylko przesuwać o tyle, ile brakuje od ostatniego razu. A czy to będzie szybkie to nie mam pojęcia. Prawdopodobnie nie, ale wszystko zależy od szybkości instrukcji mnożenia, dodawania i przesuwania bitowego (sprawdzanie bitu pomijam). Pobierz z http://webster.cs.usr.edu książkę "Art of asembler" - tam masz opisane między innymi operacje wielokrotnej precyzji (gdy argumenty działań nie mieszczą się w rejestrach). Opis części takich algorytmów znajdziesz też na http://rudy.mif.pg.gda.pl/~bogdro/dos/a_kurs14.htm -- 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.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Technical Details
Message-ID:
<hmjk4l$mac$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<hmep02$m1i$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Algorytm szybkiego mnozenia - podnoszenie do kwadratu Date: Tue, 02 Mar 2010 19:07:10 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 40 Message-ID: <hmjk4l$mac$1@inews.gazeta.pl> References: <hmep02$m1i$1@news.onet.pl> NNTP-Posting-Host: rudy.mif.pg.gda.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1267553242 22860 153.19.42.16 (2 Mar 2010 18:07:22 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Tue, 2 Mar 2010 18:07:22 +0000 (UTC) X-User: bog.d In-Reply-To: <hmep02$m1i$1@news.onet.pl> User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.1.8) Gecko/20100216 Thunderbird/3.0.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit