Intel 80C186XL Computer Hardware User Manual


 
MATH COPROCESSING
11-16
Example 11-2. Floating Point Math Routine Using FSINCOS
$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
x dd ?
y dd ?
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
convertendp
code ends
end