Article View: pl.comp.lang.asm
Article #2442Re: Debugger
From: "Bogdan (bogdro)
Date: Mon, 04 Jul 2011 17:56
Date: Mon, 04 Jul 2011 17:56
88 lines
3506 bytes
3506 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
Message-ID:
<iusnr1$nk7$1@inews.gazeta.pl>
Path:
polish.pugleaf.net!archive.newsdeef.eu!mbox2nntp-pl.comp.lang.asm.mbox.zip!g2news1.google.com!news3.google.com!feeder.news-service.com!newsfeed.straub-nv.de!newsfeed.pionier.net.pl!news.gazeta.pl!not-for-mail
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>