🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2442

Re: Debugger

#2442
From: "Bogdan (bogdro)
Date: Mon, 04 Jul 2011 17:56
88 lines
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>