🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Longhand Division in Binary

#1510
From: Remek
Date: Fri, 12 Oct 2007 00:29
74 lines
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-mail
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>

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