Article View: pl.comp.lang.asm
Article #2495Re: Debugger
From: Bogdan (bogdro)
Date: Wed, 06 Jul 2011 16:23
Date: Wed, 06 Jul 2011 16:23
102 lines
4684 bytes
4684 bytes
W dniu 05.07.2011 18:01, Remek pisze: > Użytkownik "Bogdan (bogdro)" napisał: > >>> 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. > > To sprawdzenie mam w procedurze pierwiastkowania dużych liczb. Wygląda to > tak: > > ======================================== > > mnoz_dalej: > > call mnozenie > jc obl_reszt ; to zabezpiecza program przed nieskończoną pętlą > > mov eax, dword ptr [wynikmn+4] > cmp eax, dword ptr [wejscie+4] > ja obl_reszt > jb mnoz_dalej > > mov eax, dword ptr [wynikmn] > cmp eax, dword ptr [wejscie] > ja obl_reszt > > ......... > > ========================================== > > I to działa z wyjątkiem przypadku kiedy oba dwordy są sobie równe :) Co > wtedy? Sprawdzę tak: > > ======================================== > > mnoz_dalej: > > call mnozenie > jc obl_reszt ; to zabezpiecza program przed nieskończoną pętlą > > mov eax, dword ptr [wynikmn+4] > cmp eax, dword ptr [wejscie+4] > ja obl_reszt > jb mnoz_dalej > > mov eax, dword ptr [wynikmn] > cmp eax, dword ptr [wejscie] > ja obl_reszt > > jmp obl_reszt > ......... > > ========================================== > > Czy to wystarczy? Prawdopodobnie tak. Jeśli wynik mnożenia jest równy wejściowej liczbie, to "obl_reszt" (co pewnie oznacza obliczanie reszty) powinno zapewne zwrócić zero, więc powinno być dobrze. Ale mogę czegoś nie wiedzieć, więc przetestuj choć dla jednego przypadku. > Przepraszam za trucie d..., ale ja nie potrafię analizować > kodu "na sucho", a przećwiczenie wszystkich reakcji programu na dane > wejściowe to robota dla jakiegoś programu, nie dla człowieka. Po to właśnie robi się testy :) Ale nie takie, że ktoś wpisuje coś do programu (choć te też), tylko raczej podstawia się dane i uruchamia procedury "ręcznie". > Mam > kalkulator, który bez zarzutu działał przez dwa lata. Przypadkiem okazało > się, że wynik dzielenia 704/4 to zero??? Błąd w procedurze. Młodszy bajt > jest równy zero i cmp bajt, 0 powodowało wyjście z pętli. Paranoja. Trzeba > było odwrócić procedurę i sprawdzać od najstarszego bajtu. Zdarza się. I w bardziej, i w mniej profesjonalnych programach. >> nie napisałem tego w kursie, a raczej >> powinienem był. W najbliższym czasie się poprawię. > > Bez przesady :) Nie da się przewidzieć i opisać wszystkich zastosowań. Coś > jednak można wspomnieć. Już wspomniałem :) -- 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:
<iv226c$6b8$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> <iusnr1$nk7$1@inews.gazeta.pl> <iuvchv$80c$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: Wed, 06 Jul 2011 18:23:33 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 102 Message-ID: <iv226c$6b8$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> <iusnr1$nk7$1@inews.gazeta.pl> <iuvchv$80c$1@inews.gazeta.pl> NNTP-Posting-Host: rudy.mif.pg.gda.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1309969421 6504 153.19.42.16 (6 Jul 2011 16:23:41 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Wed, 6 Jul 2011 16:23:41 +0000 (UTC) X-User: bog.d In-Reply-To: <iuvchv$80c$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