Solved

error "Division by zero"

Posted on 1998-09-22
5
498 Views
Last Modified: 2010-04-16
Declaring  unit CRT("uses CRT;") cause my program error "Division by zero" when running.(not in compling)
declare other units don't cause that error.
Thanks.
0
Comment
Question by:tungsim
5 Comments
 
LVL 2

Accepted Solution

by:
omsec earned 100 total points
ID: 1215678
You are probly using a PII-Processor huh?
We heard that problem often. Just get a fixed Version of the CRT-Unit.

http://garbo.uwasa.fi/pc/turbspec.html.

if you want other URLs, or CRT.PAS (unit's source) let me know ;)
0
 
LVL 7

Expert Comment

by:Motaz
ID: 1215679
Your computer seem to be very fast.. so that CRT unit cann't run on it... I think there is updated CRT unit can solve this problem but I don't know exactly where is it.

Motaz from Sudan.
motaz1@yahoo.com
0
 
LVL 7

Expert Comment

by:Motaz
ID: 1215680
Right Omsec, that is what I mean.. Thanks..
Motaz.
0
 
LVL 1

Expert Comment

by:lewis_loo
ID: 1215681
My friend also get the same problem with you, but he don't used pentium II processor only about Pentium 200 MMX the oldest one? How about that? he used Windows 98 as his operating system. is that a problem in Windows 98?
0
 
LVL 3

Expert Comment

by:vikiing
ID: 1215682
During initialization phase of the program, CRT unit tries to evaluate a time-base in order to have a proper delay value to deal with Delay() procedure. That is accomplished by counting hoy many times an integer value is increased during one millisecond of time.

In faster processors, since approximately 300 MHz os more, that gives as a result a value greater than 65535, which is greater enough to cause on overflow condition, which is interpreted as a "Division by zero" by initializing routine, thus avoiding the program to run.

The (partial) solution) I've found is to patch the object code of the CRT unit in order to modify this instruction:

       DIV  CX,37h     ; Divide by 55 (dec.), the quantity of
                       ; times the system clock interrupts, at
                       ; 1/18 of a second

by this one:

       DIV  CX,226h    ; Divide by 550 (dec.)

That avoids the overflow; but the subtle effect is that the so-obtained base-time is 10 times smaller. Thus, every time the Delay() procedure is used, it's argument must be 10 times greater to achieve the same results, i.e.:

        Delay(x);

must be changed by

        Delay(x*10);

For a softwre developer, it's not so terrible. There's another  solution, in which the program itself (using the patched CRT unit) can disregard the use of CRT's Delay() procedure, but programmer has to write its own code to get the right time-base (I've done it) the get the same results without having to multiply by 10 the argument.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Shell script to create broker configuration file using current broker Configuration, solely for purpose of backup on Linux. Script may need to be modified depending on OS-installation. Please deploy and verify the script in a test environment.
Riverbed Technology's webinar discusses networking for the cloud era with simplified SD-WAN cloud connectivity.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question