🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Debugger

#2495
From: Bogdan (bogdro)
Date: Wed, 06 Jul 2011 16:23
102 lines
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-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> <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