Solved

error "Division by zero"

Posted on 1998-09-22
5
496 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

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Threads Delphi Programs 2 1,624
Delphi - What Does "F" Symbolize? 2 475
How to Use TTouchKeyboard inherit 1 1,480
TEdit.SetFocus trouble 3 172
Do you use a spreadsheet like Microsoft's Excel?  Have you ever wanted to link out to a non excel file on your computer or network drive?  This is the way I found to do it!
Adding Computers to AD groups through an SCCM Task Sequence
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

810 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