Article View: pl.comp.lang.asm
Article #1510Re: Longhand Division in Binary
From: Remek
Date: Fri, 12 Oct 2007 00:29
Date: Fri, 12 Oct 2007 00:29
74 lines
3086 bytes
3086 bytes
Użytkownik "Bogdan (bogdro)" napisał:
> > > Jak powinny być zadeklarowane te linie? Uznałem je za bufory
> łańcuchowe.
> Jak wskaźnik, to DD.
> QuotAdrs dd addr Quotient ; czy "offset" czy jak to tam jest.
W Masmie
zmienna dd ?
oznacza dworda, który może min. zawierać wskaźnik. Czy o to idzie?
> To jest właśnie minus pamiętania typów. W NASMie by to nie przeszło.
> Trzeba byłoby jawnie napisać typ danych i człowiek by się zastanowił.
> Zapisz swoje zmienne jako tablice dwordów, nie bajtów:
>
> Remainder dd 4 dup(0)
Zrobiłem tak jak poniżej i efekt jest bez zmian tzn. błędny wynik.
Dividend1 dd ?
Dividend2 dd ?
Dividend3 dd ?
Dividend4 dd ?
Remainder1 dd ?
Remainder2 dd ?
Remainder3 dd ?
Remainder4 dd ?
Po obróbce te zmienne przerzucam do buforów łańcuchowych typu:
Quotient db 128 dup (0)
Remainder db 128 dup (0)
To nie ma znaczenia w sumie, bo gdzie jest wynik widzę i potrafię go
pobrać. Chodzi o to, że jest błędny. Czegoś nie rozumiem. Póki co
działanie procedury wydaje mi się bezsensowne. Min. po pierwszym skoku
_true:
mov eax, dword ptr [Divisor]
sub dword ptr [Remainder], eax
mov eax, dword ptr [Divisor+4]
sbb dword ptr [Remainder+4], eax
mov eax, dword ptr [Divisor+8]
sbb dword ptr [Remainder+8], eax
mov eax, dword ptr [Divisor+12]
sbb dword ptr [Remainder+12], eax
pierwsze odejmowanie jest od zera i cały bufor oprócz pierwszych czterch
bajtów zapełnia się wartością:
........FFFFFFFFFFFFFFFFFFFFFFFF
A pierwsze cztery bajty zależą od tego co jest wpisane jako dzielnik.
> Ponadto, blok _true, czyli "Remainder := Remainder - Divisor" źle
> przerobiłeś - to nie jest odejmowanie wielokrotnej precyzji, a w
> oryginale tak było.
Mea culpa. Nie wiem dlaczego? Sprawdzam sto razy i nie widzę takiego
poważnego błędu.
Spróbuję zainstalować HLA, skompilować i zobaczyć jak to działa.
Poprawioną procedurę wrzuciłem na swoją stronę.
Pozdrawiam Remek
Technical Details
Message-ID:
<femf27$40d$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<feggr4$9v0$1@inews.gazeta.pl> <fej2ar$7u6$1@inews.gazeta.pl> <fejgi7$j05$1@inews.gazeta.pl> <felgkn$3ij$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: "Remek" <wiasmed@neostrada.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Longhand Division in Binary Date: Fri, 12 Oct 2007 02:29:25 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 83 Message-ID: <femf27$40d$1@inews.gazeta.pl> References: <feggr4$9v0$1@inews.gazeta.pl> <fej2ar$7u6$1@inews.gazeta.pl> <fejgi7$j05$1@inews.gazeta.pl> <felgkn$3ij$1@inews.gazeta.pl> NNTP-Posting-Host: 213.199.219.7 Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1192148871 4109 213.199.219.7 (12 Oct 2007 00:27:51 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Fri, 12 Oct 2007 00:27:51 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 X-Priority: 3 X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-User: remeka X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit