MATH COPROCESSING

$mod186 $modc187

name example_80C187_proc

;DESCRIPTION: This code section uses the 80C187 FSINCOS transcendental

;instruction to convert the locus of a point from polar

;to Cartesian coordinates.

;

;VARIABLES: The variables consist of the radius, r, and the angle, theta.

;Both are expressed as 32-bit reals and 0 <= theta <= pi/4.

;RESULTS:

The results of the computation are the coordinates x and y

;expressed as 32-bit reals.

;NOTES:

This routine is coded for Intel ASM86. It is not set up as an

;HLL-callable routine.

;This code assumes that the 80C187 has already been initialized.

assume cs:code, ds:data

data

segment at 0100h

 

 

 

 

r

dd

x.xxxx

;substitute

real

operand

 

theta

dd

x.xxxx

;substitute

real

operand

xdd ?

ydd ?

data ends

 

code

segment at 0080h

 

convert

 

proc far

 

 

mov

ax, data

 

 

mov

ds, ax

 

 

fld

r

;load radius

 

fld

theta

;load angle

 

fsincos

 

;st=cos, st(1)=sin

 

fmul

st, st(2)

;compute x

 

fstp

x

;store to memory and pop

 

fmul

 

;compute y

 

fstp

y

;store to memory and pop

convert endp

 

 

code

ends

 

 

 

end

 

 

Example 11-2. Floating Point Math Routine Using FSINCOS

11-16

Page 301
Image 301
Intel 80C186XL, 80C188XL user manual Example 11-2. Floating Point Math Routine Using Fsincos, Results