231917-001 80387 Programmers Reference Manual 1987
231917-001 80387 Programmers Reference Manual 1987
2
The translational and
rotational relationships between adjacent links are described with these matrices using the
D-H matrix method. For each link, there is a 4 X 4 homogeneous transformation matrix
that represents the link's coordinate system (LJ at the joint (J.) with respect to the previous
link's coordinate system (J
1
-
1
, L
i
-
I
). The following four geometric quantities completely
describe the motion of any rigid joint/link pair (J
i
, L.), as Figure 7-7 illustrates.
di
The angular displacement of the Xi axis from the Xi_I axis by rotating around
the Zi_1 axis (antic1ockwise).
The distance from the origin of the (i-l)'h coordinate system along the Zi_1
axis to the Xi axis.
The distance of the origin of the ith coordinate system from the Zi_1 axis
along the -Xi axis.
The angular displacement of the Zi axis from the Zi_1 about the Xi aXIS
(anticlockwise ).
1. J. Denavit and R.S. Hartenberg, "A Kinematic Notation for Lower-Pair Mechanisms Based on Matrices," J. Applied
Mechanics, June 1955, pp. 215-221.
2. C.S. George Lee, "Robot Arm Kinematics, Dynamics, and Control," IEEE Computer, Dec. 1982.
7-21
NUMERIC PROGRAMMING EXAMPLES
d,
JOINT,+,
I---a'---l
x,
G40003
Figure 7-7. Relationships between Adjacent Joints
7-22
NUMERIC PROGRAMMING EXAMPLES
The D-H transformation matrix AL for adjacent coordinate frames (from joint
i
_
1
to joint
i
is
calculated as follows:
___ where ...
Tz,d represents a translation along the Zi_1 axis
Tz,o represents a rotation of angle 8 about the Zi_1 axis
Tx,a represents a translation along the Xi axis
Tx,a represents a rotation of angle 0' about the Xi axis
COS(Ji
SIN (Ji
o
o
-COS O'i SIN 8
i
COS O'i COS (Ji
SIN O'i
o
SIN O'i SIN (Ji
- SIN O'i COS (Ji
COSO'i
o
COS (Ji
SIN (Ji
d
i
1
The composite homogeneous matrix T which represents the position and orientation of the
joint/link pair with respect to the base system is obtained by successively multiplying the
D-H transformation matrices for adjecent coordinate frames.
This example in Figure 7-8 illustrates how the transformation process can be accomplished
using the 80387. The program consists of two major procedures. The first procedure
TRANS_PROC is used to calculate the elements in each D-H matrix, Ai-I' The second
procedure MATRIXMUL_PROC finds the product of two successive D-H matrices.
7-23
NUMERIC PROGRAMMING EXAMPLES
XEN!x286 80386 MACRO ASSEMBLER V1.0, ASSEMBLY OF MOOULE TOS STATUS
OBJECT MODULE PLACED IN tos.obj -
ASSEMBLER INVOKED BY: asm386 tos.asm
LOC OSJ
00000000
00000000
00000000 D9E5
00000002 9BOFEO
00000005 88EO
00000007 2507400000
OOOOOOOC COEC03
OOOOOOOf 08EO
00000011 B400
00000013 C3
00000014
LINE
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
SOURCE
+1 $title(Oetermine IDS register contents)
stack.
code
This subroutine will return a value
from 0-15 in eax corresponding
to the contents of NPX IDS. At t
reg; sters are transparent and no
errors are possible. The return
value corresponds to c3,c2,cl,cO
of FXAM instruction.
name tos_status
public tos_status
stackseg
segment publ i c er
tos_status proc
fxam ; Get status of lOS reg; ster
fstsw ax Get current status
mov al,ah Put bit 10-8 into bits 2-0
and eax,4007h Mask out bits c3,c2,cl,cO
shr ah, 3 Put bit c3 into bit 11
or at ,ah Put c3 into bit 3
mov ah,O CLear return vaLue
ret
tos_status endp
code ends
end
ASSEMBL Y COMPLETE I NO YARN I NGS, NO ERRORS.
Figure 7-8. Robot Arm Kinematics Example
7-24
LOC 08J
000000A9 C3
OOOOOOAA
OOOOOOAA 09E9
OOOOOOAC C8040000
00000080 8945FC
00000083 OA4DFC
00000086 09ES
0000008S D9EO
0000008A 09Cl
0000008C D9FC
OOOOOOBE D9CA
OOOOOOCO OBE2
000000C2 58
000000C3 D9FO
000000C5 C9
000000C6 DEEl
000000C8 C3
000000C9
NUMERIC PROGRAMMING EXAMPLES
LINE
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
n
78
79
80
81
SOURCE
; and fraction
ret ; OK to leave fxtract ruming
Calculate the value using the
exponentiate instruction .. The following
relations are used:
10**x = 2(10g2(10)*x)
2U+F) :z; 2**1 .. 2**F
if st(l) I: I and &t(O) = 2**F then
fseale produces 2*(1+1")
fldl2t lOS = LOG2(10)
enter 4,0
save poker of 10 value, P
IhOY ,eax
lOS,X = LOGZ(10)*P LOGZ(10**P)
filDJl <!word ptr [ebp41
fld1 ; Set TOS = -1_0
fchs
fld st(1)
frndint
Copy power va 1 ue
in base two
ros Ii: I: . inf < I <; X
where 1 is an integer
ROUlding mode does
not matter
fxch st(2) TOS = X, ST(l) = -1.0
SH2) I
fsub st,st(2) ; TOS,F = X-I:
; -1 .. 0 < ros <= 1.0
; Restore orignal rounding control
pop eax
f2"",1 lOS = 2**(F) 1.0
leave Restore stack
flubr ForRl 2**(F)
ret IX to leave fsubr runni n9
code ends
end
ASSEMBLY COMPLETE, NO NO ERRORS.
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-25
NUMERIC PROGRAMMING EXAMPLES
XENIX286 80386 MACRO ASSEMBLER V1.0, ASSEMBLY OF MOOULE ROT MATRIX CAL
OBJECT MODULE PLACED IN transx.obj - -
ASSEMBLER INVOKED BY: asm386 transx.asm
LOC
00000000
00000008
00000010
00000018
00000020
00000028
00000030
00000038
00000040
00000048
00000050
00000058
00000060
00000068
00000070
00000078
OBJ LINE SOURCE
4
5 This example i tlustrates the use
6 of the 80387 fLoating point
7 instructions, in particular. the
FSINCOS function which gives both
the SIN and COS values.
10 The program calculates the
11 composite matrix for base to
12 effector transformation.
13
14 ; Only the kinematics is considered in
15 this example.
16
17 If the matrix mentioned above
18 is given by:
19 T1n = A1 x A2 x .. x An
20 T1n is found by successively call lng
21 transyroc and matrixmul pro unti 1
22 a1 t matrices have been e;;:hausted.
23
24 transYfoc calculates entries in each
25 ; ACA1, ... ,An) whi 1e matrixmul_proc
26 ; performs the matrix multiplication for
27 ; Ai and Ai+1. matrixmul proc in turn
28 ; calls matrix row and matrix elem to
29 ; do the mut tipl lcation. -
30
31
32 ; Define stack space
33
34 trans_stack stackseg 400
35
36 Define the matrix structure for
37 4X4 transformational matrices
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
a_matrix struc
a11
a12
an
.14
a21
a22
a23
a24
631
632
633
a34
641
642
643
644
a_matriX ends
dq
dq
dq
dq
dq
dq
dq
dq
dq Oh
dq
dq
dq
dq Oh
dq Oh
dq Oh
dq 1h
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-26
NUMERIC PROGRAMMING EXAMPLES
00000000
00000004
00000000
00000004
00000000
00000008
00000000
00000008
00000000 ????????????????
00000008 ??????17????7???
00000010 ????????????????
00000018 ????????????????
00000020 ????????????????
00000028 ????????????????
00000030 ????????????????
00000038 ????????????????
00000040 0000000000000000
00000048 ????????????????
00000050 ??7711????????71
00000058 ????????????????
00000060 0000000000000000
00000068 0000000000000000
00000070 0000000000000000
00000078 0100000000000000
00000080 ????????????????
00000088 ????????????????
00000090 1??7??7??17????7
00000098 177111????????7?
aOaOQOAO ????????????????
OOOOOOA8 11?11??????17??7
00000080 ????????????????
00000088 ????????????????
OOOOOOCO 0000000000000000
nOODODes ????????????????
00000000 ????????????????
00000008 ????????????????
OOOOOOEO 0000000000000000
000000E8 0000000000000000
OOOOOOFO 0000000000000000
000000F8 0100000000000000
58 AssL..llle One joint in the storage
59 at location and hence for
60 two sets of parameters; however,
61 more joints are possible
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
a l p ~ d e g struc
aLpha deg1 dd ?
alpha -deg2 dd ?
alp_deg ends -
tht_deg struc
theta deg1 dd ?
theta - deg2 dd ?
tht_deg ends -
A_array struc
A1
A2
A_array ends
D_array struc
01
02
dq ?
dq ?
dq ?
dq ?
81 D _array ends
82
83 trans data is the data segment
84
85
86
87
88
89
segment rw publ ic
Amx
Bmx
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-27
NUMERIC PROGRAMMING EXAMPLES
00000100 1111711?????1177 90 TIIU< 8_matrix<>
00000108 1771171117111711
00000110 ?171111111711117
00000118 7177117111117111
00000120 111111???????777
00000128 ???????'?????????
00000130 ?????711?7?77?11
00000138 17???11????1?1??
00000140 0000000000000000
00000148 1771111111111171
00000150 1111111711111117
00000158 ????????????????
00000160 0000000000000000
00000168 0000000000000000
00000170 0000000000000000
00000178 0100000000000000
00000180 17711111 91 ALPHA_DEG alp_deg<>
00000184 17171111
00000188 ??????71 92 THETA_DEG tht_deg<:>
0000018C 77111171
00000190 1111111777111111 93 A_VECTOR A_array<>
00000198 11771777????771?
000001AO 7???717?????17?7 94 O_VECTOR D_Brray<>
DOOG01A8 111??11111777711
00000180 00000000 95 ZERO dd 0
00000184 84000000 96 d180 dd 180
0001 97 NlIM_JOINT
"'"
1
0004 98 NUM_ROW
"'"
4
0004 99 NUll_COL
"'"
4
00000188 01 100 REVERSE db 1h
101 trans_data ends
102
103 assl.De ds:trans_data, es:trans_data
104
105
106 trans_code contains the procedures
107 for calculating matrix elements and
108 i matrix nut tipL ications
109
110 trans_code segment er public
111
112 ; create nnemonics for fsincos which is not
113 ; yet avai table from ASM386 8S of now
114
C MACRO i15 codemacro fsincos
# 116 dw Ofbd9h
II 117 erdn
118
00000000 119 transJlroc proc far
120
121
122 Calculate alpha and theta in radians
123 from their values in degrees
124
00000000 D9EB 125 fldpi
00000002 083584010000 126 fdiv dlBO
127
128 Dupl i eate pi /1 BO
00000008 D9CO 129 fld st
130
OOOOOOOA DCOCCD80010000 131 f1wl qword ptr ALPHA_DEG
00000011 D9C9 132 fxch .t(l)
00000013 DCOCC088010000 133 f""'l
qword ptr
134
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-28
NUMERIC PROGRAMMING EXAMPLES
0000001A 09FB
0000001 C 09CO
0000001E 0013
00000020 OCOCCD90010000
00000027 005B18
0000002A 09C9
0000002C 005320
0000002 F 09CO
00000031 OCOCC090010000
00000038 005B38
0000003B 0ge2
00000030 09FB
0000003F 005350
00000042 0ge9
00000044 005348
00000047 09C2
00000049 08e9
00000048 005B10
0000004E 08e8
00000050 09EO
00000052 005830
00000055 09C2
00000057 08C9
00000059 005828
0000005C 08C9
0000005E 50
0000005F 8B04eOA0010000
00000066 894358
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
theta(radians) in ST and
alpha(radians) in ST(1)
Calculate matrix elements
a11 = cos theta
a12 = - cos alpha"" sin thet
an = sin alpha * sin theta
a14 = A * cos theta
a21 ;: sin theta
a22 = cos aLpha * cos theta
a23 = -sin aLpha'" cos theta
a24 = A ... sin theta
a32 = sin alpha
a33 = cos alpha
.34 = 0
a31 = a41 = a42 = a43 = 0.0
.44 =1
ebx contains the offset for the matrix
fsincos iCOS theta in ST
;s1n theta in ST(l)
fld st ;dupl i cate cos theta
fst [ebx].a11 ;cos theta in al1
frwt qword ptf A_VECTOR [ecx*8]
fstp [ebx] .a14 ;A * cos theta in a14
fxch 8t(1) ;sin theta in ST
fst [ebx] .a21 ;51n theta in a21
fld 5t ;dupt ieate sin theta
fmut qword ptr A_VECTOR[ecx*81
fstp [ebx] . a24 ; A "" sin theta in a24
ftd st(2) :alpha in ST
fsincos ;cos aLpha in ST
isin alpha in SHU
;sin theta in ST(2)
; cos theta in 5T(3)
fst [ebx] .833 ;cos alpha in 833
fxch st(1) ;sin alpha in 51
fst [ebx] .a32 ;sin alpha in a32
fld 5T(2) ;sin theta in ST
isin alpha in 5T(1)
frrul st,st(1) ;sin alpha * sin theta
fstp [ebx] .a13 ;stored in a13
flJlJl st,st(3) JCOS theta" sin alpha
fchs i-COS theta * sin alpha
fstp [ebx] .a23 ;stored in 8Z3
fld st(2) JCOS theta in S1
;cos alpha in ST(1)
;sin theta in 5T(Z)
ices theta in 51(3)
flrul st , st(1) ices theta * cos alpha
fstp [ebx] . a22 ; stored in a22
flrul st , st(1) ;cos alpha * sin theta
To tak.e advantage af parallel operations
between the CPU and NPX
push eax; save eax
also move 0 into a34 in a faster way
mav eax, dword ptr D_VECTOR (ecx*8J
mav dword ptr [ebx + 88], e9X
Figure 7-8_ Robot Arm Kinematics Example (Cont'd.)
7-29
NUMERIC PROGRAMMING EXAMPLES
00000069 8B04CDA4010000
00000070 89435C
00000073 58
00000074 D9EO
00000076 DD5B08
00000079 CB
0000007A
0000007A
0000007A 55
00000078 51
0000007C 88CE
0000007E 6BC904
00000081 31ED
00000083 892C39
00000086 896C3904
0000008A 51
0000008B
00000088 01 E9
00000080 000408
00000090 8BCD
00000092 68C904
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
mov
mov
pop
fens
fstp
ret
eax, dword ptr D VECTOR (ecx*8 + 4]
dword ptr [ebx +-92] I eax
eax ; restore eax
i-COS alpha * sin theta
[ebx] . a12 ; stored in a12
;and all nonzero elements
:have been calculated
trans_proc endp
matrix_elem proc far
; This procedure calculate the dot product
of the ith row of the first matrix and
the jth cotLlll'l of the second matrix:
Tf j where Ti j = sun of Aik x Bkj over k
parameters passed from the call ing routine,
matrix_row:
ESI = 0-1)*8
EOI = (j -1 )*S
local register, ESP = (k-1)*8
poJsh
poJsh
mov
ebp save ebp
ecx ecx to be used as a tmp reg
ecx, esi i save it for later indexing
locating the element in the first matrix, A
inul ecx, NUM_COl ecx contains offset due
to preceding rows; the
offset is from the
beginning of the matrix
xor ebp, ebp; clear ebp, which wi II be
used a temp reg to index( k)
across the ith row of the first
matrix as well as down the jth
colLlm of the second matrix
clear Tij for accuruLating Aik*Bkj
mov dword ptr [ecx] Cedi] ,ebp
mav dword ptr [ecxl [edi+41, ebp
eex save on stack: esi * nurn_col
the offset of the beginnging
of the ith row from the
beginning of the A. matrix
add ecx, ebp ; get to the kth column entry
of the ith row of the A. matrix
load Aik into 80387
fld qword ptr [eax) [ecx]
Loeat i n9 Bkj
mav ecx, ebp
imut ecx, NUM_ROW ; ecx contains the offset
of the beginning of the
kth row from the
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-30
inter
00000095 01F9
entry
00000097 DCOCOB
0000009A 59
0000009B 51
0000009C 01 F9
0000009E OC040A
OOOOOOA 1 001 COA
000000A4 83C508
000000A7 83F020
OOOOOOAA 7CDF
OOOOOOAC 59
OOOOOOAO 59
OOOOOOAE 50
OOOOOOAF CB
OOOOOOBO
OOOOOOBO
OOOOOOBO 31 FF
000000B2
000000B2 9A7AOOOOOO- - --
000000B9 83C708
OOOOOOBC 83FF20
OOOOOOBF 7CF1
000000C1 CB
000000C2
000000C2
NUMERIC PROGRAMMING EXAMPLES
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
add ecx, edt
; beginning of the B matrix
get to the jth column
of the kth row of the B
; matrix
fmul qword ptr [ebx] [ecx]; Ai k * Skj
pop ecx esi * nun_col
push ecx
in ecx again
a Lso at top of program
stack
add to the result in the output matrix, Tij
add ecx, ed;
accl..ITULating the sum of Ailt: * Skj
fadd qword pt r [edx] [ecx]
fstp qword pt r [edx] [ecx]
increment k by 1, i.e., ebp by 8
add ebp. 8
Has k reached the width of the matrix yet?
c"l' ebp. NUM _COL *8
jl NXT_k
Restore registers
pop ecx clear esi*m.IJI_col from stack
pop ecx restore ecx
pop ebp restore ebp
ret
matrix_row proc far
xor edi. edi
scan across a row
NXT_COL:
call matrix eLem
add edi, 8-
c ~ eeli, NUM_COl*8
j l NXT_COL
ret
This procedure does the matrix
mut tipl ication by cat Ling matrix_row
to calculate entries in each row
The matrix multipl ication is
performed in the fol towing manner,
Tij :; Aik x Bkj
where i and j denote the row and colutm
respectively and k is the index for
seaming across the ith row of the
first matrix and the jth coll.firl of the
second matrix.
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-31
NUMERIC PROGRAMMING EXAMPLES
000000C2 5A
000000C3 5B
000000C4 58
000000C5 31 F6
000000C7
000000C7 9ABOOOOOOO- - --
OOOOOOCE 83C608
00000001 83FE20
00000004 7CFl
00000006 CB
00000007
00000000
00000000 BCOOOOOOOO
00000005 60
00000006 31C9
00000008 BB80000000
00000000 9AOOOOOOOO- - - -
00000014 41
00000015
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
pop edx ; offset Tmx n edx
pop ebx ; offset Brnx n ebx
pop eax ; offset"Amx n eax
setup esi and 001
edt points to the colunn
es; poi nts to the row
xor esi. esi clear esi
NXT_ROY:
call
add
cl11'
jl
ret
matrix_row
est, 8
esi, NUM_R0\I*8
NXT_ROY
341 trans_code ends
342
343 ; ***************************************
344
345
346
347 Ma i n program
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
. .
. .
; ***************************************
main_code segment er
START:
mav esp, stackstart trans_stack
save at t regi sters
pushad
ECX denotes the nUl'ber of joints
where no of matrices = NUM_JOINT + 1
Find the first matrix( from the base
of the system to the first joint)
and call it Bmx
xor ecx, ecx
may ebx, offset Brnx
call trans_proc
inc ecx
1st matrix
is Brnx
From the 2nd matrix and on, it
will be stored in AffiX.
The result from the first matrix multo
is stored in Tmx but wi II be accessed
3n as Bmx in the next mul tipl ication.
378 As a matter of fact, the roles of 8mx
379 and Tmx alternate in successive
380 multipl ications. This is achieved by
381 ; reversing the order of the Bmx and Tmx
382 ; poi nters be; ng passed onto the program
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-32
NUMERIC PROGRAMMING EXAMPLES
383
384
385
386
387
388
00000015 BBOOOOOOOO 389
0000001A 9AOOOOOOOO 390
00000021 41 391
00000022 8035B801000001 392
00000029 7511 393
394
395
396
0000002B 6800000000 397
00000030 6880000000 398
00000035 6800010000 399
0000003A EBOF 400
401
402
403
0000003C 404
0000003C 6800000000 405
00000041 6800010000 406
00000046 6880000000 407
408
00000048 409
0000004B 9AC2000000 410
00000052 83F901 411
00000055 7EBE 412
413
414
415
416
00000057 61 417
418
419
420
421
; stack: Thus, this is invisible to the
; matrix tllJltiplication procedure.
; REVERSE serves as the indicator:
; REVERSE = 0 means that the resul t
is to placed in Tmx.
IIIOV ebx, offset Amx :find Amx
call transj)roc
inc ecx
xor REVERSE, 1h
jnz BInX_BS_Tmx
no reversing. Bmx as the second input
matrix white Trnx as the output matrix.
push offset Amx
push offset 8mx
push offset Tmx
j"" CONTINUE
; reversing. Tmx as the second input
; matrix while Bmx as the output matrix.
8mx as Tmx:
- Push
push
push
CONTINUE:
offset Amx
offset Trnx
offset 8mx
; revers i n9 the
;pointers passed
call matrixmuLyroc
clJ1) ecx, NOM_JOINT
jt. NXT_MATRIX
if REVERSE = 1 then the f i na L answer
wilt be in Bmx otherwise, in Tmx.
popad
end START, ds:trans_data, ss:trans_staek
ASSEMBLY COMPLETE, NO WARNINGS, NO ERRORS.
Figure 7-8. Robot Arm Kinematics Example (Cont'd.)
7-33
Machine Instruction A
Encoding and Decoding
APPENDIX A
MACHINE INSTRUCTION ENCODING AND DECODING
1st Byte
ASM386 Instruction
2nd Byte Bytes 3-7
Format
Hex Binary
D8 1101 1000 MOD 000 RIM SIB, displ FADD single-real
D8 1101 1000 MOD 001 RIM SIB, displ FMUL single-real
D8 1101 1000 MOD 010 RIM SIB, displ FCOM single-real
D8 1101 1000 MOD 011 RIM SIB, displ FCOMP single-real
D8 1101 1000 MOD 100 RIM SIB, displ FSUB single-real
D8 1101 1000 MOD 101 RIM SIB, displ FSUBR single-real
D8 1101 1000 MOD 110 RIM SIB, displ FDIV single-real
D8 1101 1000 MOD 111 RIM SIB, displ FDIVR single-real
D8 1101 1000 11000 REG FADD ST,ST(i)
D8 1101 1000 11001 REG FMUL ST,ST(i)
D8 1101 1000 1101 0 REG FCOM ST(i)
D8 1101 1000 11011 REG FCOMP ST(i)
D8 1101 1000 11100 REG FSUB ST,ST(i)
D8 11011000 11101 REG FSUBR ST,ST(i)
D8 1101 1000 11110 REG FDIV ST,ST(i)
D8 1101 1000 1111 1 REG FDIVR ST,ST(i)
D9 11011001 MOD 000 RIM SIB, displ FLO single-real
09 11011001 MOD 001 RIM reserved
09 11011001 MOD 010 RIM SIB, displ FST single-real
D9 11011001 MOD 011 RIM SIB, displ FSTP single-real
09 11011001 MOO 100 RIM SIB, displ FLOENV 14 or 28 bytes'"
D9 11011001 MOD 101 RIM SIB, displ FLOCW 2 bytes
D9 11011001 MOD 110 RIM SIB, displ FSTENV 14 or 28 bytes'"
D9 1101 1001 MOD 111 RIM SIB, displ FSTCW 2 bytes
D9 11011001 11000 REG FLO ST(i)
09 11011001 11001 REG FXCH ST(i)
D9 11011001 1101 0000 FNOP
09 11011001 1101 0001 reserved
D9 11011001 1101 001- reserved
09 11011001 1101 01-- reserved
D9 11011001 1101 1 REG reserved
D9 11011001 11100000 FCHS
09 11011001 11100001 FABS
D9 1101 1001 1110001- reserved
09 11011001 11100100 FTST
09 1101 1001 11100101 FXAM
09 11011001 1110011- reserved
D9 11011001 11101000 FLD1
D9 11011001 11101001 FLDL2T
09 1101 1001 11101010 FLOL2E
D9 1101 1001 1110 1011 FLOP I
D9 1101 1001 11101100 FLOLG2
D9 11011001 1110 1101 FLDLN2
D9 11011001 11101110 FLDZ
09 11011001 11101111 reserved
D9 11011001 11110000 F2XM1
D9 1101 1001 1111 0001 FYL2X
D9 11011001 1111 0010 FPTAN
A-1
MACHINE INSTRUCTION ENCODING AND DECODING
1st Byte
ASM386 Instruction
2nd Byte Bytes 3-7
Format
Hex Binary
D9 1101 1001 1111 0011 FPATAN
D9 11011001 1111 0100 FXTRACT
D9 11011001 11110101 FPREM1
D9 11011001 1111 0110 FDECSTP
D9 11011001 1111 0111 FINCSTP
D9 1101 1001 1111 1000 FPREM
D9 11011001 1111 1001 FYL2XP1
D9 1101 1001 1111 1010 FSQRT
D9 11011001 1111 1011 FSINCOS
D9 1101 1001 11111100 FRNDINT
D9 1101 1001 11111101 FSCALE
D9 1101 1001 1111 1110 FSIN
D9 1101 1001 1111 1111 FCOS
DA 11011010 MOD 000 RIM SIB, displ FIADD short-integer
DA 1101 1010 MOD 001 RIM SIB, displ FIMUL short-integer
DA 11011010 MOD 010 RIM SIB, displ FICOM short-integer
DA 11011010 MOD 011 RIM SIB, displ FICOMP short-integer
DA 11011010 MOD 100 RIM SIB, displ FISUB short-integer
DA 11011010 MOD 101 RIM SIB, displ FISUBR short-integer
DA 1101 1010 MOD 110 RIM SIB, displ FIDIV short-integer
DA 1101 1010 MOD 111 RIM SIB, displ FIDIVR short-integer
OA 1101 1010 110- ---- reserved
DA 11011010 11100--- reserved
DA 11011010 1110 1000 reserved
DA 10101010 11101001 FUCOMPP
DA 11011010 1110101- reserved
OA 1101 1010 111011-- reserved
DA 1101 1010 1111 ---- reserved
DB 1101 1011 MOD 000 RIM SIB, displ FILD short-integer
DB 11011011 MOD 001 RIM SIB, displ reserved
DB 11011011 MOD 010 RIM SIB, displ FIST short-integer
DB 11011011 MOD 011 RIM SIB, displ FISTP short-integer
DB 11011011 MOD 100 RIM SIB, displ reserved
DB 1101 1011 MOD 101 RIM SIB, displ FLO extended-real
DB 1101 1011 MOD 110 RIM SIB, displ reserved
DB 1101 1011 MOD 111 RIM SIB, displ FSTP extended-real
DB 1101 1011 110- ---- reserved
DB 1101 1011 11100000 **(1 )
DB 11011011 11100001 **(2)
DB 11011011 11100010 FCLEX
DB 1101 1011 11100011 FINIT
DB 1101 1011 11100100 **(3)
DB 1101 1011 11100101 reserved
DB 11011011 1110011- reserved
DB 1101 1011 11101--- reserved
DB 1101 1011 1111 ---- reserved
DC 1101 1100 MOD 000 RIM SIB, displ FADD double-real
DC 1101 1100 MOD 001 RIM SIB, displ FMUL double-real
DC 11011100 MOD 010 RIM SIB, displ FCOM double-real
DC 1101 1100 MOD 011 RIM SIB, displ FCOMP double-real
DC 1101 1100 MOD 100 RIM SIB, displ FSUB double-real
DC 11011100 MOD 101 RIM SIB, displ FSUBR double-real
DC 1101 1100 MOD 110 RIM SIB, displ FDIV double-real
DC 11011100 MOD 111 RIM SIB, displ FDIVR double-real
DC 1101 1100 11000REG FADD ST(i),ST
A-2
MACHINE INSTRUCTION ENCODING AND DECODING
1st Byte
ASM386 Instruction
2nd Byte Bytes 3-7
Format
Hex Binary
DC 1101 1100 11001 REG FMUL ST(i),ST
DC 1101 1100 11010 REG reserved
DC 1101 100 1101 1 REG reserved
DC 1101 1100 11100 REG FSUBR ST(i),ST
DC 1101 1100 11101 REG FSUB ST(i),ST
DC 1101 1100 1111 0 REG FDIVR ST(i),ST
DC 1101 1100 1111 1 REG FDIV ST(i),ST
DD 1101 1101 MOD 000 RIM SIB, displ FLD double-real
DD 1101 1101 MOD 001 RIM reserved
DD 11011101 MOD 010 RIM SIB, displ FST double-real
DD 11011101 MOD 011 RIM SIB, displ FSTP double-real
DD 11011101 MOD 100 RIM SIB, displ FRSTOR 94 or 1 08 bytes
DD 1101 1101 MOD 101 RIM SIB, displ reserved
DD 11011101 MOD 110 RIM SIB, displ FSAVE 94 or 108 bytes
DD 1101 1101 MOD 111 RIM SIB, displ FSTSW 2 bytes
DD 1101 1101 11000 REG FFREE ST(i)
DD 1101 1101 11001 REG reserved
DD 1101 1101 1101 0 REG FST ST(i)
DD 11011101 1101 1 REG FSTP ST(i)
DD 1101 1101 11100 REG FUCOM ST(i)
DD 11011101 11101 REG FUCOMP ST(i)
DD 1101 1101 1111 ---- reserved
DE 11011110 MOD 000 RIM SIB, displ FIADD word-integer
DE 1101 1110 MOD 001 RIM SIB, displ FIMUL word-integer
DE 1101 1110 MOD 010 RIM SIB, displ FICOM word-integer
DE 1101 1110 MOD 011 RIM SIB, displ FICOMP word-integer
DE 1101 1110 MOD 100 RIM SIB, displ FISUB word-integer
DE 1101 1110 MOD 101 RIM SIB, displ FISUBR word-integer
DE 1101 1110 MOD 110 RIM SIB, displ FIDIV word-integer
DE 1101 1110 MOD 111 RIM SIB, displ FIDIVR word-integer
DE 11011110 11000 REG FADDP ST(i),ST
DE 1101 1110 11001 REG FMULP ST(i),ST
DE 1101 1110 1101 0--- reserved
DE 11011110 1101 1000 reserved
DE 1101 1110 1101 1001 FCOMPP
DE 1101 1110 1101101- reserved
DE 11011110 1101 11-- reserved
DE 1101 1110 11100 REG FSUBRP ST(i),ST
DE 11011110 11101 REG FSUBP ST(i),ST
DE 1101 1110 1111 0 REG FDIVRP ST(i),ST
DE 11011110 1111 1 REG FDIVP ST(i),ST
DF 1101 1111 MOD 000 RIM SIB, displ FILD word-integer
DF 1101 1111 MOD 001 RIM SIB, displ reserved
DF 1101 1111 MOD 010 RIM SIB, displ FIST word-integer
DF 1101 1111 MOD 011 RIM SIB, displ FISTP word-integer
DF 1101 1111 MOD 100 RIM SIB, displ FBLD packed-decimal
DF 11011111 MOD 101 RIM SIB, displ FILD long-integer
DF 1101 1111 MOD 110 RIM SIB, displ FBSTP packed-decimal
DF 11011111 MOD 111 RIM SIB, displ FISTP long-integer
DF 1101 1111 11000 REG reserved
DF 1101 1111 11001 REG reserved
DF 1101 1111 1101 0 REG reserved
DF 1101 1111 1101 1 REG reserved
DF 11011111 11100000 FSTSW AX
DF 1101 1111 11100001 reserved
A-3
MACHINE INSTRUCTION ENCODING AND DECODING
1st Byte
ASM386 Instruction
2nd Byte Bytes 3-7
Format
Hex Binary
OF 1101 1111 1110001- reserved
OF 1101 1111 111001-- reserved
OF 1101 1111 11101--- reserved
OF 1101 1111 1111 ---- reserved
The marked encodings can be generated by the language translators; however, the 80387 treats them
as FNOP. They correspond to the following 8087 or 80287 instructions.
(1) FEN I
(2) FOISI
(3) FSETPM
The size of operand transferred depends on the 80386 operand-size attribute in effect for the
instruction.
A-4
Exception Summary
B
APPENDIX B
EXCEPTION SUMMARY
The following table lists the instruction mnemonics in alphabetical order. For each mnemonic,
it summarizes the exceptions that the instruction may cause. When writing 80387 programs
that may be used in an environment that employs numerics exception handlers, assembly-
language programmers should be aware of the possible exceptions for each instruction in
order to determine the need for exception synchronization. Chapter 4 explains the need for
exception synchronization.
Mnemonic Instruction IS
F2XM1
2X-1 y
FABS Absolute value Y
FADD(P) Add real Y
FBLD BCD load Y
FBSTP BCD store and pop
y
FCHS Change sign Y
FCLEX Clear exceptions
FCOM(P)(P) Compare real
y
FCOS Cosine
y
FDECSTP Decrement stack pointer
FDIV(R)(P) Divide real Y
FFREE Free register
FIADD Integer add
y
FICOM(P) Integer compare Y
FIDIV Integer divide
y
FIDIVR Integer divide reversed
y
FILD Integer load Y
FIMUL Integer multiply
y
FINCSTP Increment stack pOinter
FINIT Initialize processor
FIST(P) I nteger store Y
FISUB(R) Integer subtract
y
FLD extended Load real Y
or stack
FLD single Load real Y
or double
FLD1 Load + 1.0 Y
FLDCW Load Control word
y
FLDENV Load environment Y
FLDL2E Load log2e
y
FLDL2T Load log21O
y
FLDLG2 Loadlog1Q2
y
FLDLN2 Load 10g.,2 Y
FLDPI Load ...
y
IS-Invalid operand due to stack overflow/underflow
I-Invalid operand due to other cause
D-Denormal operand
Z-Zero-divide
O-Overflow
U-Underflow
P-Inexact result (precision)
B-1
I 0 Z 0 U P
y y y y
y y y y y
Y Y
y y
y y y y
Y Y Y Y Y Y
y y y y y
Y Y
y y y y y
y y y y y y
y y y y y
Y Y
y y y y y
y y
y y y y y y
Y Y
y y y y
EXCEPTION SUMMARY
Mnemonic Instruction IS
FLDZ Load + 0.0 Y
FMUL(P) Multiply real Y
FNOP No operation
FPATAN Partial arctangent Y
FPREM Partial remainder Y
FPREM1 IEEE partial remainder Y
FPTAN Partial tangent Y
FRNDINT Round to integer Y
FRSTOR Restore state Y
FSAVE Save state
FSCALE Scale Y
FSIN Sine Y
FSINCOS Sine and cosine Y
FSQRT Square root Y
FST(P) stack Store real Y
or extended
FST(P) single Store real Y
or double
FSTCW Store control word
FSTENV Store Environment
FSTSW(AX) Store status word
FSU8(R)(P) Subtract real Y
FTST Test Y
FUCOM(P)(P) Unordered compare real Y
FWAIT CPU Wait
FXAM Examine
FXCH Exchange registers Y
FXTRACT Extract Y
FYL2X Y oloQ2X Y
FYL2XP1 Y oloQ2(X + 1) Y
IS-Invalid operand due to stack overflow/underflow
I-Invalid operand due to other cause
D-Denormal operand
Z-Zero-divide
O-Overflow
U-Underflow
P-Inexact result (precision)
8-2
I
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
y
y
Y
0 Z 0 U P
Y Y Y Y
Y Y Y
Y Y
Y Y
Y Y Y
Y Y
Y Y Y Y Y
Y Y Y Y
Y Y Y
Y Y Y
Y Y
Y Y Y Y
Y Y Y Y
Y
Y
Y Y
Y Y Y Y Y
Y Y Y
Compatibility Between the C
80387 and the 80287/8087
APPENDIX C
COMPATIBILITY BETWEEN THE 80387
AND THE 80287/8087
This appendix summarizes the differences between the 80387 and its predecessors the 80287
and the 8087, and analyzes the impact of these differences on software that must be trans-
ported from the 80287 or 8087 to the 80387. Any migration from the 8087 directly to the
80387 must also take into account the additional differences between the 8087 and the 80387
as listed in Appendix D of this manual.
C.1 INITIALIZATION SEQUENCE
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
RESET, FINIT, After a hardware RESET, No difference between 80387 initialization Permits the 80386 to differ
and ERROR# PIN the ERROR# output is RESET and FINIT. software must execute an entiate between the 80287
asserted to indicate that an FNINIT instruction to clear and the 80387.
80387 is present. To ERROR#. The FNINIT is
accomplish this, Ihe IE and not required for 80287/
ES bits of the status word 8087 software, though Intel
are set, and the 1M bit in documentation recom-
the control word is reset. mends its use (refer to the
After FINIT, the status Numerics Supplement to
word and the contrOl word the iAPX 286 Program-
have the same values as in mer's Reference M a n u a ~ .
an 80287/8087 after
RESET.
C.2 DATA TYPES AND EXCEPTION HANDLING
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
NaN The 80387 distinguishes The 80287/8087 only Uninitialized memory IEEE Standard 754
between signaling NaNs generates one kind of NaN locations that contain compatibility.
and quiet NaNs. The 80387 (the equivalent of a quiet aNaNs should be changed
only generates quiet NaNs. NaN) but raises an invalid- to SNaNs to cause the
An invalid-operation operation exception upon 80387 to faUlt when unini-
exception is raised only encountering any kind of tialized memory locations
upon encountering a NaN. are referenced.
signaling NaN (except for
FCOM, FIST, and FBSTP
which also raise IE for
quiet NaNs).
Pseudozero, The 80387 neither gener- The 80287/8087 defines None. The 80387 does not IEEE Standard 754
Pseudo-NaN, ates not supports these and supports special generate these formats, compatibility.
Pseudoi"'i"i!y, formats; it raises an handling for these formats. and therefore will not
and Unnormal invalid-operation exception encounter them unless a
Formats whenever it encounters programmer deliberately
them in an arithmetic enters them.
operation.
C-1
COMPATIBILITY BETWEEN THE 80387 AND THE 80287/8087
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
Tag Word Bits The encoding in the tag The encoding lor pseudo- The exception handler may IEEE Standard 754
for Unsupported word for the unsupported zero and unnormal is need to be changed if compatibility.
Data Formats data formats mentioned in "valid" (type 00); the programmers use such
Section C.2.2 is "special others are "special data" data types.
data" (type 10). (type 10).
Invalid-Operation No invalid-operation Upon encountering a None. Software on the Upgrade, to eliminate
Exception exception is raised upon denormal in FSORT, FDIV, 80387 will continue to exception.
encountering a denormal in or FPREM or upon conver- execute in cases where the
FSORT, FDIV, or FPREM sian to BCD or to integer, 80287/8087 would trap.
or upon conversion to the invalid-operation
BCD or to integer. The exception is raised.
operation proceeds by lirst
normalizing the value.
Denormal The denormal exception is The denormal exception is The exception handler Performance enhancement
Exception raised in transcendental not raised in transcenden- needs to be changed only for normal case.
instructions and FXTRACT. tal instructions and if it gives special treatment
FXTRACT. to different opcodes.
Overflow Overflow exception Overflow exception Overflow exception IEEE Standard 754
Exception masked. masked. masked. compatibility.
If the rounding mode is set The 80287/8087 does not Under the most common
to chop (toward zero), the signal the overllow excep- rounding modes, no
result is the most positive tion when the masked impact. II rounding is
or most negative number. response is not infinity; i.e., toward zero (chop), a
it signals overflow only program on the 80387
when the rounding control produces under overflow
is not set to round to zero. conditions a result that is
If rounding is set to chop different in the least signili-
(toward zero), the result is cant bit 01 the signilieand,
positive or negative infinity. compared to the result on
the 80287.
Overflow exception not Overflow exception not Overflow exception not
masked. masked. masked.
The precision exception is The precision exception is If the result is stored on
flagged. When the result is not Ilagged and the signili- the stack, a program on
stored in the stack, the cand is not rounded. the 80387 produces a
significand is rounded different result under
according to the precision overflow conditions than
control (PC) bit of the on the 80287/8087. The
control word or according difference is apparent only
to the opcode. to the exception handler.
C-2
COMPATIBILITY BETWEEN HIE 80387 AND THE 80287/8087
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
Underflow Conditions for underflow. Conditions for underflow. Underflow exception IEEE Standard 754
Exception masked. compatibility.
When the underflow When the underflow excep-
Two related exception is masked, the tion is masked and round- No impact. The underflow
events contribute underflow exception is ing is toward zero, the exception occurs less
to underflow: signaled when both the underflow exception flag is often when rounding is
result is tiny and denormal- raised on tininess, regard- toward zero.
1. The creation ization results in a loss of less of loss of accuracy.
tiny result. A accuracy.
tiny number,
because it is Response to underflow. Response to underflow. Underflow exception not
so small, may masked.
cause some When the underflow When the underflow excep-
other excep- exception is unmasked tion is not masked and the A program on the 80387
tion later and the instruction is destination is the stack, the produces a different result
(such as supposed to store the significand is not rounded during underflow condi-
overflow upon result on the stack, the but rather is left as is. tions than on the 80287/
division). significand is rounded to 8087 if the result is stored
2. Loss of the appropriate precision on the stack. The differ-
accuracy (according to the precision ence is only in the least
during the control (PC) bit of the significant bit of the si9n;fi-
denormaliza- control word, for those cand and is apparent only
tion of a tiny instructions controlled by to the exception handler.
number. PC, otherwise to extended
precision).
Which of these
events triggers
the underfiow
exception
depends on
whether the
underflow excep-
tion is masked.
Exception There is no difference in When the denormal excep- None, but some unneeded Operational improvement.
Precedence the precedence of the tion is not masked, it takes normalization of denormal
denormal exception, precedence over all other operands is prevented on
whether it be masked or exceptions. the 80387.
not.
C.3 TAG, STATUS, AND CONTROL WORDS
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
Bits C3-CO of After FINIT, incomplete After FINIT, incomplete None. Upgrade, to provide
Status Word FPREM, and hardware FPREM, and hardware consistent state after reset.
reset, the 80387 sets these reset, the 80287/8087
bits to zero. leaves these bits intact
(they contain the prior
value).
Bit C2 of Status Bit 10 (C2) serves as an This bit is undefined for None. Programs don't Upgrade to allow fast
Word incomplete bit for FPTAN. FPTAN. check C2 after FPT AN. checking of operand range.
Infinity Control Only affine ciosure is Both affine and projective Software that requires iEEE Standard 754
supported. Bit 12 remains closures are supported. projective inlinity arithmetic compatibility.
programmable but has no After RESET, the default may give different results.
effect on 80387 operation. value in the control word is
projective.
C-3
COMPATIBILITY BETWEEN THE 80387 AND THE 80287/8087
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
Status Word Bit When an invalid-operation When an invalid-operation None. Existing exception Upgrade and performance
6 for Stack Fault exception occurs due to exception occurs due to handlers need not change, Improvement.
stack overflow or under- stack overflow or under- but may be upgraded to
flow, not only is bit 0 (IE) of flow, only bit 0 (IE) of the take advantage of the
the status word set, but status word is set. Bit 6 is additional information.
also bit 6 is set to indicate RESERVED. Newly written handlers will
a stack fault and bit 9 (C1) be more effective.
specifies overflow or
underflow. Bit 6 is called
SF and serves to distin-
guish invalid exceptions
caused by stack overflow/
underflow from those
caused by numeric
operations.
Tag Word When loading the tag word The corresponding tag is Software may not operate Performance improvement
with an FLO EN V or checked before each reg15- correctly if it uses FLDENV
FRSTOR instruction, the ter access to determine the or FRSTOR to change tags
only interpretations of tag class of operand in the to values (other than
values used by the 80387 register; the tag is updated empty) that are different
are empty (value 11) and after every change to a from actual register
nonempty (values 00, 01, register so that the tag contents.
and 10). Subsequent always reflects the most
operations on a nonempty recent status of the regis-
register always examine ter. Programmers can load
the value in the register, a tag with a vaille that
not the value in its tag. The disagrees with the contents
FSTENV and FSAVE 0/ a register (for example,
instructions examine the the register contains valid
nonempty registers and contents, but the tag says
put the correct values in special; the 80287/8087, in
the tags before storing the this case, honors the tag
tag word. and does not examine the
register).
C.4 INSTRUCTION SET
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087180287 Behavior
Difference
FBSTP, FDIV, Operation on denormal Operation on denormal The exception handler for IEEE Standard 754
FIST(P), FPREM, operand is supported. An operand raises invalid- underflow may require compatibility.
FSQRT underflow exception can operation exception. change only if it gives
occur. Underflow is not possible. different treatment to
different opcodes. Possibly
fewer invalid-operation
exceptions will occur.
FSCALE The range of the scaling The range of the scaling Different result when 0 < Upgrade.
operand is not restricted. If operand is retricted. If 0 < IST(1)1< 1.
0< IST(1)1 < 1, the I ST(1) I < 1, the result is
scaling factor is zero; undefined and no excep-
therefore, ST(O) remains tion is signaled.
unchanged. If the rounded
result is not exact or if
there was a loss of
accuracy (masked under-
flow), the precision excep-
tion is signaled.
C-4
COMPATIBILITY BETWEEN THE 80387 AND THE 80287/8087
Difference Description
Reason
Issue Impact on Software for the
80387 Behavior 8087/80287 Behavior
Difference
FPREMl Performs partial remainder Does not exist. None. I EEE Standard 754
according to IEEE compatibility and upgrade.
Standard 754 standard.
FPREM Bits CO, C3, Cl of the The quotient bits are incor- None. Software that works Upgrade.
status word, correctly rect when performing a around the bug should not
reflect the three low-order reduction of 64
N
+ M when be affected.
bits of the quotient. N:2: 1 and or
FUCOM, Perform unordered Do not exist. None. I EEE Standard 754
FUCOMP, compare according to compatibility.
FUCOMPP IEEE Standard 754
standard.
FPTAN Range of operand is much Range of operand is None. Upgrade.
less restricted ( I ST(O) I < restricted (I ST(O) I < ,,/4);
263); reduces operand operand must be reduced
internally using an internal to range using FPREM.
,,/4 constant that is more
accurate.
After a stack overflow After a stack overflow IEEE Standard 754
when the invalid-operation when the invalid-operation compatibility.
exception is masked, both exception is masked, the
ST and ST(l) contain quiet original operand remains
NaNs. unchanged, but is pushed
toST(l).
FSIN, FCOS, Perform three common Do not exist. None. Upgrade.
FSINCOS trigonometric functions.
FPATAN Range of operands is I ST(O) I must be smaller None. Upgrade.
unrestricted. than I ST(l) I.
F2XMl Wider range of operand The supported operand None. Upgrade.
(-1 :5ST(O):5 +1). range is 0 :5 ST (0) :5 0.5.
FLO Does not report denormal Reports denormal None. Upgrade.
exception because the exception.
instruction is not
arithmetic.
FXTRACT If the operand is zero, the If the operand is zero, None. Software usually IEEE 754 recommendation
zero-divide exception is ST(l) is zero and no excep- bypasses zero and co. to fully support the 10gb
reported and ST(l) is -co. tion is reported. If the function.
II the operand is +co, no operand is + co, the
exception is reported. invalid-operation exception
is reported.
FLO constant Rounding control is in Rounding control is not in Results are the same as IEEE 754 recommendation.
effect. effect. for the 8087/80287 when
rounding control is set to
round to zero, round to
-co, and (in the case of
FLDL2T) round to nearest.
Results are different by
one in the least significant
bit of the signilicand in
round to + CXJ and round to
nearest (excluding
FLDL2T). FLDl and FLDZ
are always the same.
C-5
COMPATIBILITY BETWEEN THE 80387 AND THE 80287/8087
Difference D crlptlon
Realon
Isaue Impact on Software lor the
80387 Behavior 8087/80287 Behavior
Difference
FLD Iinglel Loading a denormal Loading a denormal causes If the next instruction is IEEE Standard 754
double precision causes the number to be the number to be converted FXTRACT or FXAM, the compatibility.
converted to extended to an unnormal. 80387 will give a different
precision (because it is put r e s u ~ than the
on the stack). 80287/8087.
FLO .Inglel When loading a signaling Does not raise an excep- The exception handler IEEE Standard 754
double preclalon NaN, raises invalid tion when loading a signal- need to be updated to compatibility.
exception. ing NaN. handle this condition.
FSETPM Treated as FNOP (no Informs the 80287 that the None. The 80386 handles all
operation). system is in protected addressing and exception-
mode. pointer information,
whether in protected mode
or not.
FXAM When encountering an May generate these combi- None. Upgrade, to provide
empty register, the 80387 nations, among others. repeatable results.
will not generate combina-
tions of C3-CO equal to
1101 or 1111.
All Tranlcenden- May generate different Round-up bit of status None. Upgrade, to signal round-
tal Instructions r e s u ~ in round-up bit of word is undefined for these ing status.
status word. instructions.
C-6
Compatibility Between the D
80387 and the 8087
APPENDIX D
COMPATIBILITY BETWEEN THE 80387 AND THE 8087
The 80386/80387 operating in real-address mode will execute 8087 programs without major
modification. However, because of differences in the handling of numeric exceptions between
the 80387 NPX and the 8087 NPX, exception-handling routines may need to be changed.
This appendix summarizes the additional differences between the 80387 NPX and the
8087 NPX (other than those already included in Appendix B), and provides details showing
how 8087 programs can be ported to the 80387.
1. The 80387 signals exceptions through a dedicated ERROR# line to the 80386; no inter-
rupt controller is needed for this purpose. The 8087 requires an interrupt controller
(8259A) to interrupt the CPU when an unmasked exception occurs. Therefore, any
interrupt-con troller-oriented instructions in numeric exception handlers for the 8087
should be deleted.
2. The 8087 instructions FENI/FNENI and FDISI/FNDISI perform no useful function
in the 80387. If the 80387 encounters one of these opcodes in its instruction stream, the
instruction will effectively be ignored-none of the 80387 internal states will be updated.
While 8087 code containing these instructions may be executed on the 80387, it is
unlikely that the exception-handling routines containing these instructions will be
completely portable to the 80387.
3. In real mode and protected mode (not including virtual 8086 mode), interrupt vector 16
must point to the numeric exception handling routine. In virtual 8086 mode, the V86
monitor can be programmed to accommodate a different location of the interrupt vector
for numeric exceptions.
4. The ESC instruction address saved in the 80386/80387 or 80386/80287 includes any
leading prefixes before the ESC opcode. The corresponding address saved in the
8086/8087 does not include leading prefixes.
5. In protected mode (not including virtual 8086 mode), the format of the 80387's saved
instruction and address pointers is different than for the 8087. The instruction opcode
is not saved in protected mode-exception handlers will have to retrieve the opcode from
memory if needed.
6. Interrupt 7 will occur in the 80386 when executing ESC instructions with either TS
(task switched) or EM (emulation) of the 80386 MSW set (TS= 1 or EM = 1). If TS is
set, then a WAIT instruction will also cause interrupt 7. An exception handler should
be included in 80387 code to handle these situations.
7. Interrupt 9 will occur if the second or subsequent words of a floating-point operand fall
outside a segment's size. Interrupt 13 will occur if the starting address of a numeric
operand falls outside a segment's size. An exception handler should be included to report
these programming errors.
D-1
COMPATIBILITY BETWEEN THE 80387 AND THE 8087
8. Except for the processor control instructions, all of the 80387 numeric instructions are
automatically synchronized by the 80386 CPU-the 80386 automatically waits until all
operands have been transferred between the 80386 and the 80387 before executing the
next ESC instruction. No explicit WAIT instructions are required to assure this
synchronization. For the 8087 used with 8086 and 8088 processors, explicit WAITs are
required before each numeric instruction to ensure synchronization. Although 8087
programs having explicit WAIT instructions will execute perfectly on the 80387 without
reassembly, these WAIT instructions are unnecessary.
9. Since the 80387 does not require WAIT instructions before each numeric instruction,
the ASM386 assembler does not automatically generate these WAIT instructions. The
ASM86 assembler, however, automatically precedes every ESC instruction with a WAIT
instruction. Although numeric routines generated using the ASM86 assembler will
generally execute correctly on the 80386/20, reassembly using ASM386 may result in
a more compact code image and faster execution.
The processor control instructions for the 80387 may be coded using either aWAIT or
No-WAIT form of mnemonic. The WAIT forms of these instructions cause ASM386
to precede the ESC instruction with a CPU WAIT instruction, in the identical manner
as does ASM86.
10. The address of a memory operand stored by FSA VE or FSTENV is undefined if the
previous ESC instruction did not refer to memory.
11. Because the 80387 automatically normalizes denormal numbers when possible, an 8087
program that uses the denormal exception solely to normalize denormal operands can
run on an 80387 by masking the denormal exception. The 8087 denormal exception
handler would not be used by the 80387 in this case. A numerics program runs faster
when the 80387 performs normalization of denormal operands. A program can detect
at run-time whether it is running on an 80387 or 8087/80287 and disable the denormal
exception when an 80387 is used.
D-2
80387 80-Bit CHMOS III
Numeric Processor Extension
E
This appendix is a copy of the 80387 Data Sheet, which is also available separately. (The
AC specifications have been deliberately left out.) The specifications in data sheets are subject
to change; consult the most recent data sheet for design-in information.
80387
80-BIT CHMOS III
NUMERIC PROCESSOR EXTENSION
High Performance SO-Bit Internal
Full-Range Transcendental Operations
Architecture for SINE, COSINE, TANGENT,
Implements ANSI/IEEE Standard 754-
ARCTANGENT and LOGARITHM
19S5 for Binary Floating-Point
Built-In Exception Handling
Arithmetic
Operates Independently of Real,
Five to Six Times SOS7/S02S7 Protected and Virtual-SOS6 Modes of
Performance the S03S6
Upward Object-Code Compatible from
Eight SO-Bit Numeric Registers, Usable
SOS7 and S02S7 as Individually Addressable General
Expands S03S6 Data Types to Include
Registers or as a Register Stack
32-, 64-, SO-Bit Floating POint, 32-, 64-
Available in 6S-Pin PGA Package
Bit Integers and 1S-Digit BCD Operands
(See Packaging Spec: Order #231369)
Directly Extends S03S6 Instruction Set
to Include Trigonometric, Logarithmic,
Exponential and Arithmetic Instructions
for All Data Types
The Intel 80387 is a high-performance numerics processor extension that extends the 80386 architecture with
floating point, extended integer and BCD data types. The 80386/80387 computing system fully conforms to
the ANSIIIEEE floating-point standard. Using a numerics oriented architecture, the 80387 adds over seventy
mnemonics to the 80386/80387 instruction set, making the 80386/80387 a complete solution for high-per-
formance numerics processing. The 80387 is implemented with 1.5 micron, high-speed CHMOS III technology
and packaged in a 68-pin ceramic pin grid array (PGA) package. The 80386/80387 is upward object-code
compatible from the 80386/80287, 80286/80287 and 808618087 computing systems.
I
BUS CONTROL LOGIC I DATA INTERFACE AND CONTROL UNIT I FLOATING POINT UNIT
31
DBUS INTERFACE
DATA ALIGNMENT AND OPERAND CHECKING
16
00-D31
386CLK2 387CLK2
231920-1
Figure 0.1. 80387 Block Diagram
Intel Corporation assumes no responsibility for the use of any circuitry other than circuitry embodied in an Intel product. No other circuit patent
licenses are implied. Information contained herein supersedes previously published specifications on these devices from Intel. January 1987
CD Intel Corporation, 1987 Order Number: 231920002
intJ
80387
CONTENTS
1.0 Functional Description. . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 4
2.0 Programming Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1 Data Types ..... .. ...................................................... 5
2.2 Numeric Operands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Register Set ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.1 Data Registers ....................................................... 7
2.3.2 Tag Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3.3 Status Word. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.4 Instruction and Data Pointers ......................................... 11
2.3.5 Control Word........................................................ 13
2.4 Interrupt Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Exception Handling...................................................... 14
2.6 Initialization ............................................................. 14
2.7 8087 and 80287 Compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . 15
2.7.1 General Differences. . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7.2 Exceptions........................................................... 16
3.0 Hardware Interface .................................. , . . . . . . . . . . . . . . . . . . . . . . 16
3.1 Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.1 80386 Clock 2 (386CLK2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 16
3.1.2 80387 Clock 2 (387CLK2). . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . . . . 16
3.1.3 80387 Clocking Mode (CKM)........................................... 18
3.1.4 System Reset (RESETIN). . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . . . . . . 18
3.1.5 Processor Extension Request (PEREQ) ................................ 18
3.1.6 Busy Status (BUSY #) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.7 Error Status (ERROR #) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.1.8 Data Pins (D31-DO) .............................. '" ..... ... ...... .... 18
3.1.9 Write/Read Bus Cycle (W/R#) ...... .................................. 18
3.1.10 Address Strobe (ADS#) ............................................. 19
3.1.11 BusReadylnput(READY#).......................................... 19
3.1.12 Ready Output (READYO #) . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . 19
3.1.13 Status Enable (STEN) .. .. . . . .. . . .. . . .. . .. . . .. .. . ... .. . . .. .. .. . . . . .. .. 19
3.1.14 NPX Select #1 (NPS1#).............................................. 19
3.1.15 NPXSelect #2 (NPS2) ......... ..... ........ ............. ............ 19
3.1.16 Command (CMDO#) ................................................. 19
3.2 Processor Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.1 Bus Control Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.2 Data Interface and Control Unit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.3 Floating Point Unit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 System Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3.1 Bus Cycle Tracking. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.2 80387 Addressing .................................................... 21
3.3.3 Function Select ...................................................... 21
3.3.4 CPU/NPX Synchronization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.5 Synchronous or Asynchronous Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3.6 Automatic Bus Cycle Termination ..................................... 22
3.4 Bus Operation ........................................................... 22
3.4.1 Nonpipelined Bus Cycles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4.1.1 Write Cycle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4.1.2 Read Cycle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4.2 Pipelined Bus Cycles ................................................. 24
3.4.3 Bus Cycles of Mixed Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4.4 BUSY # and PEREQ Timing Relationship .......... . . . . . . . . . . . . . . . . . . . . . 25
4.0 Mechanical Data ........................................................... 27
2
inter
80387
5.0 Electrical Data .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1 Absolute Maximum Ratings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2 DC Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.3 AC Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.0 80387 Extensions to the 80386 Instruction Set ............................... 33
Appendix A-Compatibility Between the 80287 NPX and the 8087 . . . . . . . . . . . . . . . . . . 37
Figure 0.1
Figure 1.1
Figure 2.1
Figure 2.2
Figure 2.3
Figure 2.4
Figure 2.5
Figure 2.6
Figure 2.7
Figure 3.1
Figure 3.2
Figure 3.3
Figure 3.4
Figure 3.5
Figure 3.6
Figure 3.7
Figure 4.1
Figure 5.1
Figure 5.2
Figure 5.3
Figure 5.4
Figure 5.5
Figure 5.6
Table 2.1
Table 2.2
Table 2.3
Table 2.4
Table 2.5
Table 2.6
Table 2.7
Table 3.1
Table 3.2
Table 3.3
Table 3.4
Table 5.1
Table 5.2
Table 5.3
FIGURES
80387 Block Diagram .............................................. .
80386/80387 Register Set .......................................... .
80387 Tag Word ................................................... .
80387 Status Word ................................................ .
Protected Mode 80387 Instruction and Data Pointer Image in Memory,
32-Bit Format ................................................... .
Real Mode 80387 Instruction and Data Pointer Image in Memory, 32-Bit
Format ......................................................... .
Protected Mode 80387 Instruction and Data Pointer Image in Memory,
16-Bit Format ................................................... .
Real Mode 80387 Instruction and Data Pointer Image in Memory, 16-Bit
Format ......................................................... .
80387 Control Word ............................................... .
80387 Pin Configuration ........................................... .
80386/80387 System Configuration ................................. .
Bus State Diagram ................................................ .
Nonpipelined Read and Write Cycles ............................... .
Fastest Transitions to and from Pipelined Cycles .................... .
Pipelined Cycles with Wait States .................................. .
STEN, BUSY # and PEREQ Timing Relationship ...................... .
Package Description .............................................. .
386CLK2/387CLK2 Waveform ...................................... .
Output Signals .................................................... .
Input and 1/0 Signals .............................................. .
RESET Signal ..................................................... .
Float from STEN .................................................. .
Other Parameters ................................................. .
TABLES
80387 Data Type Representation in Memory ......................... .
Condition Code Interpretation ..................................... .
Condition Code Interpretation after FPREM and FPREM11nstructions .
Condition Code Resulting from Comparison ........................ .
Condition Code Defining Operand Class ............................ .
80386 Interrupt Vectors Reserved for NPX .......................... .
Exceptions ....................................................... .
80387 Pin Summary ............................................... .
80387 Pin Cross-Reference ........................................ .
Output Pin Status after Reset ...................................... .
Bus Cycles Definition .............................................. .
DC Specifications ................................................. .
Timing Requirements .............................................. .
Other Parameters ................................................. .
3
1
4
7
8
11
12
12
12
13
18
20
22
24
25
26
26
27
30
30
31
31
31
32
6
9
10
10
10
14
15
17
17
18
21
28
29
32
intJ
80387
80386 Registers
i
80387 Data Registers
Tag
GENERAL REGISTERS SEGMENT REGISTERS Field
31 15 0 15 0 79 78 64 63 0 1 0
,----
EAX
AX
CS
RO Sign Exponent Significand
1 AH 1 AL
f------
SS
R1
f---
EBX
BX R2
1 BH 1 BL
DS f------
R3
ES
f------
CX R4
ECX
1 CH 1 CL
f---
FS
R5
f---
EDX
DX GS R6
1 DH -I DL
f------
R7
'-----
ESI
1
31 0
SI
I
: E F ~ G S :
I
15 0 47 0
EDI
1
Control Register I Instruction Pointer (in 80386) 1
DI
Status Register
1
Data Pointer (in 80386)
1
EBP
I
Tag Word
BP
ESP
1
SP
:
Figure 1.1.80386/80387 Register Set
1.0 FUNCTIONAL DESCRIPTION
The 80387 Numeric Processor Extension (NPX) pro-
vides arithmetic instructions for a variety of numeric
data types in 80386/80387 systems. It also exe-
cutes numerous built-in transcendental functions
(e.g. tangent, sine, cosine, and log functions). The
80387 effectively extends the register and instruc-
tion set of an 80386 system for existing data types
and adds several new data types as well. Figure 1.1
shows the model of registers visible to 80386/80387
programs. Essentially, the 80387 can be treated as
an additional resource or an extension to the 80386.
The 80386 together with an 80387 can be used as a
single unified system, the 80386/80387.
The 80387 works the same whether the 80386 is
executing in real-address mode, protected mode, or
virtual-8086 mode. All memory access is handled by
the 80386; the 80387 merely operates on instruc-
tions and values passed to it by the 80386. There-
fore, the 80387 is not sensitive to the processing
mode of the 80386.
4
In real-address mode and virtual-8086 mode, the
80386/80387 is completely upward compatible with
software for 808618087, 80286/80287 real-address
mode, and 80386/80287 real-address mode sys-
tems.
In protected mode, the 80386/80387 is completely
upward compatible with software for 80286/80287
protected mode, and 80386/80287 protected mode
systems.
The only differences of operation that may appear
when 808618087 programs are ported to a protect-
ed-mode 80386/80387 system (not using virtual-
8086 mode), is in the format of operands for the
administrative instructions FLDENV, FSTENV,
FRSTOR and FSAVE. These instructions are nor-
mally used only by exception handlers and operating
systems, not by applications programs.
The 80387 contains three functional units that can
operate in parallel to increase system performance.
The 80386 can be transferring commands and data
to the 80387 bus control logic for the next instruction
while the 80387 floating-point unit is performing the
current numeric instruction.
inter
80387
2.0 PROGRAMMING INTERFACE
The 80387 adds to an 80386 system additional data
types, registers, instructions, and interrupts specifi-
cally designed to facilitate high-speed numerics pro-
cessing. To use the 80387 requires no special pro-
gramming tools, because all new instructions and
data types are directly supported by the 80386 as-
sembler and compilers for high-level languages. All
8086/8088 development tools that support the 8087
can also be used to develop software for the
80386/80387 in real-address mode or virtual-8086
mode. All 80286 development tools that support the
80287 can also be used to develop software for the
80386/80387.
All communication between the 80386 and the
80387 is transparent to applications software. The
CPU automatically controls the 80387 whenever a
numerics instruction is executed. All physical memo-
ry and virtual memory of the CPU are available for
storage of the instructions and operands of pro-
grams that use the 80387. All memory addressing
modes, including use of displacement, base register,
index register, and scaling, are available for address-
ing numerics operands.
Section 6 at the end of this data sheet lists by class
the instructions that the 80387 adds to the instruc-
tion set of an 80386 system.
5
2.1 Data Types
Table 2.1 lists the seven data types that the 80387
supports and presents the format for each type. Op-
erands are stored in memory with the least signifi-
cant digit at the lowest memory address. Programs
retrieve these values by generating the lowest ad-
dress. For maximum system performance, all oper-
ands should start at physical-memory addresses
evenly divisible by four (doubleword boundaries); op-
erands may begin at any other addresses, but will
require extra memory cycles to access the entire op-
erand.
Internally, the 80387 holds all numbers in the ex-
tended-precision real format. I nstructions that load
operands from memory automatically convert oper-
ands represented in memory as 16-, 32-, or 64-bit
integers, 32- or 64-bit floating-point numbers, or 18-
digit packed BCD numbers into extended-precision
real format. Instructions that store operands in mem-
ory perform the inverse type conversion.
2.2 Numeric Operands
A typical NPX instruction accepts one or two oper-
ands and produces a single result. In two-operand
instructions, one operand is the contents of an NPX
register, while the other may be a memory location.
The operands of some instructions are predefined;
for example FSQRT always takes the square root of
the number in the top stack element.
inter
80387
Table 2.1. 80387 Data Type Representation in Memory
Most Significant Byte HIGHEST ADDRESSED BYTE
Data
Range Precision
017 017 017 017 017 017
01
7
Formats
7
Word Integer 10
4
16 Bits
.lITWO S
COMPLEMENT)
15 0
Short Integer 10
9
32 Bits
11TWO S
COMPLEMENT}
31 0
Long Integer 10
19
64 Bits
63
Packed BCD 10
18
18 Digits Sl
x I d" d1t;. d l ~ d 1.1 d'j d12 d"
MAGNITUDE
d 'U d'-j d, d, d,
79 72
Single Precision
1038
24 Bits
;\ BIASED I
S EXPONENT
SIGN1FlCAND
I
J1
23'- I,
0
Double Precision
10308
53 Bits
sL
BIASED
I
SIGNIFtCAND
EXPONENT
63
52'-1 ..
Extended 10-,-4932
64 Bits
sL
BIASED
h
SIGNIFICANO
EXPONENT
Precision
79
NOTES:
(1) S ~ Sign bit (0 ~ positive, 1 ~ negative)
(2) d
n
~ Decimal digit (two per byte)
64 63'
(3) X = Bits have no significance; 80387 ignores when loading, zeros when storing
(4). = Position of implicit binary point
(5) I = Integer bit of significand; stored in temporary real, implicit in single and double precision
(6) Exponent Bias (normalized values):
Single: 127 (7FH)
Double: 1023 (3FFH)
Extended Real: 16383 (3FFFH)
(7) Packed BCD: (-I)S (017 ... 00)
(8) Real: (-I)S (2E-BIAS) (Fo F1"')
6
d.
01
7
01
7
a I
I (TWO S
COMPLEM(NT)
0
d; d ,1 d,
dJ
0
I
0
I
0
231920-2
inter
80387
15 o
TAG (7) TAG (6) TAG (5) TAG (4) TAG (3) TAG (2) TAG (1) TAG (0)
NOTE:
The index i of tag(i) is not top-relative. A program typically uses the "top" field of Status Word to determine which tag(i)
field refers to logical top of stack.
TAG VALUES:
00 = Valid
01 = Zero
10 = QNaN, SNaN, Infinity, Denormal and Unsupported Formats
11 = Empty
Figure 2.1. 80387 Tag Word
2.3 Register Set
Figure 1.1 shows the 80387 register set. When an
80387 is present in a system, programmers may use
these registers in addition to the registers normally
available on the 80386.
2.3.1 DATA REGISTERS
80387 computations use the 80387's data registers.
These eight 80-bit registers provide the equivalent
capacity of twenty 32-bit registers. Each of the eight
data registers in the 80387 is 80 bits wide and is
divided into "fields" corresponding to the NPXs ex-
tended-precision real data type.
The 80387 register set can be accessed either as a
stack, with instructions operating on the top one or
two stack elements, or as a fixed register set, with
instructions operating on explicitly designated regis-
ters. The TOP field in the status word identifies the
current top-of-stack register. A "push" operation
decrements TOP by one and loads a value into the
new top register. A "pop" operation stores the value
from the current top register and then increments
7
TOP by one. Like 80386 stacks in memory, the
80387 register stack grows "down" toward lower-
addressed registers.
Instructions may address the data registers either
implicitly or explicitly. Many instructions operate on
the register at the TOP of the stack. These instruc-
tions implicitly address the register at which TOP
points. Other instructions allow the programmer to
explicitly specify which register to user. This explicit
register addressing is also relative to TOP.
2.3.2 TAG WORD
The tag word marks the content of each numeric
data register, as Figure 2.1 shows. Each two-bit tag
represents one of the eight numerics registers. The
principal function of the tag word is to optimize the
NPXs performance and stack handling by making it
possible to distinguish between empty and nonemp-
ty register locations. It also enables exception han-
dlers to check the contents of a stack location with-
out the need to perform complex decoding of the
actual data.
intJ
80387
,------------------ 80387 BUSY
,--,-,--------------- TOP OF STACK POINTER
,-H-+--r---,-,-------------- CONDITION CODE
ERROR SUMMARY STATUS -------'
STACK FLAG _______ --l
EXCEPTION FLAGS:
PRECISION -----------"
UNDERFLOW - - - - - - - - - ~
OVERFLOW ---------------'
ZERO DIVIDE -------------'
DENORMALIZED OPERAND ---------------'
INVALID OPERATION -----------------'
231920-3
ES is set if any unmasked exception bit is set; cleared otherwise.
See Table 2.2 for interpretation of condition code.
TOP values:
000 ~ Register 0 is Top of Stack
001 ~ Register 1 is Top of Stack
111 ~ Register 7 is Top of Stack
For definitions of exceptions, refer to the section entitled
"Exception Handling"
Figure 2.2. 80387 Status Word
2.3.3 STATUS WORD
The 16-bit status word (in the status register) shown
in Figure 2.2 reflects the overall state of the 80387.
It may be read and inspected by CPU code.
Bit 15, the B-bit (busy bit) is included for 8087 com-
patibility only. It reflects the contents of the ES bit
(bit 7 of the status word), not the status of the
BUSY # output of 80387/80287.
Bits 13-11 (TOP) point to the 80387 register that is
the current top-of-stack.
The four numeric condition code bits (C3-CO) are
similar to the flags in a CPU; instructions that per-
form arithmetic operations update these bits to re-
flect the outcome. The effects of these instructions
on the condition code are summarized in Tables 2.2
through 2.5.
Bit 7 is the error summary (ES) status bit. This bit is
set if any unmasked exception bit is set; it is clear
otherwise. If this bit is set, the ERROR# signal is
asserted.
8
Bit 6 is the stack flag (SF). This bit is used to distin-
guish invalid operations due to stack overflow or un-
derflow from other kinds of invalid operations. When
SF is set, bit 9 (C1) distinguishes between stack
overflow (C1 = 1) and underflow (C
1
= 0).
Figure 2.2 shows the six exception flags in bits 5-0
of the status word. Bits 5-0 are set to indicate that
the 80387 has detected an exception while execut-
ing an instruction. A later section entitled "Exception
Handling" explains how they are set and used.
Note that when a new value is loaded into the status
word by the FLDENV or FRSTOR instruction, the
value of ES (bit 7) and its reflection in the B-bit (bit
15) are not derived from the values loaded from
memory but rather are dependent upon the values of
the exception flags (bits 5-0) in the status word and
their corresponding masks in the control word. If ES
is set in such a case, the ERROR# output of the
80387 is activated immediately.
il1tef
80387
Table 2.2. Condition Code Interpretation
Instruction CO(S)
I
C3(Z) C1 (A) C2(C)
FPREM, FPREM1 Three least significant bits
Reduction
(see Table 2.3) of quotient
0= complete
Q2 QO Q1
orO/U#
1 = incomplete
FCOM, FCOMP,
FCOMPP, FTST, Result of comparison
Zero
Operand is not
FUCOM, FUCOMP, (see Table 2.4)
orO/U#
comparable
FUCOMPP, FICOM, (Table 2.4)
FICOMP
FXAM Operand class Sign Operand class
(see Table 2.5) orO/U# (Table 2.5)
FCHS, FABS, FXCH,
FINCTOP, FDECTOP,
Zero
Constant loads, UNDEFINED
or O/U#
UNDEFINED
FXTRACT, FLD,
FILD, FBLD,
FSTP (ext real)
FIST, FBSTP,
FRNDINT, FST,
FSTP, FADD, FMUL,
Roundup
FDIV, FDIVR, UNDEFINED UNDEFINED
FSUB, FSUBR,
orO/U#
FSCALE, FSQRT,
FPATAN, F2XM1,
FYL2X, FYL2XP1
FPTAN, FSIN Roundup Reduction
FCOS, FSINCOS UNDEFINED orO/U#, 0= complete
undefined 1 = incomplete
if C2 = 1
FLDENV, FRSTOR Each bit loaded from memory
FLDCW, FSTENV,
FSTCW, FSTSW, UNDEFINED
FCLEX, FINIT,
FSAVE
O/U# When both IE and SF bits of status word are set, indicating a stack exception, this bit
distinguishes between stack overflow (C1 = 1) and underflow (C1 = 0).
Reduction If FPREM or FPREM1 produces a remainder that is less than the modulus, reduction is
complete. When reduction is incomplete the value at the top of the stack is a partial
remainder, which can be used as input to further reduction. For FPTAN, FSIN, FCOS, and
FSINCOS, the reduction bit is set if the operand at the top of the stack is too large. In this
case the original operand remains at the top of the stack.
Roundup When the PE bit of the status word is set, this bit indicates whether the last rounding in the
instruction was upward.
UNDEFINED Do not rely on finding any specific value in these bits.
9
inter
80387
Table 2.3. Condition Code Interpretation after FPREM and FPREM1 Instructions
Condition Code
Interpretation after FPREM and FPREM1
C2 C3 C1 CO
Incomplete Reduction:
1 X X X further interation required
for complete reduction
01 00 02 o MOD8
0 0 0 0
0 1 0 1
Complete Reduction:
1 0 0 2
0
1 1 0 3
CO, C3, C1 contain three least
0 0 1 4
significant bits of quotient
0 1 1 5
1 0 1 6
1 1 1 7
Table 2.4. Condition Code Resulting from Comparison
Order C3 C2 CO
TOP> Operand 0 0 0
TOP < Operand 0 0 1
TOP = Operand 1 0 0
Unordered 1 1 1
Table 2.5. Condition Code Defining Operand Class
C3 C2 C1 CO Value at TOP
0 0 0 0 + Unsupported
0 0 0 1 + NaN
0 0 1 0 - Unsupported
0 0 1 1 - NaN
0 1 0 0 + Normal
0 1 0 1 + Infinity
0 1 1 0 - Normal
0 1 1 1 - Infinity
1 0 0 0 +0
1 0 0 1 + Empty
1 0 1 0 -0
1 0 1 1 - Empty
1 1 0 0 + Denormal
1 1 1 0 - Denormal
10
inter
80387
2.3.4 INSTRUCTION AND DATA POINTERS
Because the NPX operates in parallel with the CPU,
any errors detected by the NPX may be reported
after the CPU has executed the ESC instruction
which caused it. To allow identification of the failing
numeric instruction, the 80386/80387 contains two
pointer registers that supply the address of the fail-
ing numeric instruction and the address of its numer-
ic memory operand (if appropriate).
The instruction and data pointers are provided for
user-written error handlers. These registers are ac-
tually located in the 80386, but appear to be located
in the 80387 because they are accessed by the ESC
instructions FLDENV, FSTENV, FSAVE, and
FRSTOR. (In the 8086/8087 and 80286/80287,
these registers are located in the NPX.) Whenever
the 80386 decodes a new ESC instruction, it saves
the address of the instruction (including any prefixes
that may be present), the address of the operand (if
present), and the opcode.
The instruction and data pointers appear in one of
four formats depending on the operating mode of
the 80386 (protected mode or real-address mode)
and depending on the operand-size attribute in ef-
fect (32-bit operand or 16-bit operand). When the
80386 is in virtual-8086 mode, the real-address
mode formats are used. (See Figures 2.3 through
2.6.) The ESC instructions FLDENV, FSTENV,
FSAVE, and FRSTOR are used to transfer these val-
ues between the 80386 registers and memory. Note
that the value of the data pointer is undefined if the
prior ESC instruction did not have a memory oper-
and.
31 23
32-BIT PROTECTED MODE FORMAT
15 7 o
RESERVED CONTROL WORD o
RESERVED STATUS WORD 4
RESERVED TAG WORD 8
IPOFFSET C
RESERVED CSSELECTOR 10
DATA OPERAND OFFSET 14
RESERVED OPERAND SELECTOR 18
Figure 2.3. Protected Mode 80387 Instruction and Data POinter Image in Memory, 32Bit Format
11
infef
80387
32-BIT REAL-ADDRESS MODE FORMAT
31 23 15 7 o
RESERVED CONTROL WORD
RESERVED STATUS WORD
RESERVED TAG WORD
RESERVED INSTRUCTION POINTER 15 .. 0
0000
I
INSTRUCTION POINTER 31 .. 16 I 0 I OPCODE 10 .. 0
RESERVED OPERAND POINTER 15 .. 0
0000 I
OPERAND POINTER 31 .. 16
I
0000 00000000
Figure 2.4. Real Mode 80387 Instruction and Data Pointer Image in Memory, 32-Bit Format
16-BIT PROTECTED MODE FORMAT 16-BIT REAL-ADDRESS MODE AND
VIRTUAL-a086 MODE FORMAT 15 7
CONTROL WORD
STATUS WORD
TAG WORD
IPOFFSET
CSSELECTOR
OPERAND OFFSET
OPERAND SELECTOR
Figure 2.5. Protected Mode 80387
Instruction and Data Pointer
Image in Memory, 16-Bit Format
o
o
2
4
6
a
A
C
12
15 7 o
CONTROL WORD
STATUS WORD
TAG WORD
INSTRUCTION POINTER 15 .. 0
IP19. 16 101
OPCODE 10 .. 0
OPERAND POINTER 15 .. 0
DP 19.16/0 / 0 0 0 0 0 0 0 0 0 o 0
Figure 2.6. Real Mode 80387
Instruction and Data Pointer
Image in Memory, 16-Bit Format
o
4
a
C
10
14
1a
o
2
4
6
8
A
C
inter
80387
5
117
a
RESERVED
RESERVED"
ROUNDING CONTROL
PRECISION CONTROL
I x x x I x I RC I PC I x x I : I I I I I I
" "0" AFTER RESET OR FIN IT;
CHANGEABLE UPON LOADING THE
CONTROL WORD (CW). PROGRAMS
MUST IGNORE THIS BIT.
RESERVED
EXC EPTION MASKS:
PRECISION
U NDERFLOW
OVERFLOW
ERO DIVIDE
D OPERAND
Z
DENORMALIZE
INVALID OPERATION
Precision Control
00-24 bits (single precision)
01-(reserved)
10-53 bits (double precision)
11-64 bits (extended precision)
Rounding Control
OO-Round to nearest or even
01-Round down (toward - 00)
1 o-Round up (toward + "")
11-Chop (truncate toward zero)
231920-4
Figure 2.7. 80387 Control Word
2.3.5 CONTROL WORD
The NPX provides several processing options that
are selected by loading a control word from memory
into the control register. Figure 2.7 shows the format
and encoding of fields in the control word.
The low-order byte of this control word configures
the 80387 error and exception masking. Bits 5-0 of
the control word contain individual masks for each of
the six exceptions that the 80387 recognizes.
The high-order byte of the control word configures
the 80387 operating mode, including precision and
rounding.
Bit 12 no longer defines infinity control and is a
reserved bit. Only affine closure is supported for
infinity arithmetic. The bit is initialized to zero after
RESET or FINIT and is changeable upon loading
the CWo Programs must ignore this bit.
The rounding control (RG) bits (bits 11-10) pro-
vide for directed rounding and true chop, as well
as the unbiased round to nearest even mode
specified in the IEEE standard. Rounding control
13
affects only those instructions that perform
rounding at the end of the operation (and thus
can generate a precision exception); namely,
FST, FSTP, FIST, all arithmetic instructions (ex-
cept FPREM, FPREM1, FXTRACT, FABS, and
FCHS), and all transcendental instructions.
The precision control (PG) bits (bits 9-8) can be
used to set the 80387 internal operating precision
of the significand at less than the default of 64
bits (extended precision). This can be useful in
providing compatibility with early generation arith-
metic processors of smaller precision. PC affects
only the instructions ADD, SUB, DIV, MUL, and
SORT. For all other instructions, either the preci-
sion is determined by the opcode or extended
precision is used.
2.4 Interrupt Description
Several interrupts of the 80386 are used to report
exceptional conditions while executing numeric pro-
grams in either real or protected mode. Table 2.6
shows these interrupts and their causes.
inter
80387
Table 2.6. 80386 Interrupt Vectors Reserved for NPX
Interrupt
Cause of Interrupt
Number
7 An ESC instruction was encountered when EM or TS of 80386 control register zero (CRO)
was set. EM = 1 indicates that software emulation of the instruction is required. When TS
is set, either an ESC or WAIT instruction causes interrupt 7. This indicates that the current
NPX context may not belong to the current task.
9 An operand of a coprocessor instruction wrapped around an addressing limit (OFFFFH for
small segments, OFFFFFFFFH for big segments, zero for expand-down segments) and
spanned inaccessible addressesa. The failing numerics instruction is not restartable. The
address of the failing numerics instruction and data operand may be lost; an FSTENV does
not return reliable addresses. As with the 80286/80287, the segment overrun exception
should be handled by executing an FNINIT instruction (i.e. an FINIT without a preceding
WAIT). The return address on the stack does not necessarily point to the failing instruction
nor to the following instruction. The interrupt can be avoided by never allowing numeric
data to start within 108 bytes of the end of a segment.
13 The first word or doubleword of a numeric operand is not entirely within the limit of its
segment. The return address pushed onto the stack of the exception handler points at the
ESC instruction that caused the exception, including any prefixes. The 80387 has not
executed this instruction; the instruction pointer and data pointer register refer to a
previous, correctly executed instruction.
16 The previous numerics instruction caused an unmasked exception. The address of the
faulty instruction and the address of its operand are stored in the instruction pointer and
data pointer registers. Only ESC and WAIT instructions can cause this interrupt. The
80386 return address pushed onto the stack of the exception handler points to a WAIT or
ESC instruction (including prefixes). This instruction can be restarted after clearing the
exception condition in the NPX. FNINIT, FNCLEX, FNSTSW, FNSTENV, and FNSAVE
cannot cause this interrupt.
. . ... , ,
a. An operand may wrap around an addreSSing limit when the segment limit IS near an addreSSing limit and the operand IS near the largest valid
address in the segment. Because of the wraparound, the beginning and ending addresses of such an operand will be at opposite ends of the
segment. There are two ways that such an operand may also span inaccessible addresses: 1) if the segment limit is not equal to the addressing
limit (e.g. addressing limit is FFFFH and segment limit is FFFDH) the operand will span addresses that are not within the segment (e,g, an abyte
operand that starts at valid offset FFFC will span addresses FFFC-FFFF and 00000003; however addresses FFFE and FFFF are not valid,
because they exceed the l i m ~ ) ; 2) if the operand begins and ends in present and accessible pages but intermediate bytes of the operand fall in a
notpresent page or a page to which the procedure does not have access rights,
2.5 Exception Handling
The 80387 detects six different exception conditions
that can occur during instruction execution. Table
2.7 lists the exception conditions in order of prece-
dence, showing for each the cause and the default
action taken by the 80387 if the exception is masked
by its corresponding mask bit in the control word.
Any exception that is not masked by the control
word sets the corresponding exception flag of the
status word, sets the ES bit of the status word, and
asserts the ERROR# signal. When the CPU
attempts to execute another ESC instruction or
WAIT, exception 16 occurs. The exception condi-
tion must be resolved via an interrupt service
routine. The 80386/80387 saves the address of the
floating-point instruction that caused the exception
and the address of any memory operand required
by that instruction.
14
2.6 Initialization
80387 initialization software must execute an FNIN-
IT instruction (i.e. an FINIT without a preceding
WAIT) to clear ERROR#-. The FNINIT is not re-
quired for the 80287, though Intel documentation
recommends its use (refer to the Numerics' Supple-
ment to the iAPX 286 Programmer's Reference
Manual). After a hardware RESET, the ERROR#-
output is asserted to indicate that an 80387 is pres-
ent. To accomplish this, the IE and ES bits of the
status word are set, and the 1M bit in the control
word is reset. After FNINIT, the status word and the
control word have the same values as in an 80287
after RESET.
inter
80387
2.78087 and 80287 Compatibility
This section summarizes the differences between
the 80387 and the 80287. Any migration from the
8087 directly to the 80387 must also take into ac-
count the differences between the 8087 and the
80287 as listed in Appendix A.
Many changes have been designed into the 80387
to directly support the IEEE standard in hardware.
These changes result in increased performance by
eliminating the need for software that supports the
standard.
2.7.1 GENERAL DIFFERENCES
The 80387 supports only affine closure for infinity
arithmetic, not projective closure. Bit 12 of the Con-
trol Word (CW) no longer defines infinity control. It is
a reserved bit; but it is initialized to zero after RESET
or FINIT and is changeable upon loading the CWo
Programs must ignore this bit.
Operands for FSCALE and FPATAN are no longer
restricted in range (except for 00); F2XM1 and
FPT AN accept a wider range of operands.
The results of transcendental operations may be
slightly different from those computed by 80287.
In the case of FPTAN, the 80387 supplies a true
tangent result in ST(1), and (always) a floating pOint
1 in ST.
Rounding control is in effect for FLD constant.
Software cannot change entries of the tag word to
values (other than empty) that do not reflect the ac-
tual register contents.
After reset, FINIT, and incomplete FPREM, the
80387 resets to zero the condition code bits C3-CO
of the status word.
In conformance with the IEEE standard, the 80387
does not support the special data formats: pseu-
dozero, pseudo-NaN, pseudoinfinity, and unnormal.
Table 2.7. Exceptions
Exception Cause
Default Action
(if exception is masked)
Invalid Operation on a signaling NaN, unsupported format, Result is a quiet NaN, integer
Operation indeterminate form (0' 00, 0/0, (+ 00) + (- 00), etc.), or indefinite, or BCD indefinite
stack overflow/underflow (SF is also set).
Denormalized At least one of the operands is denormalized, i.e. it has Normal processing
Operand the smallest exponent but a nonzero significand. continues
Zero Divisor The divisor is zero while the dividend is a noninfinite, Result is 00
nonzero number.
Overflow The result is too large in magnitude to fit in the specified Result is largest finite value
format. or 00
Underflow The true result is nonzero but too small to be Result is denormalized or
represented in the specified format, and, if underflow zero
exception is masked, denormalization causes loss of
accuracy.
Inexact The true result is not exactly representable in the Normal processing
Result specified format (e.g. 1/3); the result is rounded continues
(Precision) according to the rounding mode.
15
inter
80387
2.7.2 EXCEPTIONS
When the overflow or underflow exception is
masked, one difference from the 80287 is in round-
ing when overflow or underflow occurs. The 80387
produces results that are consistent with the round-
ing mode. The other difference is that the 80387
sets its underflow flag only if there is also a loss of
accuracy during denormalization.
A number of differences exist due to changes in the
IEEE standard and to functional improvements to
the architecture of the 80387:
1. Fewer invalid-operation exceptions due to denor-
mal operands, because the instructions FSQRT,
FOIV, FPREM and conversions to BCO or to inte-
ger normalize denormal operands before pro-
ceeding.
2. The FSQRT, FBSTP, and FPREM instructions
may cause underflow, because they support de-
normal operands.
3. The denormal exception can occur during the
transcendental instructions and the FXTRACT in-
struction.
4. The denormal exception no longer takes prece-
dence over all other exceptions.
5. When the operand is zero, the FXTRACT instruc-
tion reports a zero-divide exception and leaves
- 00 in ST(1).
6. The status word has a new bit (SF) that signals
when invalid-operation exceptions are due to
stack underflow or overflow.
7. FLO extended precision no longer reports den or-
mal exceptions, because the instruction is not nu-
meric.
8. FLO single/double precision when the operand is
denormal converts the number to extended preci-
sion and signals the denormalized operand ex-
ception. When loading a signaling NaN, FLO
single/double precision signals an invalid-opera-
tion exception.
9. The 80387 only generates quiet NaNs (as on the
80287); however, the 80387 distinguishes be-
tween quiet NaNs and signaling NaNs. Signaling
NaNs trigger exceptions when they are used as
operands; quiet NaNs do not (except for FCOM,
FIST, and FBSTP which also raise IE for quiet
NaNs).
3.0 HARDWARE INTERFACE
In the following description of hardware interface,
the # symbol at the end of a signal name indicates
that the active or asserted state occurs when the
16
signal is at a low Voltage. When no # is present after
the signal name, the signal is asserted when at the
high voltage level.
3.1 Signal Description
In the following signal descriptions, the 80387 pins
are grouped by function as follows:
1. Execution control-386CLK2, 387ClK2, CKM,
RESETIN
2. NPX handshake-PEREQ, BUSY#, ERROR#
3. Bus interface pins-031-00, W/R#, AOS#,
REAOY#, REAOYO#
4. Chip/Port Select-STEN, NPS1 #, NPS2,
CMOO#
5. Power supplies-Vee, Vss
Table 3.1 lists every pin by its identifier, gives a brief
description of its function, and lists some of its char-
acteristics. All output signals are tristate; they leave
floating state only when STEN is active. The output
buffers of the bidirectional data pins 031-00 are
also tristate; they leave floating state only in read
cycles when the 80387 is selected (i.e. when STEN,
NPS1 #, and NPS2 are all active).
Figure 3.1 and Table 3.2 together show the location
of every pin in the pin grid array.
3.1.1 80386 CLOCK 2 (386CLK2)
This input uses the 80386 CLK2 signal to time the
bus control logic. Several other 80387 signals are
referenced to the rising edge of this signal. When
CKM = 1 (synchronous mode) this pin also clocks
the data interface and control unit and the floating-
point unit of the 80387. This pin requires MOS-Ievel
input. The Signal on this pin is divided by two to pro-
duce the internal clock signal ClK.
3.1.280387 CLOCK 2 (387CLK2)
When CKM = 0 (asynchronous mode) this pin pro-
vides the clock for the data interface and control unit
and the floating-point unit of the 80387. In this case,
the ratio of the frequency of 387CLK2 to the fre-
quency of 386CLK2 must lie within the range 10:16
to 16:10. When CKM = 1 (synchronous mode) this
pin is ignored; 386ClK2 is used instead for the data
interface and control unit and the floating-point unit.
This pin requires TTL-level input.
80387
Table 3.1. 80387 Pin Summary
Pin
Function
Active Input! Referenced
Name State Output To
386CLK2 80386 CLocK 2 I
387CLK2 80387 CLocK 2 I
CKM 80387 CLocKing Mode I
RESETIN System reset High I 386CLK2
PEREQ Processor Extension High 0 386CLK2/STEN
REQuest
BUSY# Busy status Low 0 386CLK2/STEN
ERROR# Error status Low 0 387CLK2/STEN
031-00 Data pins High I/O 386CLK2
W/R# Write/Read bus cycle HilLa I 386CLK2
AOS# ADdress Strobe Low I 386CLK2
REAOY# Bus ready input Low I 386CLK2
REAOYO# Ready output Low 0 386CLK2/STEN
STEN STatus ENable High I 386CLK2
NPS1# NPX select # 1 Low I 386CLK2
NPS2 NPX select #2 High I 386CLK2
CMOO# CoMmanD Low I 386CLK2
Vee
I
Vss
I
NOTE:
STEN is referenced to only when getting the output pins into or out of tristate mode.
Table 3.2. 80387 Pin Cross-Reference
A2 - 09 C11 -
VSS
J10 -
VSS
A3 - 011 01 - 05 J11 - CKM
A4 - 012 02 - 04 K1 - PEREQ
A5 - 014 010 - 024 K2 - BUSY#
A6 -
Vee
011 - 025 K3 - Tie High
A7 - 016 E1 -
Vee
K5 - W/R#
A8 - 018 E2 -
VSS
K5 -
Vee
A9 -
Vee
E10 - 026 K6 - NPS2
A10 - 021 E11 - 027 K7 - AOS#
B1 - 08 F1 -
Vee
K8 - REAOY#
B2 -
Vss
F2 -
VSS
K9 - No Connect
B3 - 010 F10 - Vee
K10 - 386CLK2
B4 -
Vee
F11 -
VSS
K11 - 387CLK2
B5 - 013 G1 - 03 L2 - ERROR#
B6 - 015 G2 - 02 L3 - REAOYO#
B7 -
VSS
G10 - 028 L4 - STEN
B8 - 017 G11 - 029 L5 -
VSS
B9
- 019 H1 - 01 L6 - NPS1#
B10 - 020 H2 - 00 L7 -
Vee
B11 - 022 H10 - 030 L8 - CMOO#
C1 - 07 H11 - 031 L9 - Tie High
C2 - 06 J1 -
Vss
L10 - RESETIN
C10 - 023 J2 -
Vee
17
80387
ABCDEFGHJKL
*
+
2 + + +
3 + +
4 + +
5 + +
6 + +
7 + +
8 + +
9 + +
10 + + +
11 + +
+ + + +
+ + + +
80387
+ + + +
+ + + +
PIN SIDE VIEW
*Pin 1
+ + +
+ + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + +
+ + +
231920-5
Figure 3.1. 80387 Pin Configuration
3.1.380387 CLOCKING MODE (CKM)
This pin is a strapping option. When it is strapped to
Vee, the 80387 operates in synchronous mode;
when strapped to Vss, the 80387 operates in asyn-
chronous mode. These modes relate to clocking of
the data interface and control unit and the floating-
point unit only; the bus control logic always operates
synchronously with respect to the 80386.
3.1.4 SYSTEM RESET (RESETIN)
A LOW to HIGH transition on this pin causes the
80387 to terminate its present activity and to enter
a dormant state. RESETIN must remain HIGH for
at least 40 387CLK2 periods. The HIGH to LOW
transitions of RESETIN must be synchronous with
386CLK2, so that the phase of the internal clock of
the bus control logic (which is the 386CLK2 divided
by 2) is the same as the phase of the internal clock
of the 80386. After RESETIN goes LOW, at least 50
387CLK2 periods must pass before the first NPX
instruction is written into the 80387. This pin should
be connected to the 80386 RESET pin. Table 3.3
shows the status of other pins after a reset.
Table 3.3. Output Pin Status during Reset
Pin Value Pin Name
HIGH REAOYO#, BUSY#
LOW PEREa, ERROR#
Tri-State OFF 031-00
18
3.1.5 PROCESSOR EXTENSION REQUEST
(PEREQ)
When active, this pin signals to the 80386 CPU that
the 80387 is ready for data transfer to/from its data
FIFO. When all data is written to or read from the
data FIFO, PEREa is deactivated. This signal al-
ways goes inactive before BUSY # goes inactive.
This signal is referenced to 386CLK2. It should be
connected to the 80386 PEREa input. Refer to Fig-
ure 3.7 for the timing relationships between this and
the BUSY# and ERROR# pins.
3.1.6 BUSY STATUS (BUSV#)
When active, this pin signals to the 80386 CPU that
the 80387 is currently executing an instruction. This
signal is referenced to 386CLK2. It should be con-
nected to the 80386 BUSY # pin. Refer to Figure 3.7
for the timing relationships between this and the
PEREa and ERROR# pins.
3.1.7 ERROR STATUS (ERROR#)
This pin reflects the ES bits of the status register.
When active, it indicates that an unmasked excep-
tion has occurred (except that, immediately after a
reset, it indicates to the 80386 that an 80387 is pres-
ent in the system). This signal can be changed to
inactive state only by the following instructions (with-
out a preceding WAIT): FNINIT, FNCLEX,
FNSTENV, and FNSAVE. This signal is referenced
to 387CLK2. It should be connected to the 80386
ERROR# pin. Refer to Figure 3.7 for the timing rela-
tionships between this and the PEREa and BUSY #
pins.
3.1.8 DATA PINS (031-00)
These bidirectional pins are used to transfer data
and opcodes between the 80386 and 80387. They
are normally connected directly to the correspond-
ing 80386 data pins. HIGH state indicates a value of
one. DO is the least significant data bit. Timings are
referenced to 386CLK2.
3.1.9 WRITE/READ BUS CYCLE (W/R#)
This signal indicates to the 80387 whether the
80386 bus cycle in progress is a read or a write cy-
cle. This pin should be connected directly to the
80386 W/R# pin. HIGH indicates a write cycle;
LOW, a read cycle. This input is ignored if any of the
signals STEN, NPS1 #, or NPS2 is inactive. Setup
and hold times are referenced to 386CLK2.
intJ
80387
3.1.10 ADDRESS STROBE (ADS#)
This input, in conjunction with the READY # input
indicates when the 80387 buscontrol logic may
sample W/R# and the chip-select signals. Setup
and hold times are referenced to 386ClK2. This pin
should be connected to the 80386 ADS# pin.
3.1.11 BUS READY INPUT (READY#)
This input indicates to the 80387 when an 80386
bus cycle is to be terminated. It is used by the bus-
control logic to trace bus activities. Bus cycles can
be extended indefinitely until terminated by
READY #. This input should be connected to the
same signal that drives the 80386 READ# input.
Setup and hold times are referenced to 386ClK2.
3.1.12 READY OUTPUT (READYO#)
This pin is activated at such a time that write cycles
are terminated after two clocks and read cycles after
three clocks. I n configurations where no extra wait
states are required, it can be used to directly drive
the 80386 READY # input. Refer to section 3.4 "Bus
Operation" for details. This pin is activated only dur-
ing bus cycles that select the 80387. This signal is
referenced to 386ClK2.
3.1.13 STATUS ENABLE (STEN)
This pin serves as a chip select for the 80387. When
inactive, this pin forces BUSY #, PEREQ, ERROR #,
and READYO# outputs into floating state. D31-DO
are normally floating and leave floating state only if
STEN is active and additional conditions are met.
STEN also causes the chip to recognize its other
chip-select inputs. STEN makes it easier to do on-
board testing (using the overdrive method) of other
chips in systems containing the 80387. STEN should
be pulled up with a resistor so that it can be pulled
down when testing. In boards that do not use on-
board testing, STEN should be connected to Vee.
Setup and hold times are relative to 386ClK2. Note
that STEN must maintain the same setup and hold
times as NPS1 #, NPS2, and CMDO# (i.e. if STEN
changes state during an 80387 bus cycle, it should
change state during the same ClK period as the
NPS1 #, NPS2, and CMDO# signals).
3.1.14 NPX Select #1 (NPS1#)
When active (along with STEN and NPS2) in the first
period of an 80386 bus cycle, this signal indicates
that the purpose of the bus cycle is to communicate
with the 80387. This pin should be connected direct-
ly to the 80386 M/IO# pin, so that the 80387 is
selected only when the 80386 performs 1/0 cycles.
Setup and hold times are referenced to 386ClK2.
19
3.1.15 NPX SELECT #2 (NPS2)
When active (along with STEN and NPS1 #) in the
first period of an 80386 bus cycle, this signal indi-
cates that the purpose of the bus cycle is to commu-
nicate with the 80387. This pin should be connected
directly to the 80386 A31 pin, so that the 80387 is
selected only when the 80386 uses one of the 1/0
addresses reserved for the 80387 (800000F8 or
800000FC). Setup and hold times are referenced to
386ClK2.
3.1.16 COMMAND (CMDO#)
During a write cycle, this signal indicates whether an
opcode (CMDO# active) or data (CMDO# inactive)
is being sent to the 80387. During a read cycle, it
indicates whether the control or status register
(CMDO# active) or a data register (CMDO# inactive)
is being read. CMDO# should be connected directly
to the A2 output of the 80386. Setup and hold times
are referenced to 386ClK2.
3.2 Processor Architecture
As shown by the block diagram on the front page,
the NPX is internally divided into three sections: the
bus control logic (BCl), the data interface and con-
trol unit, and the floating point unit (FPU). The FPU
(with the support of the control unit which contains
the sequencer and other support units) executes all
numerics instructions. The data interface and control
unit is responsible for the data flow to and from the
FPU and the control registers, for receiving the in-
structions, decoding them, and sequencing the mi-
croinstructions, and for handling some of the admin-
istrative instructions. The BCl is responsible for
80386 bus tracking and interface. The BCl is the
only unit in the 80387 that must run synchronously
with the 80386; the rest of the 80387 can run asyn-
chronously with respect to the 80386.
3.2.1 BUS CONTROL LOGIC
The BCl communicates solely with the CPU using
1/0 bus cycles. The BCl appears to the CPU as a
special peripheral device. It is special in two re-
spects: the CPU initiates 1/0 automatically when it
encounters ESC instructions, and the CPU uses re-
served 1/0 addresses to communicate with the BCl.
The BCl does not communicate directly with memo-
ry. The CPU performs all memory access, transfer-
ring input operands from memory to the 80387 and
transferring outputs from the 80387 to memory.
inter
80387
3.2.2 DATA INTERFACE AND CONTROL UNIT
The data interface and control unit latches the data
and, subject to BCl control, directs the data to the
FIFO or the instruction decoder. The instruction de-
coder decodes the ESC instructions sent to it by the
CPU and generates controls that direct the data flow
in the FIFO. It also triggers the microinstruction se-
quencer that controls execution of each instruction.
If the ESC instruction is FIN IT, FClEX, FSTSW,
FSTSW AX, or FSTCW, the control executes it inde-
pendently of the FPU and the sequencer. The data
interface and control unit is the one that generates
the BUSY #, PEREQ and ERROR # signals that syn-
chronize 80387 activities with the 80386. It also sup-
ports the FPU in all operations that it cannot perform
alone (e.g. exceptions handling, transcendental op-
erations, etc.).
3.2.3 FLOATING POINT UNIT
The FPU executes all instructions that involve the
register stack, including arithmetic, logical, transcen-
32 MHz CLOCK GENERATOR
li i i'
X1 X2 EFI F Ic#
ADSO#
r+
--I RES#
80384
ClK2
ClK
1-+
ADS#
RESET
1.
t
HLDA
4 RESET D/c#
...
'------+
READY# LOCK# ...
'-----+
ClK2 BE3#-BEO# ...
..... BS'6# M/IO#
..... NA# A31
..... HOLD A30-A3
r+
..... INTR 80386 A2
..... NMI W/R#
ADS#
D31-00
BUSY#
ERROR#
PEREQ
dental, constant, and data transfer instructions. The
data path in the FPU is 84 bits wide (68 significant
bits, 15 exponent bits. and a sign bit) which allows
internal operand transfers to be performed at very
high speeds.
3.3 System Configuration
As an extension to the 80386, the 80387 can be
connected to the CPU as shown by Figure 3.2. A
dedicated communication protocol makes possible
high-speed transfer of opcodes and operands be-
tween the 80386 and 80387. The 80387 is designed
so that no additional components are required for
interface with the 80386. The 80387 shares the 32-
bit wide local bus of the 80386 and most control pins
of the 80387 are connected directly to pins of the
80386.
FROM OTHER PERIPHERALS
T
>--
CKM
~ 180387 CLOCK I
GENERATOR 387 ClK2
(OPTIONAL) I
386ClK2
RESETIN
READY#
WAIT STATE b-
I GENERATOR
READYO#
(OPTIONAL) I
80387
NPS'#
NPS2
lJ
CMDO#
WjR#
ADS# STEN
32
D3'-DO
BUSY#
ERROR#
PEREQ
231920-6
Figure 3.2. S0386/80387 System Configuration
20
inter
80387
Table 3.4. Bus Cycles Definition
STEN NPS1# NPS2 CMDO#
0 x x x
1 1 x x
1 x 0 x
1 0 1 0
1 0 1 0
1 0 1 1
1 0 1 1
3.3.1 BUS CYCLE TRACKING
The ADS# and READY # signals allow the 80387 to
track the beginning and end of 80386 bus cycles,
respectively. When ADS# is asserted at the same
time as the 80387 chip-select inputs, the bus cycle is
intended for the 80387. To signal the end of a bus
cycle for the 80387, READY # may be asserted di-
rectly or indirectly by the 80387 or by other bus-con-
trol logic. Refer to Table 3.4 for definition of the
types of 80387 bus cycles.
3.3.2 80387 ADDRESSING
The NPS1 #, NPS2 and STEN signals allow the NPX
to identify which bus cycles are intended for the
NPX. The NPX responds only to liD cycles when bit
31 of the 110 address is set. In other words, the NPX
acts as an liD device in a reserved liD address
space.
Because A31 is used to select the 80387 for data
transfers, it is not possible for a program running on
the 80386 to address the 80387 with an I/O instruc-
tion. Only ESC instructions cause the 80386 to com-
municate with the 80387. The 80386 BS16# input
must be inactive during 110 cycles when A31 is ac-
tive.
3.3.3 FUNCTION SELECT
The CMDO# and W/R# signals identify the four
kinds of bus cycle: control or status register read,
data read, opcode write, data write.
3.3.4 CPU/NPX Synchronization
The pin pairs BUSY#, PEREQ, and ERROR# are
used for various aspects of synchronization between
the CPU and the NPX.
BUSY# is used to synchronize instruction transfer
from the 80386 to the 80387. When the 80387 rec-
ognizes an ESC instruction, it asserts BUSY #. For
most ESC instructions, the 80386 waits for the
80387 to deassert BUSY # before sending the new
opcode.
21
W/R# Bus Cycle Type
x 80387 not selected and all
outputs in floating state
x 80387 not selected
x 80387 not selected
0 CW or SW read from 80387
1 Opcode write to 80387
0 Data read from 80387
1 Data write to 80387
The NPX uses the PEREQ pin of the 80386 CPU to
signal that the NPX is ready for data transfer to or
from its data FIFO. The NPX does not directly ac-
cess memory; rather, the 80386 provides memory
access services for the NPX. Thus, memory access
on behalf of the NPX always obeys the rules applica-
ble to the mode of the 80386, whether the 80386 be
in real-address mode or protected mode.
Once the 80386 initiates an 80387 instruction that
has operands, the 80386 waits for PEREQ signals
that indicate when the 80387 is ready for operand
transfer. Once all operands have been transferred
(or if the instruction has no operands) the 80386
continues program execution while the 80387 exe-
cutes the ESC instruction.
In 8086/8087 systems, WAIT instructions may be
required to achieve synchronization of both com-
mands and operands. In 80286/80287 and
80386/80387 systems, WAIT instructions are re-
quired only for operand synchronization; namely, af-
ter NPX stores to memory (except FSTSW and
FSTCW) or loads from memory. Used this way,
WAIT ensures that the value has already been writ-
ten or read by the NPX before the CPU reads or
changes the value.
Once it has started to execute a numerics instruction
and has transferred the operands from the 80386,
the 80387 can process the instruction in parallel with
and independent of the host CPU. When the NPX
detects an exception, it asserts the ERROR # signal,
which causes an 80386 interrupt.
3.3.5 SYNCHRONOUS OR ASYNCHRONOUS
MODES
The internal logic of the 80387 (the FPU) can either
operate directly from the CPU clock (synchronous
mode) or from a separate clock (asynchronous
mode). The two configurations are distinguished by
the CKM pin. In either case, the bus control logic
(BCl) of the 80387 is synchronized with the CPU
clock. Use of asynchronous mode allows the 80386
and the FPU section of the 80387 to run at different
speeds. In this case, the ratio of the frequency of
intJ
80387
387ClK2 to the frequency of 386ClK2 must lie with-
in the range 10:16 to 16:10. Use of synchronous
mode eliminates one clock generator from the board
design.
3.3.6 AUTOMATIC BUS CYCLE TERMINATION
In configurations where no extra wait states are re-
quired, READYO# can be used to drive the 80386
READY # input. If this pin is used, it should be con-
nected to the logic that ORs all READY outputs from
peripherals on the 80386 bus. READYO# is assert-
ed by the 80387 only during 1/0 cycles that select
the 80387. Refer to section 3.4 "Bus Operation" for
details.
3.4 Bus Operation
With respect to the bus interface, the 80387 is fully
synchronous with the 80386. Both operate at the
same rate, because each generates its internal ClK
signal by dividing 386ClK2 by two.
The 80386 initiates a new bus cycle by activating
ADS #. The 80387 recognizes a bus cycle, if, during
the cycle in which ADS# is activated, STEN,
NPS1 #, and NPS2 are all activated. Proper opera-
tion is achieved if NPS1 # is connected to the
M/IO# output of the 80386, and NPS2 to the A31
output. The 80386's A31 output is guaranteed to be
inactive in all bus cycles that do not address the
80387 (i.e. 1/0 cycles to other devices, interrupt ac-
knowledge, and reserved types of bus cycles). Sys-
tem logic must not signal a 16-bit bus cycle via the
80386 BS16# input during 1/0 cycles when A31 is
active.
During the ClK period in which ADS# is activated,
the 80387 also examines the W/R# input signal to
determine whether the cycle is a read or a write cy-
cle and examines the CMDO# input to determine
whether an opcode, operand, or controll status reg-
ister transfer is to occur.
The 80387 supports both pipelined and nonpipe-
lined bus cycles. A nonpipelined cycle is one for
which the 80386 asserts ADS# when no other
80387 bus cycle is in progress. A pipelined bus cycle
is one for which the 80386 asserts ADS# and pro-
vides valid next-address and control signals as soon
as in the second ClK period after the ADS# asser-
tion for the previous 80386 bus cycle. Pipelining in
creases the availability of the bus by at least one
ClK period. The 80387 supports pipelined bus cy-
cles in order to optimize address pipelining by the
80386 for memory cycles.
22
Bus operation is described in terms of an abstract
state machine. Figure 3.3 illustrates the states and
state transitions for 80387 bus cycles:
TI is the idle state. This is the state of the bus
logic after RESET, the state to which bus logic
returns after evey nonpipelined bus cycle, and
the state to which bus logic returns after a series
of pipe lined cycles.
T RS is the READY # sensitive state. Different
types of bus cycle may require a minimum of one
or two successive T RS states. The bus logic re-
mains in T RS state until READY # is sensed, at
which point the bus cycle terminates. Any number
of wait states may be implemented by delaying
READY #, thereby causing additional successive
T RS states.
T p is the first state for every pipelined bus cycle.
The READYO# output of the 80387 indicates when
a bus cycle for the 80387 may be terminated if no
extra wait states are required. For all write cycles
(except those for the instructions FlDENV and
FRSTOR), READYO# is always asserted in the first
T RS state, regardless of the number of wait states.
For all read cycles and write cycles for FlDENV and
FRSTOR, READYO# is always asserted in the sec-
ond T RS state, regardless of the number of wait
states. These rules apply to both pipe lined and non-
pipelined cycles. Systems designers may use
READYO# in one of three ways:
1. leave it disconnected and use external logic to
generate READY # signals. When choosing this
option, 80387 requirements for wait states in read
cycles and write cycles of FlDENV and FRSTOR
must be obeyed.
2. Connect it (directly or through logic that ORs
READY signals from other devices) to the
READY# inputs of the 80386 and 80387.
3. Use it as one input to a wait-state generator.
ADS#
READY#
231920-7
Figure 3.3. Bus State Diagram
inter
80387
The following sections illustrate different types of
80387 bus cycles.
Because different instructions have different
amounts of overhead before, between, and after op-
erand transfer cycles, it is not possible to represent
in a few diagrams all of the combinations of succes-
sive operand transfer cycles. The following bus-cy-
cle diagrams show memory cycles between 80387
operand-transfer cycles. Note however that, during
the instructions FlDENV, FSTENV, FSAVE, and
FRSTOR, some consecutive accesses to the NPX
do not have intervening memory accesses. For the
timing relationship between operand transfer cycles
and opcode write or other overhead activities, see
Figure 3.7.
3_4.1 NONPIPELINED BUS CYCLES
Figure 3.4 illustrates bus activity for consecutive
nonpipelined bus cycles.
3.4.1.1 Write Cycle
At the second clock of the bus cycle, the 80387 en-
ters the T RS (READY #-sensitive) state. During this
state, the 80387 samples the READY# input and
stays in this state as long as READY # is inactive.
In write cycles, the 80387 drives the READYO# sig-
nal for one elK period beginning with the second
elK of the bus cycle; therefore, the fastest write
cycle takes two elK cycles (see cycle 2 of Figure
3.4). For the instructions FlDENV and FRSTOR,
however, the 80387 forces a wait state by delaying
the activation of READYO# to the second T RS cy-
cle (not shown in Figure 3.4).
23
When READY # is asserted the 80387 returns to the
idle state, in which ADS# could be asserted again
by the 80386 for the next cycle.
3.4.1.2 Read Cycle
At the second clock of the bus cycle, the 80387 en-
ters the T RS state. See Figure 3.4. In this state, the
80387 samples the READY # input and stays in this
state as long as READY # is inactive.
At the rising edge of elK in the second clock period
of the cycle, the 80387 starts to drive the 031-00
outputs and continues to drive them as long as it
stays in T RS state.
In cycles that address the 80387, at least one
walt state must be inserted to insure that the 80386
latches the correct data. Since the 80387 starts driv-
ing the system data bus only at the rising edge of
elK rn the second clock period of the bus cycle, not
enough time is left for the data signals to propagate
and be latched by the 80386 at the falling edge of
the same clock period. The 80387 drives the READ-
YO# signal for one elK period in the third elK of
the bus cycle. Therefore, if the READYO# output is
used to drive the 80386 READY# input, one wait
state is inserted automatically.
Because one wait state is required for 80387 reads
the minimum is three elK cycles per read, as
3 of Figure 3.4 shows.
When READY # is asserted the 80387 returns to the
idle state, in which ADS# could be asserted again
by the 80386 for the next cycle. The transition from
T RS state to idle state causes the 80387 to put the
031-00 outputs into the floating state, al-
lowrng another device to drive the system data bus.
intJ
80387
386ClK2
(ClK)
CYCLE 1
NON-PIPELINED
MEMORY READ
CYCLE 2
NON-PIPELINEO
NPX WRITE
CYCLE 3
NON-PIPELINED
NPX READ
CYCLE 4
NON-PIPELINED
MEMORY WRITE
NPS2,
NPS1#,
M/IO# fLL--+---+ .....
W/R#
ADS#
REAOYO#
DO-031 ---- --
231920-8
Cycles 1 & 2 represent part of the operand transfer cycle for instructions involving either 4-byte or 8-byte operand loads.
Cycles 3 & 4 represent part of the operand transfer cycle for a store operation.
'Cycles 1 & 2 could repeat here or TI states for various non-operand transfer cycles and overhead.
Figure 3.4. Nonpipelined Read and Write Cycles
3.4.2 PIPELINED BUS CYCLES
Because all the activities of the 80387 bus interface
occur either during the T RS state or during the tran-
sitions to or from that state, the only difference be-
tween a pipelined and a nonpipelined cycle is the
manner of changing from one state to another. The
exact activities in each state are detailed in the pre-
vious section "Nonpipelined Bus Cycles".
When the 80386 asserts ADS# before the end of a
bus cycle, both ADS# and READY# are active dur-
ing a T RS state. This condition causes the 80387 to
change to a different state named T p. The 80387
activities in the transition from a T RS state to a T p
state are exactly the same as those in the transition
from a T RS state to a TI state in non pipe lined cycles.
24
T p state is metastable; therefore, one clock period
later the 80387 returns to T RS state. In consecutive
pipelined cycles, the 80387 bus logic uses only T RS
and T p states.
Figure 3.5 shows the fastest transition into and out
of the pipe lined bus cycles. Cycle 1 in this figure
represents a nonpipelined cycle. (Nonpipelined write
cycles with only one T RS state (i.e. no wait states)
are always followed by another nonpipelined cycle,
because READY # is asserted before the earliest
possible assertion of ADS# for the next cycle.)
Figure 3.6 shows the pipelined write and read cycles
with one additional T RS states beyond the minimum
required. To delay the assertion of READY# re-
quires external logic.
infef
80387
3.4.3 BUS CYCLES OF MIXED TYPE
When the 80387 bus logic is in the T RS state, it dis-
tinguishes between nonpipelined and pipelined cy-
cles according to the behavior of ADS# and
READY#. In a nonpipelined cycle, only READY# is
activated, and the transition is from T RS to idle state.
In a pipelined cycle, both READY# and ADS# are
active and the transition is first from T RS state to T p
state then, after one clock period, back to T RS state.
386ClK2
(ClK)
CYCLE 1
NON-PIPELINED
MEMORY READ
CYCLE 2
PIPELINED
NPX WRITE
3.4.4 BUSY # AND PEREQ TIMING
RELATIONSHIP
Figure 3.7 shows the activation of BUSY # at the
beginning of instruction execution and its deactiva-
tion after execution of the instruction is complete.
PEREO is activated in this interval. If ERROR # (not
shown in the diagram) is ever asserted, it would oc-
cur at least six 386CLK2 periods after the deactiva-
tion of PEREO and at least six 386CLK2 periods be-
fore the deactivation of BUSY #. Figure 3.7 shows
also that STEN is activated at the beginning of a bus
cycle.
CYCLE 3
PIPELINED
MEMORY READ
CYCLE 4
NON-PIPELINED
NPX WRITE
NPS2, ~ - - - - ~ - - - - r r - - ~ ~ - - - - r r - - ~ ~ - - ~ - - - - ~ ~ - - ~ - - - - ~ - - - - ~
NPS1#,
M/IO# fU---+--oof"l.--+-----!U---t---+---iU---+--+---i
W/R#
ADS#
READYO#
READY# V"'''.''''
00-031 ---- ----- --
231920-9
Cycle 1-Cycle 4 represent the operand transfer cycle for an instruction involving a transfer of two 32-bit loads in total.
The opcode write cycles and other overhead are not shown.
Note that the next cycle will be a pipelined cycle if both READY # and ADS# are sampled active at the end of a T RS
state of the current cycle.
Figure 3.5. Fastest Transitions to and from Pipelined Cycles
25
intJ
386CLK2
(elK)
CYCLE 1
PIPELINED WRITE
80387
NOTE 1
Tp
CYCLE 2
PIPEUNED READ
Tp
NP52.
NP51#.
M/IO# .....
W/R#
AD5#
READYO#
NOTE:
1. Cycles between operand write to the NPX and storing result.
NOTES:
QPCODE
WRITE
1. Instruction dependent.
Figure 3.S. Pipelined Cycles with Wait States
NOTE 4
NOTE 1 NOTE 2
1
ST
OPERAND
WRITE
NOTE 3 NOTE 1
2. PEREQ is an asynchronous input to the 80386; it may not be asserted (instruction dependent).
3. More operand transfers.
4. Memory read (operand) cycle is not shown.
Figure 3.7. STEN, BUSY# and PEREa Timing Relationship
26
231920-10
231920-11
infef
80387
4.0 MECHANICAL DATA
68 LEAD CERAMIC PIN GRID ARRAY PACKAGE INTEL TYPE A
Symbol
Min
A 3.56
A1 0.76
A1
A2
2.72
A2
3.43
A3
1.14
B 0.43
0 28.83
D1 25.27
e1
2.29
L 2.29
N
S1
1.27
ISSUE IWSREV7
A'=F- BASE '
PLANE
S E A T I N ~ PLANE
o B (ALL PINS)
~ ~
SWAGGED
PIN
DETAIL
Family: Ceramic Pin Grid Array Package
Millimeters Inches
Max Notes Min Max
4.57 0.140 0.180
1.27 Solid Lid 0.030 0.050
0.41 EPROM Lid 0.016
3.43 Solid Lid 0.107 0.135
4.32 EPROM Lid 0.135 0.170
1.40 0.045 0.055
0.51 0.017 0.020
29.59 1.135 1.165
25.53 0.995 1.005
2.79 0.090 0.110
3.30 0.090 0.130
68 68
2.54 0.050 0.100
3/26/86
Figure 4.1. Package Description
27
231920-12
Notes
Solid Lid
EPROM Lid
Solid Lid
EPROM Lid
80387
Consult the most recent 80387 data sheet for AC specifications.
28
intJ
80387
Consult the most recent 80387 data sheet for AC specifications.
29
intJ
80387
Consult the most recent 80387 data sheet for AC specifications.
30
inter
80387
Consult the most recent 80387 data sheet for AC specifications.
31
inter
80387
Consult the most recent 80387 data sheet for AC specifications.
32
inter
80387
Instruction
First Byte
11011 OPA 1 MOD
2
3
4
5
11011 MF OPA MOD
11011 d P OPA
11011 0 0 1
11011 0 1 1
15-11 10 9 8
6.0 80387 EXTENSIONS TO THE
80386 INSTRUCTION SET
1
1
1
7
Instructions for the 80387 assume one of the five
forms shown in the following table. In all cases, in
structions are at least two bytes long and begin with
the bit pattern 11011 B, which identifies the ESCAPE
class of instruction. Instructions that refer to memory
operands specify addresses using the 80386 ad-
dressing modes.
OP = Instruction opcode, possible split into two
fields OPA and OPB
MF = Memory Format
00-32-bit real
01-32-bit integer
10-64-bit real
11-16-bit integer
P = Pop
0-00 not pop stack
1-Pop stack after operation
ESC = 11011
d = Destination
O-Destination is ST(O)
1-Destination is ST(i)
R XOR d = O-Destination (op) Source
R XOR d = 1-Source (op) Destination
33
Optional
Second Byte
Fields
1
I
OPB RIM SIB
I
DISP
OPB RIM SIB
I
DISP
1 OPB ST(i)
1 1
I
OP
1 1
I
OP
6 5 43210
ST(i) = Register stack element i
000 = Stack top
001 = Second stack element
111 = Eighth stack element
MOD (Mode field) and RIM (Register/Memory spec-
ifier) have the same interpretation as the corre-
sponding fields of 80386 instructions (refer to 80386
Programmer's Reference Manual)
SIB (Scale Index Base) byte and DISP (displace-
ment) are optionally present in instructions that have
MOD and RIM fields. Their presence depends on
the values of MOD and RIM, as for 80386 instruc-
tions.
The instruction summaries that follow assume that
the instruction has been prefetched, decoded, and is
ready for execution; that bus cycles do not require
wait states; that there are no local bus HOLD re-
quest delaying processor access to the bus; and
that no exceptions are detected during instruction
execution. If the instruction has MOD and RIM fields
that call for both base and index registers, add one
clock.
inter
80387
80387 Extensions to the 80386 Instruction Set
Instruction Optional 32-Blt
Bytes 2-6 Real
DATA TRANSFER
FLO Loada
Integer/real memory to ST(O) SIB/DISP 20
Long integer memory to ST(O) SIB/DISP
Extended real memory to ST(O) SIB/DISP
BCD memory to ST(O) SIB/DISP
ST(i) to ST(O) ESC 001 11000ST(i)
FST Store
ST(O) to integer/real memory SIB/DISP 44
ST(O) to ST(i) ESC 101 11010ST(i)
FSTP Store and Pop
ST(O) to integer/real memory SIB/DISP 44
ST(O) to long integer memory SIB/DISP
ST(O) to extended real SIB/DISP
ST(O) to BCD memory SIB/DISP
ST(O) to ST(i) ESC 101 11001 ST(i)
FXCH Exchange
ST(i) and ST(O) ESC 001 11001 ST(i)
COMPARISON
FCOM Compare
Integer/real memory to ST(O) SIB/DISP 26
ST(i) to ST(O) ESC 000 11010ST(i)
FCOMP Compare and pop
Integer/real memory to ST SIBIDISP 26
ST(i) to ST(O) ESC 000 11011 ST(i)
FCOMPP Compare and pop twice
ST(l) to ST(O) ESCll0 11011001
FTST Test ST(O)
FXAM Examine ST(O) ESC 001 11100101
CONSTANTS
FLOZ Load + 0.0 into ST(O) ESC 001 11101110
FLOI Load + 1.0 into ST(O) ESC 001 11101000
FLOPI Load pi into ST(O) ESC 001 11101011
FLOL2T Load log2(10) into ST(O) ESC 001 11101001
Shaded areas indicate instructions not available in 8087/80287.
NOTE:
a. When loading single- or double-precision zero from memory, add 5 clocks.
34
45-52
56-67
44
266-275
14
79-93
11
79-93
80-97
53
512-534
56-63
56-63
12
18
24
26
26
20
24
40
40
16-Bil
Inleger
25 61-65
45 82-95
45 82-95
31 71-75
31 71-75
inter
80387
80387 Extensions to the 80386 Instruction Set (Continued)
Instruction
CONSTANTS (Continued)
FLDL2E = Load log2(e) into ST(O)
FLDLG2 = Load IOg10(2) into ST(O)
FLDLN2 = Load log.(2) into ST(O)
ARITHMETIC
FADD = Add
Integer/real memory with ST(O)
STeil and ST(O)
FSUB = Subtract
Integer/real memory with ST(O)
STeil and ST(O)
FMUL = Multiply
Integer/real memory with ST(O)
STeil and ST(O)
FDIV = Divide
Integer/real memory with ST(O)
STO) and ST(O)
FSQRTi = Square root
FSCALE = Scale ST(O) by ST(I)
FPREM = Partial remainder
FRNDINT = Round ST(O)
to integer
FXTRACT = Extract components
oIST(O)
FABS = Absolute value 01 ST(O)
FCHS = Change sign of ST(O)
ESC 001 11101010
ESC 001 11101100
ESC 001 11101101
ESC 001 11111010
ESC 001 11111101
ESC 001 11111100
ESC 001 11110100
ESC 001 11100001
ESC 001 11100000
Shaded areas indicate instructions not available in 8087/80287.
NOTES:
b. Add 3 clocks to the range when d = 1.
c. Add 1 clock to each range when R = 1.
d. Add 3 clocks to the range when d = O.
e. typical = 52 (When d = 0, 46-54, typical = 49).
f. Add 1 clock to the range when R = 1.
g. 135-141 when R = 1.
h. Add 3 clocks to the range when d = 1.
i. ~ O s ST(O) s + 00.
35
Oplional
Bytes 2-6
SIB/DISP
SIB/DISP
SIB/DISP
SIB/DISP
32-Bil
Real
24-32
24-32
27-35
89
40
41
41
57-72 29-37
23-31 b
57-82 28-36
26-34d
61-82 32-57
29-57e
120-127f
BSh
122-129
67-86
66-80
70-76
22
24-25
94
16-Bil
Inleger
71-85
71-83c
76-87
136-1409
inter
80387
80387 Extensions to the 80386 Instruction Set (Continued)
Instruction
TRANSCENDENTAL
FeW:;;; .( '.'1111,11t'1:;'I
FPTANk Partial tangent of ST(O) I ESC 001 I 11110010 I
FPATAN Partial arctangent I ESC 001 I 11110011 I
iiSlNk'" SiriEi'ofS'F(oi ;; ;,.; ,. :.< ""l','; ,. :1;. ;'1 .... .. 11. '.;.'" ' ..
:
F2XMl i 2ST(O) - 1 I ESC 001 I 1111 0000 I
FYL2xm ST(I) , IOg2(ST(0 I ESC 001 I 1111 0001 I
FYL2XP1" ST(I) 'log2(ST(0) + 1.0) I ESC 001 I 11111001 I
PROCESSOR CONTROL
FINIT Initialize NPX
FSTSW AX Store status word
FLDCW Load control word
FSTCW Store control word
FSTSW Store status word
FCLEX Clear exceptions
FSTENV Store environment
FLDENV Load environment
FSA VE Save state
FRSTOR Restore state
FINCSTP Increment stack pointer
FDECSTP Decrement stack pOinter
FFREE Free ST(i)
FNOP No operations
ESCOll 11100011
11100000
11100010
11110111
ESC 001 11110110
ESC 101 11000 ST(i)
ESC 001 11010000
Shaded areas indicate instructions not available in 8087/80287.
NOTES:
Optional
Bytes 2-6
SIB/DISP
SIB/DISP
SIB/DISP
SIB/DISP
SIB/DISP
SIB/DISP
SIB/DISP
Clock Count Range
1.2$ .. 172l.
191-497i
211-476
120-538
257-547
33
13
19
15
15
11
103-104
71
375-376
308
21
22
18
12
j. These timings hold for operands in the range Ixl < 7T 14. For operands not in this range, up to 76 additional clocks may be
needed to reduce the operand.
k. 0 ,;: I ST(O) I < 263.
I. -1.0 ,;: ST(O) ,;: 1.0.
m.O ,;: ST(O) < "", - "" < ST(1) < + "".
n. 0 ,;: IST(O)I < (2 - SQRT(2))/2, - 00 < ST(l) < + 00.
36
inter
80387
APPENDIX A
COMPATIBILITY BETWEEN
THE 80287 AND THE 8087
The 80286/80287 operating in Real-Address mode
will execute 808618087 programs without major
modification. However, because of differences in the
handling of numeric exceptions by the 80287 NPX
and the 8087 NPX, exception-handling routines may
need to be changed.
This appendix summarizes the differences between
the 80287 NPX and the 8087 NPX, and provides
details showing how 8086/8087 programs can be
ported to the 80286/80287.
1. The NPX signals exceptions through a dedicated
ERROR line to the 80286. The NPX error signal
does not pass through an interrupt controller (the
8087 INT Signal does). Therefore, any interrupt-
controller-oriented instructions in numeric excep-
tion handlers for the 8086/8087 should be delet-
ed.
2. The 8087 instructions FENI/FNENI and FDISII
FNDISI perform no useful function in the 80287. If
the 80287 encounters one of these opcodes in its
instruction stream, the instruction will effectively
be ignored-none of the 80287 internal states will
be updated. While 8086/8087 containing these
instructions may be executed on the
80286/80287, it is unlikely that the exception-
handling routines containing these instructions
will be completely portable to the 80287.
3. Interrupt vector 16 must point to the numeric ex-
ception handling routine.
4. The ESC instruction address saved in the 80287
includes any leading prefixes before the ESC op-
code. The corresponding address saved in the
8087 does not include leading prefixes.
5. In Protected-Address mode, the format of the
80287's saved instruction and address pointers is
different than for the 8087. The instruction op-
code is not saved in Protected mode-exception
handlers will have to retrieve the opcode from
memory if needed.
37
6. Interrupt 7 will occur in the 80286 when executing
ESC instructions with either TS (task switched) or
EM (emulation) of the 80286 MSW set (TS = 1 or
EM = 1). If TS is set, then a WAIT instruction will
also cause interrupt 7. An exception handler
should be included in 80286/80287 code to han-
dle these situations.
7. Interrupt 9 will occur if the second or subsequent
words of a floating-point operand fall outside a
segment's size. Interrupt 13 will occur if the start-
ing address of a numeric operand falls outside a
segment's size. An exception handler should be
included in 80286/80287 code to report these
programming errors.
8. Except for the processor control instructions, all
of the 80287 numeric instructions are automati-
cally synchronized by the 80286 CPU-the 80286
automatically tests the BUSY line from the 80287
to ensure that the 80287 has completed its previ-
ous instruction before executing the next ESC in-
struction. No explicit WAIT instructions are re-
quired to assure this synchronization. For the
8087 used with 8086 and 8088 processors, ex-
plicit WAITs are required before each numeric in-
struction to ensure synchronization. Although
808618087 programs having explicit WAIT in-
structions will execute perfectly on the
80286/80287 without reassembly, these WAIT in-
structions are unnecessary.
9. Since the 80287 does not require WAIT instruc-
tions before each numeric instruction, the
ASM286 assembler does not automatically gener-
ate these WAIT instructions. The ASM86 assem-
bler, however, automatically precedes every ESC
instruction with a WAIT instruction. Although nu-
meric routines generated using the ASM86 as-
sembler will generally execute correctly on the
80286/80287, reassembly using ASM286 may re-
sult in a more compact code image.
The processor control instructions for the 80287
may be coded using either a WAIT or No-WAIT
form of mnemonic. The WAIT forms of these in-
structions cause ASM286 to precede the ESC in-
struction with a CPU WAIT instruction, in the iden-
tical manner as does ASM86.
PC/ A T-Compatib/e
80387 Connection
F
APPENDIX F
PCI AT*-COMPATIBLE 80387 CONNECTION
The PC/AT uses a nonstandard scheme to report 80287 exceptions to the 80286. When
replicating the PC/AT coprocessor interface in 80386-based systems, the PC/AT interface
cannot be used in exactly the same way; however, this appendix outlines a similar interface
that works on 80386/80387 systems and maintains compatibility with the nonstandard
PC / A T scheme.
Note that the interface outlined here does not represent a new interface standard; it needs
to be incorporated in AT-compatible designs only because the 80286 and 80287 in the
PC / A T are not connected according to the standards defined by Intel. The standard
80386/80387 connection recommended by Intel in the 80387 Data Sheet functions properly;
the 80386 implementation has not been and will not be altered.
F.1 THE PCI AT INTERFACE
In the PC/AT, the ERROR# input to the 80286 is tied inactive (high) permanently. The
ERROR# output of the 80287 is tied to an interrupt port (IRQI3). This interrupt replaces
exception signaling via the 80286's ERROR# input. To guarantee (in the case of an 80287
exception) that INTR 13 will be serviced prior to the execution of any further 80287 instruc-
tions, an edge-triggered flip-flop latches BUSY # using ERROR# as a clock. The output of
this latch is ORed with the BUSY # output of the 80287 and drives the BUSY # input of the
80286. This PC/AT scheme effectively delays deactivation of BUSY # at the 80286 whenever
an 80287 ERROR# is signaled.
Since the 80286 BUSY # input remains active after an exception, the 80286 interrupt 13
handler is guaranteed to execute before any other 80287 instructions may begin. The inter-
rupt 13 handler clears the BUSY# latch (via a write to a special I/O port), thus allowing
execution of 80287 instructions to proceed. The interrupt 13 handler then branches to the
NMI handler, where the user-defined numerics exception handler resides in PC-compatible
systems.
The use of an interrupt guarantees that an exception from a coprocessor instruction will be
detected. Latching BUSY # guarantees that any coprocessor instruction (except FINIT,
FSETPM, and FCLEX) following the instruction that raised the exception will not be
executed before the NMI handler is executed.
This PC/AT scheme approximates the exception reporting scheme between the 8087 and
8088 in the original Pc.
F-1
PCI AT-COMPATIBLE 80387 CONNECTION
F.2 HOW TO ACHIEVE THE SAME EFFECT IN AN 80386 SYSTEM
The 80386 can use a PC/AT-compatible interface to communicate with an 80387 provided
that, when an NPX exception occurs, BUSY # active time is extended and PEREQ is reacti-
vated only after 80387 BUSY # has gone inactive. The 80387 is left active (tying STEN
high) at all times. Also, the 80386 and 80387 must be reset by the same RESET signaL
The reactivation of PEREQ for the 80386 is needed for store instructions (for example, FST
mem) because the 80387 drops PEREQ once it signals an exception. While the 80386 has
not yet recognized the occurrence of the exception, it still expects the data transfers to
complete via PEREQ reactivation. It is permissible for the 80386 to receive undefined data
during such I/O read cycles. Disabling the 80387 is not necessary, because the dummy data-
transfer cycles directed to the 80387 when PEREQ is externally reactivated for the 80386
will not disturb the operation of the 80387. The interrupt 13 handler should remove the
extension of BUSY # and reactivation of PEREQ via a write to PC / AT -compatible hardware
at I/O port FOH.
F-2
Glossary of 80387 and
Floating-Point Terminology
GLOSSARY OF 80387
AND FLOATING-POINT TERMINOLOGY
This glossary defines many terms that have precise technical meanings as specified in the
IEEE 754 Standard or as specified in this manual. Where these terms are used, they have
been italicized to emphasize the precision of their meanings. In reading these definitions,
you may therefore interpret any italicized terms or phrases as cross-references.
Base: (1) a term used in logarithms and exponentials. In both contexts, it is a number that
is being raised to a power. The two equations (y = log base b of x) and (bY = x) are the
same.
Base: (2) a number that defines the representation being used for a string of digits. Base 2
is the binary representation; base lOis the decimal representation; base 16 is the hexadeci-
mal representation. In each case, the base is the factor of increased significance for each
succeeding digit (working up from the bottom).
Bias: a constant that is added to the true exponent of a real number to obtain the exponent
field of that number's floating-point representation in the 80387. To obtain the true exponent,
you must subtract the bias from the given exponent. For example, the single real format has
a bias of 127 whenever the given exponent is nonzero. If the 8-bit exponent field contains
10000011, which is 131, the true exponent is 131-127, or +4.
Biased Exponent: the exponent as it appears in a floating-point representation of a number.
The biased exponent is interpreted as an unsigned, positive number. In the above example,
131 is the biased exponent.
Binary Coded Decimal: a method of storing numbers that retains a base 10 representation.
Each decimal digit occupies 4 full bits (one hexadecimal digit). The hexadecimal values A
through F (1010 through 1111) are not used. The 80387 supports a packed decimal format
that consists of 9 bytes of binary coded decimal (18 decimal digits) and one sign byte.
Binary Point: an entity just like a decimal point, except that it exists in binary numbers.
Each binary digit to the right of the binary point is multiplied by an increasing negative
power of two.
C3-CO: the four "condition code" bits of the 80387 status word. These bits are set to
certain values by the compare, test, examine, and remainder functions of the 80387.
Characteristic: a term used for some non-Intel computers, meaning the exponent field of a
floating-point number.
Chop: to set one or more low-order bits of a real number to zero, yielding the nearest repre-
sentable number in the direction of zero.
Condition Code: the four bits of the 80387 status word that indicate the results of the
compare, test, examine, and remainder functions of the 80387.
Glossary-1
GLOSSARY
Control Word: a 16-bit 80387 register that the user can set, to determine the modes of
computation the 80387 will use and the exception interrupts that will be enabled.
Denormal: a special form of floating-point number. On the 80387, a denormal is defined as
a number that has a biased exponent of zero. By providing a significand with leading zeros,
the range of possible negative exponents can be extended by the number of bits in the signi-
ficand. Each leading zero is a bit of lost accuracy, so the extended exponent range is obtained
by reducing significance.
Double Extended: the Standard's term for the 80387's extended format, with more exponent
and significand bits than the double format and an explicit integer bit in the significand.
Double Format: a floating-point format supported by the 80387 that consists of a sign, an
II-bit biased exponent, an implicit integer bit, and a 52-bit significand-a total of 64 explicit
bits.
Environment: the 14 or 28 (depending on addressing mode) bytes of 80387 registers affected
by the FSTENV and FLDENV instructions. It encompasses the entire state of the 80387,
except for the 8 registers of the 80387 stack. Included are the control word, status word,
tag word, and the instruction, opcode, and operand information provided by interrupts.
Exception: any of the six conditions (invalid operand, denormal, numeric overflow, numeric
underflow, zero-divide, and precision) detected by the 80387 that may be signaled by status
flags or by traps.
Exception Pointers: The data maintained by the 80386 to help exception handlers identify
the cause of an exception. This data consists of a pointer to the most recently executed ESC
instruction and a pointer to the memory operand of this instruction, if it had a memory
operand. An exception handler can use the FSTENV and FSA VE instructions to access
these pointers.
Exponent: (I) any number that indicates the power to which another number is raised.
Exponent: (2) the field of a floating-point number that indicates the magnitude of the
number. This would fall under the above more general definition (I), except that a bias
sometimes needs to be subtracted to obtain the correct power.
Extended Format: the 80387's implementation of the Standard's double extended format.
Extendedformat is the main floating-point format used by the 80387. It consists of a sign,
a I5-bit biased exponent, and a significand with an explicit integer bit and 63 fractional-
part bits.
Floating-Point: of or pertaining to a number that is expressed as base, a sign, a significand,
and a signed exponent. The value of the number is the signed product of its significand and
the base raised to the power of the exponent. Floating-point representations are more versa-
tile than integer representations in two ways. First, they include fractions. Second, their
exponent parts allow a much wider range of magnitude than possible with fixed-length integer
representations.
Glossary-2
GLOSSARY
Gradual Underflow: a method of handling the underflow error condition that minimizes the
loss of accuracy in the result. If there is a denormal number that represents the correct
result, that denormal is returned. Thus, digits are lost only to the extent of denormalization.
Most computers return zero when underflow occurs, losing all significant digits.
Implicit Integer Bit: a part of the significand in the single real and double real formats that
is not explicitly given. In these formats, the entire given significand is considered to be to
the right of the binary point. A single implicit integer bit to the left of the binary point is
always one, except in one case. When the exponent is the minimum (biased exponent is
zero), the implicit integer bit is zero.
Indefinite: a special value that is returned by functions when the inputs are such that no
other sensible answer is possible. For eachjZoating-point format there exists one quiet NaN
that is designated as the indefinite value. For binary integer formats, the negative number
furthest from zero is often considered the indefinite value. For the 80387 packed decimal
format, the indefinite value contains all 1 's in the sign byte and the uppermost digits byte.
Inexact: The Standard's term for the 80387's precision exception.
Infinity: a value that has greater magnitude than any integer or any real number. It is often
useful to consider infinity as another number, subject to special rules of arithmetic. All three
Intel floating-point formats provide representations for +00 and -00.
Integer: a number (positive, negative, or zero) that is finite and has no fractional part. Integer
can also mean the computer representation for such a number: a sequence of data bytes,
interpreted in a standard way. It is perfectly reasonable for integers to be represented in a
floating-point format; this is what the 80387 does whenever an integer is pushed onto the
80387 stack.
Integer Bit: a part of the significand injZoating-point formats. In these formats, the integer
bit is the only part of the significand considered to be to the left of the binary point. The
integer bit is always one, except in one case: when the exponent is the minimum (biased
exponent is zero), the integer bit is zero. In the extended format the integer bit is explicit;
in the single format and double format the integer bit is implicit; i.e., it is not actually stored
in memory.
Invalid Operation: the exception condition for the 80387 that covers all cases not covered by
other exceptions. Included are 80387 stack overflow and underflow, NaN inputs, illegal
infinite inputs, out-of-range inputs, and inputs in unsupported formats.
Long Integer: an integer format supported by the 80387 that consists of a 64-bit two's
complement quantity.
Long Real: an older term for the 80387's 64-bit double format.
Mantissa: a term used with some non-Intel computers for the significand of afloating-point
number.
Glossary-3
GLOSSARY
Masked: a term that applies to each of the six 80387 exceptions I,D,Z,O,U,P. An exception
is masked if a corresponding bit in the 80387 control word is set to one. If an exception is
masked, the 80387 will not generate an interrupt when the exception condition occurs; it
will instead provide its own exception recovery.
Mode: One of the status word fields "rounding control" and "precision control" which
programs can set, sense, save, and restore to control the execution of subsequent arithmetic
operations.
NaN: an abbreviation for "Not a Number"; a floating-point quantity that does not repre-
sent any numeric or infinite quantity. NaNs should be returned by functions that encounter
serious errors. If created during a sequence of calculations, they are transmitted to the final
answer and can contain information about where the error occurred.
Normal: the representation of a number in a floating-point format in which the significand
has an integer bit one (either explicit or implicit).
Normalize: convert a denormal representation of a number to a normal representation.
NPX: Numeric Processor Extension. This is the 80387, 80287, or 8087.
Overflow: an exception condition in which the correct answer is finite, but has magnitude
too great to be represented in the destination format. This kind of overflow (also called
numeric overflow) is not to be confused with stack overflow.
Packed Decimal: an integer format supported by the 80387. A packed decimal number is a
lO-byte quantity, with nine bytes of 18 binary coded decimal digits and one byte for the
sign.
Pop: to remove from a stack the last item that was placed on the stack.
Precision: The effective number of bits in the significand of the floating-point representa-
tion of a number.
Precision Control: an option, programmed through the 80387 control word, that allows all
80387 arithmetic to be performed with reduced precision. Because no speed advantage results
from this option, its only use is for strict compatibility with the standard and with other
computer systems.
Precision Exception: an 80387 exception condition that results when a calculation does not
return an exact answer. This exception is usually masked and ignored; it is used only in
extremely critical applications, when the user must know if the results are exact. The preci-
sion exception is called inexact in the standard.
Pseudozero: one of a set of special values of the extended real format. The set consists of
numbers with a zero significand and an exponent that is neither all zeros nor all ones.
Pseudozeros are not created by the 80387 but are handled correctly when encountered as
operands.
Glossary-4
GLOSSARY
Quiet NaN: a NaN in which the most significant bit of the fractional part of the significand
is one. By convention, these NaNs can undergo certain operations without causing an
exception.
Real: any finite value (negative, positive, or zero) that can be represented by a (possibly
infinite) decimal expansion. Reals can be represented as the points of a line marked off like
a ruler. The term real can also refer to afloating-point number that represents a real value.
Short Integer: an integer format supported by the 80387 that consists of a 32-bit two's
complement quantity. short integer is not the shortest 80387 integer format-the 16-bit
word integer is.
Short Real: an older term for the 80387's 32-bit single format.
Signaling NaN: a NaN that causes an invalid-operation exception whenever it enters into a
calculation or comparison, even a nonordered comparison.
Significand: the part of a floating-point number that consists of the most significant nonzero
bits of the number, if the number were written out in an unlimited binary format. The
significand is composed of an integer bit and a fraction. The integer bit is implicit in the
single format and double format. The significand is considered to have a binary point after
the integer bit; the binary point is then moved according to the value of the exponent.
Single Extended: a floating-point format, required by the standard, that provides greater
precision than single; it also provides an explicit integer bit in the significand. The 80387's
extended format meets the single extended requirement as well as the double extended
requirement.
Single Format: a floating-point format supported by the 80387, which consists of a sign, an
8-bit biased exponent, an implicit integer bit, and a 23-bit significand-a total of 32 explicit
bits.
Stack Fault: a special case of the invalid-operation exception which is indicated by a one in
the SF bit of the status word. This condition usually results from stack underflow or overflow.
Standard: "IEEE Standard for Binary Floating-Point Arithmetic," ANSI/IEEE Std
754-1985.
Status Word: A 16-bit 80387 register that can be manually set, but which is usually
controlled by side effects to 80387 instructions. It contains condition codes, the 80387 stack
pointer, busy and interrupt bits, and exception flags.
Tag Word: a 16-bit 80387 register that is automatically maintained by the 80387. For each
space in the 80387 stack, it tells if the space is occupied by a number; if so, it gives infor-
mation about what kind of number.
Temporary Real: an older term for the 80387's 80-bit extended format.
Glossary-5
GLOSSARY
Tiny: of or pertaining to a floating-point number that is so close to zero that its exponent is
smaller than smallest exponent that can be represented in the destination format.
TOP: The three-bit field of the status word that indicates which 80387 register is the current
top of stack.
Transcendental: one of a class of functions for which polynomial formulas are always
approximate, never exact for more than isolated values. The 80387 supports trigonometric,
exponential, and logarithmic functions; all are transcendental.
Two's Complement: a method of representing integers. If the uppermost bit is zero, the
number is considered positive, with the value given by the rest of the bits. If the uppermost
bit is one, the number is negative, with the value obtained by subtracting (2
bit
count) from all
the given bits. For example, the 8-bit number 11111100 is ~ 4 , obtained by subtracting 2
8
from 252.
Unbiased Exponent: the true value that tells how far and in which direction to move the
binary point of the significand of a floating-point number. For example, if a Single-format
exponent is 131, we subtract the Bias 127 to obtain the unbiased exponent +4. Thus, the
real number being represented is the significand with the binary point shifted 4 bits to the
right.
Underflow: an exception condition in which the correct answer is nonzero, but has a magni-
tude too small to be represented as a normal number in the destination floating-point format.
The Standard specifies that an attempt be made to represent the number as a denormal.
This denormalization may result in a loss of significant bits from the significand. This kind
of underflow (also called numeric overflow) is not to be confused with stack underflow.
Unmasked: a term that applies to each of the six 80387 exceptions: I,D,Z,O,U,P. An excep-
tion is unmasked if a corresponding bit in the 80387 control word is set to zero. If an excep-
tion is unmasked, the 80387 will generate an interrupt when the exception condition occurs.
You can provide an interrupt routine that customizes your exception recovery.
Unnormal: a extended real representation in which the explicit integer bit of the significand
is zero and the exponent is nonzero. Unnormal values are not supported by the 80387; they
cause the invalid-operation exception when encountered as operands.
Unsupported Format: Any number representation that is not recognized by the 80387. This
includes several formats that are recognized by the 8087 and 80287; namely: pseudo-NaN,
pseudoinfinity, and un normal.
Word Integer: an integer format supported by both the 80386 and the 80387 that consists
of a 16-bit two's complement quantity.
Zero divide: an exception conditiGn in which the inputs are finite, but the correct answer,
even with an unlimited exponent, has infinite magnitude.
Glossary-6
inter
ALABAMA
Intel Corp.
5015 Bradford Drtve
Suittf2
Huntsville 35805
Tel: (205) 830-4010
ARIZONA
Intel Corp
11225 N. 28th Orive
Suite 2140
Phoenix 85029
Tel. (602) 869-4980
Dorado Place
Suite 301
Tucson 85715
Tel: (602) 299-6815
CALIFORNIA
Intel Corp
21515 Vanowen Street
SUite 116
Intel Corp.
2250 E, Imperial Highway
SUite 218
Intel Corp.
101
Tel. (916) 920-8096
Inlel Corp
4350 ExecutilJe DrlII8
SUite 105
Intel Corp
400 N Tustin Avenue
SUite 450
Santa Ana 92705
Tel: (714) 835-9642
TWX: 910-595-'114
Intel Corp."
San Tomas 4 .
2700 San Tomas Expressway
Santa Crara. CA 95051
Tel: (40B) 986-8086
TWX: 910-338-0255
COlORADO
'nteICarp.
4445 NorthparJ( Drive
Suite 100
Intel Corp:
St-, SUite 915
Tel. (303) 321-8086
TWX. 910-931-2289
CONNECTICUT
Intel Corp
26 Mill Plain Road
TWX 710-456-1199
FLORIDA
Intel Corp
242 N. Westmonte Or.. Suite
105
32714
Intel Corp.
100
Tel: (305) 771-0600
TWX: 510-956-9407
Intel Corp.
11300 4th Street North
Suite 110
St. Petersburg 33702
Te' (813) 577-2413
DOMESTIC SALES OFFICES
GEORGIA
Intel Corp.
3280 Pointe Parkway
Suite 200
Norcross 30092
Tel. (404) 449-0541
ILLINOIS
Suite 400
Tel. (312) 310-8031
INDIANA
Inlel Corp
8777 Purdue Road
Suite 125
Indianapolis 46268
Te1: (317) 875-0623
IOWA
Intel Corp
SI. Andrews Building
1930 SI. Andrews Drive N E
Cedar Rapids 52402
Tel (319) 393-5510
KANSAS
Intel Corp.
8400 W. 11 Oth Street
SUite 170
Overland Park 66210
Tel (913) 345-2727
MARYLAND
Intel Corp
7321 Parkway Drive South
SUlteC
Hanover 21076
Tel. (301) 796-7500
TWX: 710-862-1944
Intel Corp
7833 Walker Dnve
Greenbelt 20770
Tel (301)441-1020
MASSACHUSETTS
Intel Corp."
Westford Corp Center
3 Carlisle Road
Westford 01886
Tel: (617) 692-3222
TWX: 710-343-6333
MICHIGAN
Intel Corp
7071 Orcnard Lake Road
Suite 100
West Bloomfield 48033
TeJ: (313) 851-8096
MINNESOTA
Intel Corp
3500 W. 80tn 51.. SUite 360
TWX: 910-576-2867
MISSOURI
Intel Corp
4203 Eartn City Expressway
Suite 131
Earth City 63045
Tel: (314) 291-1990
NEW JERSEY
InteICorp.-
Parkway 109 Office Center
328 Newman Springs Road
Red Bank 07701
Tel. (201) 747-2233
Inlel Corp.
280 Corporate Center
75 Livingston Avenue
First Floor
Roseland 07068
Tel (201) 740-0111
NEW MEXICO
Intel Corp
8500 Menual Boulevard N E
SUite B 295
Albuquerque 87112
Tel: (505) 292-8086
NEW YORK
Intel Corp.
127 MaIO Street
Binghamton 13905
Tel: (607) 773-0337
Intel Corp."
Office Park
Tel (716) 425-2750
TWX 510-253-7391
Intel Corp"
300 Motor Parkway
Hauppauge 11787
Tel: (516)231-3300
TWX: 510-227-6236
Intel Corp
SUite 28 Hollowbrook Park
15 Myers Corners Road
TWX: 510-248-0060
NORTH CAROLINA
Intel Corp
5700 E:a:ecul!ve Cenler Drive
SUite 213
Charlone 28212
Tel (704) 568-8966
Intel Corp
Road
OHIO
Intel Corp'
3401 Park Center Dnve
SUite 220
Dayton 45414
Tel: (513) 890-5350
TWX: 810-450-2528
Intel Corp."
25700 Science Park Dr SUite 100
Beachwood 44122
Tel: (216) 464-2736
TWX. 810-427-9::!OS
OKLAHOMA
Intel Corp.
6801 N. Broadway
Suite 115
Oklahoma City 73116
Tel (405) 848-8086
OREGON
Intel Corp
15254 N W Greenbrier Parkway, Bldg. B
Beaverton 97006
Tel: (503) 645-8051
TWX 910-467-8741
PENNSYLVANIA
Intel Corp
1513 Cedar Cliff Dnve
Camp Hlfj 17011
Tel. (717) 737-5035
Intel Corp."
455 Pennsylvania Avenue
Fort Washington 19034
Tel (215) 641-1000
TWX. 510-661-2077
Inlel Corp.'
400 Penn Center Blvd., Suite 610
PUERTO RICO
Intel Microprocessor Corp
South Industrial Park
P.O. Box 910
Las Piedras 00671
Tel. (809) 733-8616
TEXAS
Intel Corp.
313 E. Anderson Lane
SUite 314
Austin 78752
Tel (512) 454-3628
Intel Corp
12300 Ford Road
Suite 380
Danas 75234
Tel: (214) 241-8087
TWX: 910-860-5617
Inlel Corp."
7322 S.W. Freeway
Suite 1490
Houston 77074
Tel: (713) 988-8086
TWX. 910-881-2490
UTAH
Intel Corp
5201 Green Street
SUite 290
Murray 64123
Tel. (801) 263-8051
VIRGINIA
Intel Corp
1603 Santa Rosa Road
SUite log
Richmond 23288
Tel: (804) 282-5668
WASHINGTON
Intet Corp
155-108 Avenue N.E
SUite 386
Bel!evue 98004
Tel: (206) 453-8086
TWX. 910-443-3002
Intet Corp
408 N. Mullan Road
SUite 102
SpOkane 99206
Tel: (509) 928-8086
WISCONSIN
Intel Corp
330 S Executive Dr
SUite 102
Brookfield 53005
Tel: (414) 184-8087
FAX.: 414-796-2115
CANADA
BRITISH COLUMBIA
Intel Semiconductor of Canada. Ltd
301-2245 W Broadway
Vancouver V6K 2E4
Tel. (604) 738-6522
ONTARIO
Intel Semiconductor of Canada, Ltd
2650 QueenSlliew Drive
SUite 250
Ottawa K28 BHfi
Tel (613) 829-9714
TLX: 053-4115
Intel Semiconductor of Canada, ltd.
190 Attwell Drive
SUlle500
Rexdale M9W 6H8
Tel: (416) 675-2105
TLX 06983574
QUEBEC
Intel Sertllconductor of Canada. Ltd
620 St. Jean Boulevard
POinte Claire H9A 3K3
Tel: (514) 694-9130
TWX: 514-694-9134
'Field ApplicatIOn Location
CG-3/17/a1
ALABAMA
Arrow Electronics, Inc
1015 Henderson Road
Huntsville 35805
Tel' (205) 837-6955
tHamiltonJAvnet Elect,omcs
4940 Research Drive
Huntsville 35805
Tel: (205) 637-7210
TWX: 810-726-2162
Pioneer(fechnologies Group Inc
Tel: (205) 837-9300
TWX: 810-726-2197
ARIZONA
tHamilton/Avnet Electronics
505 S. Madison Drive
TAmpe 85281
Tel: (602) 231-5100
TWX: 910-950-0077
Kierulff Electronics, Inc
4134 E, Wood Street
PhoeniX 85040
Tel: (602) 437-0750
TWX: 910-951-1550
Wyle Distribution Group
17855 N. Black Canyon Highway
PhoeniX 85023
Tel: (602) 866-2888
CALIFORNIA
Arrow Electronics, Inc
19748 Dearborn Street
Chatsworth 9131 1
Tel: (818) 701-7500
TWX: 910-493-2086
Arrow Electroflics. Inc
1502 Crocker Avenue
Hayward 94544
Tel: (408) 487-4600
Arrow Electronics. Inc
9511 Ridgehaven Court
TLX' 888064
tArrow ElectrOnics. Inc
521 Weddell Drive
Sunnyvale 940B6
Tel: (408) 745-6600
TWX' 910-339-9371
Arrow Electronics. Inc
2961 Dow Avenue
Tustin 92680
Tel: (714) 838-5422
TWX: 910-595-2860
tAvnet Electronics
350 McCormick Avenue
Costa Mesa 92626
Tel: (714) 754-6051
TWX: 910-595-192B
Hamllton/Avnet ElectrOniCS
1175 Bordeaux Drive
TWX: 910339-9332
tHamllton/Avnet ElectroniCs
4545 Viewridge Avenue
TWX: 910-595-263B
tHamilton/Avnet Electronics
20501 Plummer Street
Chatsworth 91311
Tel: (818) 700-6271
TWX: 910494-2207
tHamilton/Avnet ElectroniCS
4103 Northgate Boulevard
Sacramento 95834
Tel: (916) 920-3150
tHamilton/Avnet Electronics
3002 G Street
Ontario 91311
Tel: (714) 989-9411
HamiltonjAvnet Electronics
19515 So Vermont Avenue
Torrance 90502
Tel: (213) 615-3909
TWX: 910-349-6263
Hamilton Electro Sales
9650 De Soto Avenue
Chatsworth 91311
Tel: (81B) 700-6500
DOMESTIC DISTRIBUTORS
CALIFORNIA (Cont'd)
tHamilton Electro Sales
10950W. Washington Blvd
TWX: 910-340-6364
Hamilton Electro Sales
1361 B West 190th Street
Gardena 9024B
Tel: (213) 558-2131
tHamliton Electro Sales
3170 Pullman Street
Costa Mesa 92626
Tel: (714) 64'1-4150
TWX: 910-595-2638
Klerulff Electronics, Inc
10824 Hope Street
Cypress 90430
Tel: (714) 220-6300
tKierulH Electronics, Inc
1180 Murphy Avenue
San Jose 95131
Tel' (40B) 971-2600
TWX: 910-379-6430
tKlerulH Electronics, Inc
14101 Franklin Avenue
Tustin 92680
Tel. (714) 731-5711
TWX: 910-5952599
tKlerulff Electronics. Inc
5650 Jillson Street
Commerce 90040
Tel. (213) 725-0325
TWX: 910-580-3666
Wyle Distnbution Group
26560 Agoura Street
Calabasas 91302
Tel: (SIB) 8S0-9000
TWX: 818-372-0232
tWyle Distribution Group
124 Maryland Street
TWX: 910-34B-7140 or 7111
tWyle Dlstnoutlon
17872 Cowan Avenue
IrVine 92714
Tel: (714) B63-9953
TWX: 910-595-1572
Wyle Distribution Group
11151 Sun Center Drive
Rancho Cordova 95670
Tel: (916) 638-52B2
tWyle Distribution Group
9525 Chesapeake Drive
TWX: 910-335-1590
tWyle Distribution Group
3000 Bowers
Santa Clara 95051
Tel. (408) 727-2500
TWX: 910-33B-0296
Wyle Military
18910 Teller Avenue
Irvine 92750
Tel: (714) 851-9958
TWX: 310-371-9127
Wyle Systems
7382 Lampson Avenue
Garden Grove 9264 I
Tel: (714) 891-'717
TWX: 910-595-2642
COLORADO
Arrow Eleclronics, Inc
1390 S. Potomac Street
Suite 136
Aurora 80012
Tel: (303) 696-1111
tHamiiton/Avnet Electronics
8765 E. Orchard Road
Suite 708
Englewood 80111
Tel: (303) 740-1017
TWX: 910-935-0787
tWyle Oistributiorl Group
451 E. 124th Avenue
Thornton 80241
Tel: (303) 457-9953
TWX. 910-936-0770
CONNECTICUT
tArrow Electronics, Inc.
12 Beaumont Road
1
TWX: 710-476-0162
HamiltonjAvnet Electronics
Commerce Industrial Park
Commerce Drive
Danbury 06810
Tel: (203) 797-2800
TWX: 710-456-9974
tPioneer Northeasl Electronics
112 Main Street
Norwalk 06851
Tel: (203) 853-1515
TWX, 710-46B-3373
FLORIDA
tArrow ElectrOnics, Inc.
350 Fairway Drive
Deerfield Beach 33441
Tel: (305) 429-B200
TWX: 510-955-9456
Arrow ElectroniCS, Inc
1001 NW. 62nd St, 5te. lOB
Ft Lauderdale 33309
Tel: (305) 776-7790
TWX: 510-955-9456
tArrow Electronics, Inc
50 Woodlake Drive W" Bldg. B
Palm Bay 32905
Tel: (305) 7251480
TWX: 510959-6337
tHamilton/Avnet Electronics
Tel: (305) 971-2900
TWX' 510-956-3097
Hamilton/Avnet Electronics
3197 Tech Dflve North
SI. Petersburg 33702
Tel: (813) 576-3930
TWX: Bl0-B63-0374
Hamllton/Avnet ElectroniCS
Tel: (3g5) 628-38BB
TWX, 810-853-0322
tPioneer Electronics
337 N. Lake Blvd" Ste 1000
32701
TWX: 810853-0284
Pioneer ElectroniCs
674 S. Military Trail
Deerfield Beach 33442
Tel: (305) 42S-8877
TWX: 510-955-9653
GEORGIA
tArrow Electronics, Inc
3155 Northwoods Parkway
SUite A
Norcross 30071
Tel: (404) 4498252
TWX' 810-766-0439
Norcross 30092
Tel: (404) 447-7500
TWX: 810-766-0432
Pioneer ElectrOnics
3100 F. Northwoods Place
Norcross 30071
Tel: (404) 44B-1111
TWX: 810-766-4515
ILLINOIS
tArrow Electronics, Inc
2000 E Alonquin Street
TWX. 910-291-3544
tHamilton/Avnet Electronics
1130 Thorndale Avenue
Bensenville 60106
Tel: (312) 860-7780
TWX: 910-227-0060
Klerul1f Electronics, Inc
1140 W. Thorndale
Itasca 60143
Tel: (312) 250-0500
ILUNOIS (Conl'd)
MT\ System'S Sales
1100 West Thorndale
Itasca 60143
Tel: (312) 773-2300
tPioneer Electronics
1551 Carmen Drive
TWX: 910-222-1834
INDIANA
tArrow Electronics, Inc
2495 Directors Row. Suite H
Indianapolis 46241
Tel: (317) 243-9353
TWX: 810-341-3119
Carmel 46032
Tel: (317) 844-9333
TWX: 810-260-3966
tPioneer Electrorllcs
6408 Castle place Drive
Indianapolis 46250
Tel: (317) 849-7300
TWX: 810-260-1794
KANSAS
tHamiltonjAvnet Electronics
9219 Quivera Road
Overland Park 66215
Tel: (913) 8BB-8900
TWX: 910-743-0005
Pioneer ElectrOrllcs
10551 Lackman Rd.
Lenexa 66215
Tei: (913) 492-0500
KENTUCKY
Hamilton/Allnet Electronics
1051 O. Newton Park
MARYLAND
Arrow Electronics. Inc
8300 Gulford Road #H
Rivers Center
Columbia 21046
Tel: (301) 995-0003
TWX: 71 0-236-9005
tHamiltonjAvnet Electronics
6822 Oak Hall Lane
Columbia 21045
Tel: (301) 995-3500
TWX: 710-862-1B61
tMesa Technology Corp
9720 Patuxentwood Dr
Columbia 21046
Tel: (301) 720-5020
TWX: 710-B28-9702
tPloneer ElectroniCS
9100 Gaither Road
Gaithersburg 20B77
Tel: (301) 921-0660
TWX: 710-B28-0545
MASSACHUSETTS
tArrow Eleclronics, Inc
1 Arrow Drive
Woburn 01801
Tel: (617) 933-8130
TWX: 710-393-6770
tHamilton/Avnet Electronics
100 Centennial Drive
TWX: 710-393-0382
Kierulf1 Electronics. Inc
13 Fortune Dr
Billerica 01821
Tel: (617) 667-8331
MTI Systems Sales
13 Fortune Drive
Billenca 01821
Pioneer Northeast ElectroniCS
44 Hartwell Avenue
TWX: 710326-6617
MICHIGAN
Arrow ElectroniOs. Inc
755 Phoenix Drive:
Ann Arbor 481 04
tHamiltonjAvnet Electronics
32487 Schoolcraft Road
Livonia 48150
Tel: (313) 522-4700
TWX: 810-242-8775
Space A5
Grand Rapids 49508
Tel: (616) 243-8805
TWX: 810-273-6921
Pioneer Electronics
4505 8roadmoor Ave. S.E.
Grand Rapids 49508
Tel: (616) 555-1800
tPior.aer Electronics
13485 Stamford
48150
Tel: (313) 525-1800
TWX: 810-242-3271
MINNESOTA
tArrow Electronics, Inc.
5230 W. 73rd Street
Edina 55435
Tel: (612) 830-1800
TWX: 910-576-3125
Hamilton/Avnet Electronics
12400 White Water Drive
Minnetonka 55343
Tel: (612) 932-0600
TWX: (910) 576-2720
tPioneer Electronics
10203 Bren Road East
Minnetonka 55343
Tel: (S12) 935-5444
TWX: 910-576-2738
MISSOURI
tArrow ElectroniCS. Inc.
2380 Schuet!
St louis 63141
Tel: (314) 567-68B8
TWX: 910-764-08B2
tHamilton/Avnet Electronics
13743 Shoreline Court
Earth City 63045
Tel: (314) 344-1200
TWX: 910-762-0684
Kierulff Electronics. Inc
11804 Borman Dr
St. LuiS 63146
Tel: (314) 997-4956
NEW HAMPSHIRE
tArrow Electronics. Inc
3 Perimeter Road
Manchester 03103
Tel: (603) 668-6968
TWX: 710-220-1684
Hamilton/Avnet Electronics
444 E. Industrial Drive
Manchester 03104
Tel: (603) 624-9400
NEW JERSEY
tArrow Electronics. Inc
6000 Lincoln East
Marlton 08053
Tel. (609) 596-8000
TWX: 710-897-0829
tArrow Electronics, Inc
2 Industrial Road
Fairfield 07006
Tel: (201) 575-5300
TWX: 710-998-2206
tHamilton/Avnet Electronics
1 Keystone Avenue
Bldg. 36
0
TWX: 710-940-0262
tMlcrocomputer System Technical Distributor Centers
CG-3!17/87
NEW JERSEY (Cont'd)
tHamilton/Avnat ElectroniCS
10 Industrial
Fairfield 07006
Tel: (201) 575-3390
TWX: 701-734-4388
tPioneer Northeast Electronics
45 Roule 46
Plnebrook 07058
Tel: (201) 575-3510
TWX: 710-734-4382
tMTI Systems Sales
383 Route 46 W
Fairfield 07006
Tel: (201) 227-5552
NEW MEXICO
Alliance Electronics Inc
11030 COChttl S.E
Albuquerque B7123
Tel (505) 292-3360
TWX 910-989-1151
Hamilton/Avnet Electronics
2524 Baylor Dflve S E
Albuquerque 87106
Tel (505) 765-1500
TWX: 910-989-0614
NEW YORK
Arrow Electronics. Inc
25 Hub Drive
Melville 11747
Tel: (SIS) 694-6800
TWX. 510-224-6126
t Arrow ElectrOniCS, Inc
3375 Brighton-Henrietta Townltne Rd
Rochester 14623
Tel (716) 427-0300
TWX. 510-253-4766
Arrow Electronics, Inc.
Tel: (315) 652-1000
TWX 710-545-0230
Arrow ElectroniCS. Inc
20 Oser Avenue
Hauppauge 11788
Tel. (SIS) 231-1000
TWX: 510-227-6623
Hamllton/Avne! ElactronlCS
333 Metro Park
Rochester 14623
Tel. (716)475-9130
TWX 510-253-5470
tHamlJton/ Avnet ElectroniCS
103 TWin Oaks Drive
Syracuse 13206
Tel (315) 437-2641
TWX: 710-541-1560
tHamiiton/Avnet Electromcs
933 Motor Parkway
Hauppauge 11788
Tel (516) 231-9800
TWX 510-224-6166
tMTI Systems Sales
3B Harbor Park Dflve
POBox 271
Port Washington 11050
Tel: (516) 621-6200
TWX: 510-223-0846
tPloneer Northeast ElectroniCs
1806 Vastat Parkway East
Vestal 13850
Tel: (607) 748-8211
TWX. 510-252-0893
tPloneer Northeast ElectroniCS
60 Crossway Park West
11797
TWX 510-221-2184
DOMESTIC DISTRIBUTORS
NEW YORK (Cont'd)
tPloneer Northeast ElectroniCs
B40 Fairport Park
Fairport 14450
Tet (716) 3B1-7070
TWX: 510-253-7001
NORTH CAROLINA
tArrow ElectrOniCS, Inc
5240 Greendalry Road
lWX: 510-928-1856
tHamllton/Avnet Electronics
Drrve
Tel 878-0819
TWX. 510-928-1836
Pioneer Electronics
9801 A-Southern Pine Blvd
Crrarlotte 28210
Tet: {704} 527-8188
TWX. 810-621-0366
OHIO
Arrow Electronics. Inc
7620 McEwen Road
Centerville 45459
Tel (513) 435-5563
TWX 810-459-1611
tArrow Electronecs. Inc
6238 Cochran Road
Solon 44139
Tel {216} 248-3990
TWX 810-427-9409
tHamilton/Avnet ElectroniCS
954 Senate Drrve
Dayton 45459
Tel (513) 433-0610
rNX 810-450-2531
tHamllton/Avnet Electronics
4588 Emery Industrral Park-way
WarrenSVille Heights 44128
Tel. (216) 831-3500
TWX. 810-427-9452
tPloneer Electrontcs
4433 InterpOlnt Blvd
Dayton 45424
Tel (513) 236-9900
TWX 810-459-1622
tPloneer Electrontcs
4800 E. 131st Street
Cleveland 44105
Tel: (216) 587-3600
TWX: 810-422-2211
OKLAHOMA
Arrow ElectroniCS. Inc
4719 S Memorial DrIVe
Tulsa 74145
Tel: (918) 665-7700
OREGON
tAlmac ElectroniCS Corpora-
tion
1885 N W. 169th Place
Bflavflrton 97006
Tel. (503) 629-8090
TWX. 910-467-8743
tHamiltonjAvnet ElectroniCs
6024 S W Jean Road
Bldg C, SUite 10
TWX 910-455-8179
OREGON (Cont'd)
Wyte Distribution Group
5250 N.E Elam Young Parkway
SUIte 600
Hillsboro 97124
Tel: (503) 640-6000
TWX: 910-460-2203
PENNSYLVANIA
Arrow ElectrOniCS, Inc
650 Seco Road
Monroeville 15146
Tel: (412) 856-7000
Hamilton/Avnet Electronics
Bldg E
Tel
Pioneer Electronics
259 Kappa Dnve
TWX: 710-795-3122
tPloneer Electronics
261 Glbralter Road
Horsham 19044
Tel: (215) 674-4000
TWX 510-665-6778
TEXAS
tArrow ElectroniCs, Inc
3220 Commander Drive
Carrollton 75006
Tel (214) 380-6464
TWX. 910-860-5377
tArrow Electronics. Inc.
10899 Klnghurst
Suite 100
Houston 77099
Tel (713) 530-4700
TWX 910-880-4439
tArrow ElectrOfllCS, Inc
10125 Metropolitan
Ausiin 78758
Tel: (512) 835-4180
TWX: 910-874-1348
tHamlltonjAvnet Electronics
2401 Rutland
AUStin 78758
Tel. (512) 837-8911
TWX 910-874-1319
tHamllton/Avnat Electronics
2111 W Walnut HIli lane
IrVing 75062
Tel (214)659-4100
TWX: 910-860-5929
tHamllton/ Allnet ElectroniCs
#190
Tel (713) 780-1771
TWX. 910-881-5523
Klerulff Electronics. Inc
9610 Skillman
Oallas 75243
Tel. (214) 343-2400
tPloneer ElectronicS
, 826 D Kramer Lane
Ausltn 78758
Tel. (512) 835-4000
TWX 910-B74-1323
tPioneer Electronics
13710 Omega Road
Dallas 75234
Tel (214) 386-7300
TWX. 910-850-5563
tPloneer ElectrOnics
5853 Pornt West Drive
Houston 77036
Tel: (713) 988-5555
TWX 910-881-1606
UTAH
tHamllton/Avnel Electronics
1585 West 2100 South
Mm
9
TWX. 910-925-4018
Wyle Distribution Group
1325 West 2200 South
SUite E
WASHINGTON
tAlmac Electronics Corp.
14360 S.E. Eastgate Way
Bellevue 96007
Tel: (206) 643-9992
TWX: 910-444-2067
Arrow ElectrOnics, Inc
14320 N.E 2151 Street
Bellevue 98007
Tel. (206) 643-4800
TWX 910-444-2017
Hamilton/Avnet Electronics
14212 N.E. 21st Street
Bellevue 98005
Te!: (206) 453-5874
TWX 910-443-2469
Wyle Distribution Group
1750 132nd Ave., N.E
Bellvue 98005
Tel: (206) 453-8300
WISCONSIN
tArrow Electronics, Inc
430 W Rausson Avenue
Oakcreek 53154
Tel. (414) 764-6600
TWX: 910-262-1193
Hamilton/Avnet Electromcs
2975 Moorland Road
New Berlin 53151
Tel (414) 784-4510
TWX 910-262-1182
Klerulff Electromcs, Inc
2238-E W. Bluemound Rd
Waukeshaw 53186
Tel (414) 784-8160
CANADA
ALBERTA
Hamilton/Avnet Electromcs
2816 21st Street N.E
TWX. 03-827-642
HamiitonjAvne! Electromcs
6845 Rexwood Road Umt 6
L4Vl R2
tZentromcs
Avenue N.E
BRtTtSH COLUMBIA
Electrontcs
Road
Tel (604) 272-4242
BRITISH COLUMBIA (Cont'd)
Zentronics
Road
Tel: (604) 273-5575
TWX: 04-S077-89
MANITOBA
Zentronics
590 Street
ONTARIO
Arrow Electronics Inc
24 Martin Ross Avenue
Downsview M3J 2K9
Tel: (416) 661-0220
TLX: 06-218213
Arrow Electronics Inc.
14B Colonnade Road
Nepean K2E 7 JS
Tel: (613) 226-6903
tHamiiton/Avnet Electronics
6845 Rexwood Road
UnltsG&H
R2
TWX: 510-492-8867
tHamilton/Avnet Electronics
210 Colonnade Road South
Nepean K2E 7L5
Tel: (613) 226-1700
TWX: 05-349-71
Zentrontcs
564/10 Weber Street North
Waterloo N2L SC5
Tel: (519) 884-5700
tZentronlcs
155 Colonnade Road
Unit 17
Nepean K2E 7K1
Tel: (613) 225-8840
TWX: 06-976-78
aUEBEC
tArrow Electronics Inc.
4050 Jean Talon Quest
Montreal H4P 1 WI
Tel: (514) 735-5511
TlX 05-25596
Arrow Electronics Inc.
909 Charest Blvd.
Quebec 61 N 269
Tel: (418) 687-4231
TLX: 05-13388
Hamllton/Avnet ElectrOniCS
2795 Aue Halpern
St. laurent H4S 1 PB
Tel: (514) 335-1000
TWX: 610-421-3731
Zwtronics
505 locke Street
St laurent H4T 1 X7
Tel: (514) 735-5361
TWX
tMlcrocomputer System Technical Distributor Centers
CG-3/17/87
BELGIUM
Brussels
Tel. (02)
DENMARK
bUel Denmark AlS'
Glentevej 61 3rd Floor
TLX: 19567
FINLAND
Intel Finland OY
Rousilantle2
00390 Helsinki
lei (8) 0544-644
TLX: 123332
FRANCE
Intel Paris
1 Rue Edison, BP 303
78054 Salnt-Quentln-en-Yvelines Cedex
Tel: (33)1-30-57-7000
TLX. 69901677
Intel Corporation, S.A R.l
Immeuble BBC
4 Quai des Etroits
TLX.305153
EUROPEAN SALES OFFICES
WEST GERMANY
Intel Semiconductor GmbH"
Seid[estrasse 27
Muenchen 2
Te[: (89) 53891
TLX. 05-23177 [NTl 0
Intel Semiconductor GmbH
Verkaufsbuero Wlesbadsn
Abraham-lincoln Str 16-18
6200 Wiesbadsn
Tsl: (6121) 76050
TlX: 041861831NTW 0
Intel Semiconductor GmbH
Verkaufsbuero Hannover
Hohenz:ollernstrasse 5
3000 Hannover 1
Tel (511) 34-40-81
TLX 923625 INTH D
Intel Semiconductor GmbH
Verkaufsbuero Stuttgart
Bruckstrasse 61
7012 Fellbach
Tel: (711) 58-00-82
TLX 7254826 INTS D
ISRAEL
Intel Semiconductor Ltd"
Attidim Industrial Park
Neve Share!
Ovora Hanevla
Bldg. No 13, 4th Floor
P.O. Box 43202
Tel Aviv 61430
Tel (3) 491-099. 491-098
TLX: 371215
ITALY
Intel Corporation S P.A
Mllanoflofl. Palazzo E/4
20090 Assago (Milano)
Tel: (02)824-4071
TlX 3412861NTMIL
NETHERLANDS
Intel Semiconductor (Nederland) B V
Alexanderpoort BUIlding
Marten Meesweg 93
3068 Rotterdam
Tel (10) 21-23-77
TLX 22283
NORWAY
A/s
Hvamvelen 4
N-2013. SkJetten
Tel. (2) 742-420
TLX 78018
SPAIN
Inlel Iberia
Calle Zurbaran 28-IZODA
28010 Madrid
Tel: (1) 410-4004
TLX: 46880
SWEDEN
Intel Sweden A.S:
Dalvagen 24
8-171 36 Solna
Tel (8) 734-0100
TLX: 12261
SWITZERLAND
Intel Semiconductor A.G
Talackerstrasse 17
8152 Glattbrugg
CH-8065 Zurich
Tel: (01) 829-2977
TLX 57989 ICH CH
UNITED KINGDOM
Intel Corporation (U K) Ltd
Pipers Way
SWlndon, Wiltshire SNI lRJ
Tel: (0793) 696-000
TLX 444447 INT SWN
"Field Application Location
EUROPEAN DISTRIBUTORS/ REPRESENTATIVES
AUSTRIA
Bacher Elektromcs Ges m.b H
Rotenmuehlgasse 26
A-1120Wlen
Tel: (222) 835-6460
TUC131532
BELGIUM
94
Bruxelles 1120
Tel: (02)216-01-60
TlX 64475
BENELUX
Koning en Hartman Electrotechmek B V
Postbus 125
2600 AC Delft
Tel: (15) 609-90S
TLX: 38250
DENMARK
ITT MultlKomponent
Naverland 29
DK-2S00 Gloslrup
Tel. (02) 456-66-45
TlX: 33355 InCG OK
FINLAND
Oy Fintronic AS
Melkonkatu 24A
SF-0021O Helsinki 2t
Tel: (0) 692-60-22
TLX: 124224 FTRON SF
FRANCE
Generim
Zone dActivile de Courtaboeuf
Avenue de la Baltlque
91943 Les UliS Cedex
Tel: (1) 69-07-78-78
TLX.691700
Metrologie
Tour d'Asnieres
4, Avenue Laurent Cely
92606 Asnieres
Tel: (1) 47-90-62-40
TLX: 611448
FRANCE (Cont'd)
Tekelec Alrtronlc
C,te des Bruyeres
Aue Carle Vernel BP 2
92310 Sevres
Tel: (1)45-34-75-35
TLX 204552
WEST GERMANY
Electromc 2000 Vertriebs AG
Tel. (OS9) 42-00-10
TLX 522561 ElEC D
6277 Bad Camberg
Tel (064) 34-231
TLX 415257-0JERM D
Metrologle GmbH
Rhelnstr 94-96
6100 Darmstadt
Tel: (06151) 33661
TLX: 176151820
Proeleclron Vertnebs AG
Max-Planck-5trasse 1-3
6072 Orelelch
Tel (06103) 3040
TLX: 417972
ITT -MultlKomponent
Bahnhofstrasse 44
TLX 7264399 MUKO D
ISRAel
Eastromcs Ltd.
11 Rosanis Sireet
PO. Box 39300
Tel Aviv 61392
Tel. (3) 47-51-51
TLX: 342610 DATIX IL or
33638 AONIX IL
ITALY
Eledra Compopentl S.P A
I/"- Glacol"ftO Welt, 37
20143 Milano
Tel: (02) 82821
TLX: 332332
ITALY (Cont'd)
Intesl
Mllanollon E5
I
TLX 311351
Lasl Elettromca S P.A
Vlale Fulvlo Testl. t26
20092 Clnlsello Balsamo
Tel. (02) 244-0012. 244-0212
TlX 352040
NORWAY
Nordlsk Electronlk AjS
Postboks 130
N-1364 Hvalstad
Tel (2)846-210
TLX. 77546 NENAS N
PORTUGAL
Dltram
Avemda Marques de Tomar. 46A
l1sboa P-1000
Tel. (351-1) 734-834
TWX (0404) 14182
SPAtN
In
Tel (t}419-54-00
TWX 27461
A.T.D Electronlca S A
PI e.udad dp Vlena 6
28040 Madrid
Tel (1) 234-4000
TWX 42477
SWEDEN
Nordisk Eleklromk AB
Box 1409
5-17127 Solna
Tel: (8) 73497-70
TLX 10547
SWITZERLAND
lndustrade AG
Hertlstrasse 31
CH-8304 Wallisellen
Tet: (01) 830-5040
TLX 56788
UNITED KINGDOM
Accent Electronic Components Ltd
England
Tel: (0462) 686666
TLX 626923
By tech Ltd
Unit 2 Western Centre
Western Industrial Estate
Bracknell. Berkshire AG12 1RW
England
Tel (0344) 482211
TLK 848215
Comway Mlcrosystems Ltd.
John Scott House, Market St
Bracknell, Berkshire AJt2 lOP
England
Tel: (0344) 55333
TLX 847201
IBA MICrocomputers Ltd
Unit 2 Western Centre
Western lndustnal Estate
Bracknell. Berkshire RG12 lAW
England
Tel: (0344) 466-555
TLX 849381
Jermyn Industnes
Vestry Estate, Olford Road
Sevenoaks, Kent TN14 5EU
England
Tel: (0732) 450144
TLX.95142
Rapid Silicon
Rapid House, Denmark 5t.
High Wycombe, Bucks HP11 2ER
England
Tel (0494) 442266
TLX 837931
Rapid Systems
Rapid House. Denmark SI
High Wycombe, Bucks HP11 2EA
England
Tel: (0494) 450244
TL.X: 837931
Micro Marketing
Glenageary Office Park
Gtenageary, Co. Dublin
Ireland
Tel: (0001) 856288
TLX.31584
YUGOSLAVIA
H.R. Mlcroelectromcs Corp
2005 De La Cruz Blvd., Ste. 223
Santa Clara, CA 95050 U.S.A.
Tel: (408) 98S-0286
TLX: 387452
CG-3/17/87
intJ
AUSTRALIA
Intel Australia?ty Ltd_'
Building
FAX. (2) 923-2632
CHINA
Intel PRC Corporation
Beijing, PRC
Tel: (1) 500-4850
TLX: 22947 INTEL eN
FAX' (1) 500-2953
HONG KONG
Intel Semiconductor Ltd
1701-3 Connaugh\ Centre
1 Connaught Road
Tel: (5) 844-4555
TWX: 63869 ISLHK HX
FAX' (5) 294-589
INTERNATIONAL SALES OFFICES
JAPAN
Intel Japan K.K
56 Tokodal Toyosato-machi
300-26
TLX: 03656-160
Inlel Japan K.K."
Dailchl MltsUgl Bldg.
1-8889 Fuchu-cho
Fuchu-shl, Tokyo 183
Tel: (04) 23-60-7871
Intel Japan K.K
Flower-HIli Shln-machl Bldg
1-23-9 Shlnmachl
154
Intel Japan K.K:
Kumagaya, Saltama 360
TeJ. (04) 85-24-6871
Inlel Japan K K
Shlzuaka-ken411
Tel' (05)
JAPAN (Cont'd)
Bldg.
g15-20 Shinmaruko, Nakahara-ku
KBwasaki-shi, Kanagawa 211
Tel: (04) 47-33-7011
Intel Japan K.K
Nlhon Seimel Bldg
1-12 Asahl-cho
Intel Japan K.K:
Ryokuchl-Station Bldg
2-4-1 Terauchi
Toyonaka, Osaka 560
Tel. (06) 863-1091
Intel Japan K.K
Shinmaru Bldg
1-5-1 Marunouchi
Chlyoda-ku. TOkyo 100
Tel' (03j201-3621
KOREA
Intel TechnOlogy ASia Ltd.
580U1150
FAX: (2) 784-8096
SINGAPORE
Intel Singapore Technology, Ltd
1-1 Thomson Road
#21 -06 GoldhlH Square
Singapore 1130
Tel: 250-7811
Tl.X: 39921 INTEL
FAX: 250-9256
TAIWAN
Intel Technology (Far East) Ltd.
Taiwan Branch
lO/F., No. 205, Tun Hua N. RU<:I.d
Taipei, R.O.C.
Tet. (02) 716-9660
Tl.X: 13159 tNTELTWN
FAX: (02) 717-2455
-Field Application Location
INTERNATIONAL
DISTRIBUTORS/REPRESENT ATIVES
ARGENTINA
VLC S.R.L Bartalome Mitre 1711
3 Piso
1037 Buenos Aires
Tel:
TLX' 17575 EDARG-AA
AUSTRALIA
Total Electromcs
Private Bag 250
9 Harker Street
Burwood, Vlctona 3125
Tel: 61-3-288-4044
TLX: AA 31261
Total Electronics
P.O. Box 139
Artamon, N.S.W. 2064
Tel: 61-02-438-1855
TLX: 26297
BRAZIL
Elebra Mlcroelectronica S/A
Geraldo Flauslno Gomes. 78
9 Andar
04575 - Sao Paulo - S.P
Tel: 55-11-534-9600
TLX: 3911125131 ELBR SR
FAX. 55-11-534-9424
CHILE
DIN Instruments
Suecia 2323
Casilta 6055, Correa 22
Santiago
Tel'
TLX: 440422 RUDY CZ
CHINA
CHINA (Cont'd)
Schmidt & Co Ltd
18/F Great Eagle Centre
23 Harbour Road
Wanchal, Hong Kong
Tel. 852-5-833-0222
TWX. 74766 SCHMC HX
FAX 852-5-8918754
INDIA
Mlcromc DeVices
Arun Complex
No 65 OV.G. Road
Basavanagudl
TLX: 0645-8332 MD BG IN
Micronic Devices
403, Gagan Deep
12, RSJendra Place
New Delhi 110 008
Tel' 91-58-97-71
TLX: 03163235 MOND IN
Mlcronic DeVices
No. 516 5th Floor
Swastik Chambers
Road
Tel: 91-52-39-63
TLX: 9531 171447 MDEV IN
JAPAN
Asahi ElectrOniCS Co Ltd
KMM Bldg. 2-14-1 Asano
Kokurakita-ku
FAX. 093-551-7861
C. Itoh Techno-Science Co., Ltd.
C.ltoh 2-5-1 Klta-Aoyama
107
FAX: 03-497-4969
JAPAN (Conl'd)
Okaya Kokl
2-4-18 Sakae
460
FAX
Ryoyo Electro Corp
Konwa Bldg
1-12-22 TsuklJi
FAX' 03546-5044
KOREA
J-Tek Corporation
6th Floor, Government PenSIon Bldg
Seoul 150
Tel: 82-2-782-8039
TLX. 25299 KODlGIT
FAX. 822-764-8391
Sam sung SemIconductor &
Telecommunications Co . Ltd
150. 2-KA. Tafpyung-ro. Chung.ku
Seoul 100
Tel: 82-2-751-3987
TLX: 27970 KORSST
FAX: 82-2-753-0967
MEXICO
Dicopei S A
Tochtli 368 Fracc Ind San AntoniO
Azcapotzalco
C.P. 02760-Mexico, O.F.
Tel: 52-5-5613211
TLX: 1773790 DICOME
NEW ZEALAND
Northrup Instruments & Systems Ltd.
Auckland 1
Tel: 64-9-501-219, 501-801
TLX: 21570 THERMAL
Northrup Instruments & Systems Ltd.
P.O. Box 2406
TLX: NZ3380
FAX' 64-4-857276
SINGAPORE
Francotone Electronics Pte Ltd
1? Harvey Road #04-01
Smgapore 1336
Tel: 283-0888, 289-1618
TWX' 56541 FRELS
FAX' 2895327
SOUTH AFRICA
Electronic Building Elements, Pty. !...td
P.O. Box 4609
Pine Square. 18th Street
Hazelwood, Pretoria 0001
Tel: 27-12-469921
Tl.X: 3-227786 SA
TAIWAN
Mitac Corporation
No: 585, Ming Shen East Rd
TaIpei, R.O.C
Te(' 886-2-501-8231
FAX. 886-2-501-4265
VENEZUELA
P. Benavides SIA
Avilanes a Rio
Resldencia.s Kamarata
locales 4 A 17
La Candelaria. Caracas
Tel: 58-2-571-0396
TLX: 28450 PBVEN VC
FAX: 58-2-572-3321
"Field Application Location
CG-3/17/87
inter
ALABAMA
Intel Corp
5015 Bradford Drive, #2
Huntsville 35805
Tel: (205) 830-4010
ARIZONA
Intel Corp.
11225 N. 2Bth Dr #D214
Phoenix 85029
Tel: (602) 869-4980
Intel Corp.
500 E. Fry Blvd., Suite M-15
SIerra Vista 85635
TAl: (602) 459-501 0
ARKANSAS
Intel Corp
P.O. Box 206
Ulm 72170
Tel. (501)241-3264
CALIFORNIA
Intel Corp
21515 Vanowen
Suite 116
Intel Corp.
2250 E. Imperial Highway
SUite 218
[I Segundo 90245
Tel: 1-800-468-3548
Intel Corp
2000 E. 4th Street
Suite 110
Sanla Ana 92705
Tel: (714) 835-5789
TWX 910-595-2475
Inte! Corp
2700 San Tomas Expressway
Santa Clara 95051
Tel (408) 970-1740
Intel Corp
4350 Executive Dnve
SUite 150
COLORADO
Intel Corp.
650 South Cherry
SUite 915
Denver 80222
Tel: (303) 321-8086
TWX. 910-931-2289
CALIFORNIA
2700 San Tomas Expressway
Santa Clara 95051
Tel: (408) 970-1700
CALIFORNIA
2700 San Tomas Expressway
Santa Clara 95051
Tel: (408) 986-8086
DOMESTIC SERVICE OFFICES
CONNECTICUT
Intel Corp
26 Mill Plain Road
FLORIDA
Intel Corp
1500 N.w. 62, SUIte 104
Ft. Lauderdale 33309
Tel; (305) 771-0600
TWX: 510-956-9407
Intel Corp.
242 N. Westmante Drive
Suite 105
32714
GEORGIA
Intel Corp.
3280 POinte Parkway
Suite 200
Norcross 30092
Tel: (404)441-1171
ILLINOIS
Intel Corp
300 N. Martingale Ad
Suite 300
Schaumburg 60194
Tel: (312) 310-5733
INDIANA
Intel Corp
8777 Purdue Ad., #125
Indianapolis 46268
Tel: (317) 875-0623
KANSAS
Intel Corp
8400 W. 11 Oth Street
Suite 170
Overland ParK 66210
Tel: (913) 345-2727
KENTUCKY
Intel Corp
3525 Tatescreek Road.
#51
45
MARYlAND
Intel Corp
5th Floor
7833 Walker Drive
Greenbelt 20770
Tel: (301)441-1020
MASSACHUSETTS
Intel Corp.
3 Carlisle Road
Westford 01886
Tel. (617) 692-1060
MICHIGAN
Intel Corp.
7071 Orchard Lake Road
Suitfi 100
West Bloomfield 48033
Tel: (313) 851-8905
MISSOURI
Intel Corp
4203 Earth City Expressway
Suite 143
Earth City 63045
Tel. (314) 291-2015
NEW JERSEY
Intel Corp
385 Sylvan Avenue
Englewood Cliffs 07632
Tel (201) 567-0821
TWX: 710-991-8593
Intel Corp.
Raritan Plaza II!
Raritan Center
Edison 08817
Tel (201) 225-3000
NORTH CAROLINA
Intel Corp
2306 W. Meadowv!ew Road
SUIte 206
Greensboro 27407
Tel. (919) 294-1541
Intel Corp
2700 T ryc1iff Ad, Suite 102
OHIO
Intel Corp
Chagrin-Brainard Bldg
SUite 305
Tel: (216) 464-6915
TWX 810-427-9298
Intel Corp.
6500 Poe
Dayton 45414
Tel. (513) 890-5350
OREGON
Inlel Corp.
15254 N.W. Greenbrier
Beaverton 01886
Tel (503) 645-8051
TWX 910-467-8741
Intel Corp
5200 N E. Elam Young Parkway
Hillsboro 97123
Tel: (503) 681 -8080
CUSTOMER TRAINING CENTERS
ILLINOIS
Tel. (312) 310-5700
MASSACHUSETTS
3 Carlisle Road
Westford 01886
Tel (617) 692-1000
SYSTEMS ENGINEERING OFFICES
ILLINOIS
Tel: (312) 310-8031
MASSACHUSETTS
3 Carlisle Road
Westford 01886
Tel: (617) 692-3222
PENNSYLVANIA
Intel Corp.
201 Penn Center Boulevard
Suite 301 W
TEXAS
Intel Corp.
313 E. Anderson Lane
Suite 314
Austin 78752
Tel: (512) 454..J628
TWX: 910-674-1347
Intel Corp
12300 Ford Road
SUite 380
Dallas 75234
Tel: (214) 241-2820
TWX: 910-860-5617
Intel Corp.
8815 Dyer St., Suite 225
EI Paso 79904
Tel: (915) 751-0186
VIRGINIA
Intel Corp.
1603 Santa Rosa Rd. #109
Richmond 23288
Tel: (804) 282-5668
WASHINGTON
Intel Corp.
110 110th Avenue N.E.
Suite 510
Bellevue 98004
Tel: 1-800-468-3548
TWX: 910-443-3002
WISCONSIN
Intel Corp.
450 N. Sunnyslope Road
Surte 130
Brookfield 53005
Tel: (414) 784-8087
CANADA
Intel Corp
190 Altwell Drive, Suite 103
Rexdale, Ontario
Canada K2H 8A2
Tel: (416) 675-2105
Intel Corp
620 5t. Jean Blvd.
Pointe Claire, Quebec
Canada H9R 3K2
Tel. (514) 694-9130
Intel Corp
2650 Queensvlew Drive. #250
Ottawa, OntariO,
Canada K2B SH6
Tel: (613) 829-9714
MARYLAND
7833 Walker Dr., 4th Floor
Greenbelt 20770
Tel (301) 220-3380
NEW YORK
300 Motor Parkway
Hauppauge 11788
Tel: (516) 231-3300
CG-3/17/87