🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Debugger

#2493
From: Bogdan (bogdro)
Date: Mon, 04 Jul 2011 15:56
87 lines
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-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>

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