Article View: pl.comp.lang.asm
Article #2494Re: Debugger
From: Remek
Date: Tue, 05 Jul 2011 16:01
Date: Tue, 05 Jul 2011 16:01
80 lines
3708 bytes
3708 bytes
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? 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. 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. > 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ć. Pozdrawiam Remek
Technical Details
Message-ID:
<iuvchv$80c$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!news.icm.edu.pl!newsfeed.pionier.net.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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.gazeta.pl!not-for-mail From: "Remek" <dupa@gmail.com> Newsgroups: pl.comp.lang.asm Subject: Re: Debugger Date: Tue, 5 Jul 2011 18:01:41 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 81 Message-ID: <iuvchv$80c$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> NNTP-Posting-Host: acpv137.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1309881727 8204 83.10.227.137 (5 Jul 2011 16:02:07 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Tue, 5 Jul 2011 16:02:07 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 X-Priority: 3 X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-User: remeka X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit