Normal quotes
This commit is contained in:
parent
5e10794a24
commit
18011c595a
352 changed files with 6040 additions and 6040 deletions
36
03-10.md
36
03-10.md
|
|
@ -3,9 +3,9 @@
|
|||
------------------------ --------------------------------- --------------------
|
||||
|
||||
when declaring the timer routines **extern**, so that name-mangling
|
||||
doesn’t occur, and the linker can find the routines’ C-style names.)
|
||||
doesn't occur, and the linker can find the routines' C-style names.)
|
||||
|
||||
That’s all it takes; after doing this, you’ll be able to use the Zen
|
||||
That's all it takes; after doing this, you'll be able to use the Zen
|
||||
timer from C, as, for example, in:
|
||||
|
||||
ZTimerOn():
|
||||
|
|
@ -14,14 +14,14 @@ timer from C, as, for example, in:
|
|||
ZTimerOff();
|
||||
ZTimerReport();
|
||||
|
||||
(I’m talking about the precision timer here. The long-period
|
||||
(I'm talking about the precision timer here. The long-period
|
||||
timer—Listing 3.5—requires the same modifications, but to different
|
||||
lines.)
|
||||
|
||||
\
|
||||
**Figure 3.2** *Changes for use with small code model C.*
|
||||
|
||||
Altering the Zen timer for use in C’s large code model is a tad more
|
||||
Altering the Zen timer for use in C's large code model is a tad more
|
||||
complex, because in addition to the above changes, all functions,
|
||||
including the internal reference timing routines that are used to
|
||||
calculate overhead so it can be subtracted out, must be converted to
|
||||
|
|
@ -49,7 +49,7 @@ with
|
|||
(and likewise for **ReferenceZTimerOff** ), which works because
|
||||
**ReferenceZTimerOn** is in the same segment as the calling code. This
|
||||
is normally a great optimization, being both smaller and faster than a
|
||||
far call. However, it’s not so great for the Zen
|
||||
far call. However, it's not so great for the Zen
|
||||
|
||||
\
|
||||
**Figure 3.3** *Changes for use with large code model C.*
|
||||
|
|
@ -61,24 +61,24 @@ to push/near call pairs within the Zen timer module, TASM makes it
|
|||
impossible to emulate exactly the overhead of the Zen timer, and makes
|
||||
timings slightly (about 16 cycles on a 386) less accurate.
|
||||
|
||||
What’s the solution? Put the **NOSMART** directive at the start of the
|
||||
What's the solution? Put the **NOSMART** directive at the start of the
|
||||
Zen timer code. This directive instructs TASM to turn off all
|
||||
optimizations, including converting far calls to push/near call pairs.
|
||||
By the way, there is, to the best of my knowledge, no such problem with
|
||||
MASM up through version 5.10A.
|
||||
|
||||
In my mind, the whole business of optimizing assemblers is a mixed
|
||||
blessing. In general, it’s nice to have the assembler shortening jumps
|
||||
blessing. In general, it's nice to have the assembler shortening jumps
|
||||
and selecting sign-extended forms of instructions for you. On the other
|
||||
hand, the benefits of tricks like substituting push/near call pairs for
|
||||
far calls are relatively small, and those tricks can get in the way when
|
||||
complete control is needed. Sure, complete control is needed very
|
||||
rarely, but when it is, optimizing assemblers can cause subtle problems;
|
||||
I discovered TASM’s alteration of far calls only because I happened to
|
||||
I discovered TASM's alteration of far calls only because I happened to
|
||||
view the code in the debugger, and you might want to do the same if
|
||||
you’re using a recent version of MASM.
|
||||
you're using a recent version of MASM.
|
||||
|
||||
I’ve tested the changes shown in Figures 3.2 and 3.3 with TASM and
|
||||
I've tested the changes shown in Figures 3.2 and 3.3 with TASM and
|
||||
Borland C++ 4.0, and also with the latest MASM and Microsoft C/C++
|
||||
compiler.
|
||||
|
||||
|
|
@ -86,21 +86,21 @@ compiler.
|
|||
|
||||
For those of you who wish to pursue the mechanics of code measurement
|
||||
further, one good article about measuring code performance with the 8253
|
||||
timer is “Programming Insight: High-Performance Software Analysis on the
|
||||
IBM PC,” by Byron Sheppard, which appeared in the January, 1987 issue of
|
||||
timer is "Programming Insight: High-Performance Software Analysis on the
|
||||
IBM PC," by Byron Sheppard, which appeared in the January, 1987 issue of
|
||||
*Byte*. For complete if somewhat cryptic information on the 8253 timer
|
||||
itself, I refer you to Intel’s *Microsystem Components Handbook*, which
|
||||
itself, I refer you to Intel's *Microsystem Components Handbook*, which
|
||||
is also a useful reference for a number of other PC components,
|
||||
including the 8259 Programmable Interrupt Controller and the 8237 DMA
|
||||
Controller. For details about the way the 8253 is used in the PC, as
|
||||
well as a great deal of additional information about the PC’s hardware
|
||||
and BIOS resources, I suggest you consult IBM’s series of technical
|
||||
well as a great deal of additional information about the PC's hardware
|
||||
and BIOS resources, I suggest you consult IBM's series of technical
|
||||
reference manuals for the PC, XT, AT, Model 30, and microchannel
|
||||
computers, such as the Models 50, 60, and 80.
|
||||
|
||||
For our purposes, however, it’s not critical that you understand exactly
|
||||
For our purposes, however, it's not critical that you understand exactly
|
||||
how the Zen timer works. All you really need to know is what the Zen
|
||||
timer can do and how to use it, and we’ve accomplished that in this
|
||||
timer can do and how to use it, and we've accomplished that in this
|
||||
chapter.
|
||||
|
||||
#### Armed with the Zen Timer, Onward and Upward {#Heading18}
|
||||
|
|
@ -123,7 +123,7 @@ of the inaccuracy introduced by the Zen timer becomes less over longer
|
|||
periods.
|
||||
|
||||
Imperfections notwithstanding, the Zen timer is a good tool for
|
||||
exploring C code and x86 family assembly language, and it’s a tool we’ll
|
||||
exploring C code and x86 family assembly language, and it's a tool we'll
|
||||
use frequently for the remainder of this book.
|
||||
|
||||
------------------------ --------------------------------- --------------------
|
||||
|
|
|
|||
Loading…
Reference in a new issue