Article View: pl.comp.lang.asm
Article #2493Re: Debugger
From: Bogdan (bogdro)
Date: Mon, 04 Jul 2011 15:56
Date: Mon, 04 Jul 2011 15:56
87 lines
4672 bytes
4672 bytes
W dniu 04.07.2011 15:16, Remek pisze: > Użytkownik "Michoo" napisał: > >>> Jak >>> instrukcje procesora implementować w procedurze i po co? > >> Bo na liczbie długości podwojonego słowa procesora ROR na składowych >> nie zrobi tego o co chodzi. > > W związku z tym stosuje się procedurę wykorzystującą właściwe instrukcje. > Czy to oznacza implementację ROL??? Nie, bo ROL jest zaimplementowana w procesorze. To oznacza implementację "operacji rotacji bitów na liczbie nie mieszczącej się w rejestrze". Natomiast na procesorach nie posiadających instrukcji robiącej to, co ROL na x86, oznaczałoby to implementację "operacji rotacji bitów (która na procesorach x86 przyjmuje postać instrukcji ROL)". Nie implementujesz instrukcji procesora, bo od tego są producenci procesorów. Piszesz procedurę, która imituje funkcjonalność pewnej instrukcji procesora, dlatego, że ta ma swoje ograniczenia (np. rozmiar lub typ rejestru), które trzeba w danym przypadku jakoś przeskoczyć. Piszesz procedurę, która robi to, co zrobiłaby ta instrukcja, gdyby mogła. Jest to, w jakimś sensie, implementacja (oczywiście programowa) pewnej innej, "rozszerzonej" wersji instrukcji, ale nie samej instrukcji. >>> Tym bardziej jeśli >>> chodzi o ROL to w procedurach wielokrotnej precyzji ma raczej małe >>> zastosowanie. > >> No a jak ktoś jednak potrzebuje taką funkcjonalność? > > Jak potrzebuje to zastosuje. Mógłbyś rzucić jakiś przykład operacji > wielokrotnej precyzji wykorzystującej ROL? Przesuwanie bitów w generowaniu liczb pseudolosowych (np. coś w stylu LFSR)? > A co do porównywania dużych liczb. Procedura podana przez Bogdana nie > sprawdza się w mojej implementacji. Czego nie rozumiem? Pokazuję źródło. > Jest to próba sprawdzenia, czy wynik mnożenia jest większy od liczby na > wejściu. > > mov eax, dword ptr [wynikmn+8] > cmp eax, dword ptr [wejscie+8] > ja obl_reszt > > mov eax, dword ptr [wynikmn+4] > cmp eax, dword ptr [wejscie+4] > ja obl_reszt > > mov eax, dword ptr [wynikmn] > cmp eax, dword ptr [wejscie] > ja obl_reszt > > I jak to działa. Jeśli pierwsze sprawdzenie daje wynik negatywny to ja nie > jest wykonany. Zgadza się. > Kolejne sprawdzenie daje wynik pozytywny i ja jest wykonany. > I to jest błąd bo: > > wejście = 8A9F 0F8C 33C4 > wynikmn = 0A9F 2F8C 33C4 > > Podzieliłem to na dwordy, aby było lepiej widoczne. Liczby są przypadkowe, > ale obrazują problem. jak zrobić, aby było dobrze? Po każdym JA dodajesz "JNE nie_obl_reszt". Aby "iść dalej" w porównywaniu, na starszych pozycjach nie może być różnicy. W ten sposób dla tych dwóch liczb, porównywanie skończy się po pierwszym kroku, ale pierwszy skok JA nie zostanie wykonany. Jeśli miałbyś liczby: wejście = 0A9F 0F8C 33C4 wynikmn = 0A9F 2F8C 33C4 to po pierwszym porównaniu nie zostaje wykonany ani JA, ani JNE i porównywane są kolejne DWORDy, co doprowadzi do prawidłowej odpowiedzi. Ale przyznaję się - nie napisałem tego w kursie, a raczej powinienem był. W najbliższym czasie się poprawię. -- 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): miniurl.pl/bogdro-soft
Technical Details
Message-ID:
<iusnr1$nk7$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<iud0k4$1s0$1@inews.gazeta.pl> <iudn6s$6a7$1@news.onet.pl> <iue522$lju$1@inews.gazeta.pl> <iug9cm$e44$1@news.onet.pl> <iuhs16$od3$1@inews.gazeta.pl> <iui456$obd$1@news.onet.pl> <iui4i7$pma$1@inews.gazeta.pl> <iuia8j$fdr$1@inews.gazeta.pl> <iuk13l$6o$1@inews.gazeta.pl> <iukuh7$9m1$1@inews.gazeta.pl> <iupscc$sf9$1@inews.gazeta.pl> <ius0iu$btg$1@news.onet.pl> <iusegi$o55$1@inews.gazeta.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: Debugger Date: Mon, 04 Jul 2011 17:56:03 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 87 Message-ID: <iusnr1$nk7$1@inews.gazeta.pl> References: <iud0k4$1s0$1@inews.gazeta.pl> <iudn6s$6a7$1@news.onet.pl> <iue522$lju$1@inews.gazeta.pl> <iug9cm$e44$1@news.onet.pl> <iuhs16$od3$1@inews.gazeta.pl> <iui456$obd$1@news.onet.pl> <iui4i7$pma$1@inews.gazeta.pl> <iuia8j$fdr$1@inews.gazeta.pl> <iuk13l$6o$1@inews.gazeta.pl> <iukuh7$9m1$1@inews.gazeta.pl> <iupscc$sf9$1@inews.gazeta.pl> <ius0iu$btg$1@news.onet.pl> <iusegi$o55$1@inews.gazeta.pl> NNTP-Posting-Host: rudy.mif.pg.gda.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1309794978 24199 153.19.42.16 (4 Jul 2011 15:56:18 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Mon, 4 Jul 2011 15:56:18 +0000 (UTC) X-User: bog.d In-Reply-To: <iusegi$o55$1@inews.gazeta.pl> User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.18) Gecko/20110616 Thunderbird/3.1.11 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit