User's Manual

PROGRAMMING NUMERIC APPLICATIONS
No special programming techniques are required to gain the advantages of concurrent execution; numeric
instructions for the
NPX
are simply placed in line with the instructions for the CPU. CPU and numeric
instructions are initiated in the same order as they are encountered by the
CPU
in
its instruction
stream. However, because numeric operations performed by the
NPX
generally require more time than
operations performed by the
CPU, the
CPU
can often execute several of its instructions before the
NPX
completes a numeric instruction previously initiated.
This concurrency offers obvious advantages
in
terms of execution performance, but concurrency also
imposes several rules that must be observed
in
order to assure proper synchronization of the 80286
CPU
and 80287 NPX.
All Intel high-level languages automatically provide for and manage concurrency in the NPX.
Assembly-language programmers, however, must understand and manage some areas of concurrency
in exchange for the flexibility and performance of programming
in
assembly language. This section
is
for the assembly-language programmer or well-informed high-level-language programmer.
Managing Concurrency
Concurrent execution of the host and 80287
is
easy to establish and maintain. The activities of numeric
programs can be split into
two
major areas: program control and arithmetic. The program control part
performs activities such
as
deciding what functions to perform, calculating addresses of numeric
operands, and loop control. The arithmetic part simply adds, subtracts, multiplies, and performs other
operations
on
the numeric operands. The
NPX
and host are designed
to
handle these
two
parts separately
and efficiently.
Managing concurrency
is
necessary because both the arithmetic and control areas must converge to a
well-defined state before starting another numeric operation. A well-defined state means all previous
arithmetic and control operations are complete and valid.
Normally, the host waits for the 80287
to
finish the current numeric operation before starting another.
This waiting
is
called synchronization.
Managing concurrent execution of the 80287 involves
_~ree
types of synchronization:
1.
Instruction synchronization
2.
Data synchronization
3.
Error synchronization
For programmers in higher-level languages, all three types of synchronization are automatically provided
by the appropriate compiler. For assembly-language programmers, instruction synchronization
is
guaranteed by the
NPX
interface, but data and error synchronization are the responsibility of the
_____
1-1
••
1
....
_
.....
~
.........
""
.,.....
..
nt'l'1'""l't'Y1n-,pr
a.",,""JUUJ.y-LUJ.
1
6U.U.
O
....
1"'"
'-'0&
.......................
__
.
Instruction Synchronization
Instruction synchronization
is
required because the 80287 can perform only one numeric operation at
a time. Before any numeric operation
is
started, the 80287 must have completed all activity from its
previous instruction.
2-48