🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Debugger

#2494
From: Remek
Date: Tue, 05 Jul 2011 16:01
80 lines
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-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>

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