outline floating point arithmetic 80x87 floating point unit

22
Outline Outline Floating point arithmetic 80x87 Floating Point Unit

Post on 22-Dec-2015

244 views

Category:

Documents


2 download

TRANSCRIPT

OutlineOutline

Floating point arithmetic80x87 Floating Point Unit

KoPemproses Aritmetik KoPemproses Aritmetik

Fg2 kopemproses aritmetik dijlnkan secara selari dgn mikrop yakni mikrop dan kop blh dilaksanakan secara serentak.

Jenis2 data yg dimanipulasi oleh kop ialah signed integer, fp & BCD– Integer 16bit, 32bit & 64bit dgn pelengkap duaan sbg

neg.– BCD disimpan sbg nom 18 digit dlm 10b memori.

MSbyte ialah sign bit dan 9byte selebih ialah 18digit nom BCD.

– Fp ada tiga jenis iaitu single, double dan extended.

Titik Apungan Titik Apungan NomborNombor

Komponen2 nombor titik apungan

Sign: 0=pos(+); 1=neg(-)

Exponent: (with constant bias added)

Mantissa: 1 <= M < 2 Number = (1.Mantissa) * 2(exponent-bias) Example: 10.25 (decimal)

= 1010.01 (binary)

= + 1.01001 * 23 (normalized)

Titik Apungan Titik Apungan FormatFormat

Precision Size Exp. Bias Mant. Mant.

(bits) (bits) (bits) 1st Digit

Single 32 8 127 (7Fh) 23 Implied

Double 64 11 1023 (3FFh) 52 Implied

Extended 80 15 16383 (3FFFh) 63 Explicit

Tukarkan kpd Tukarkan kpd Bentuk Titik ApunganBentuk Titik Apungan

Tukarkan nom desimal ke binari Normalkan nom binari tersebut Kirakan pincang eksponen Simpan nom itu dlm format titik apungan Cth:

1. 100.25 = 1100100.012. 1100100.01 = 1.10010001 x 26

3. 110 + 01111111(7Fh) = 10000101(85h)4. Sign = 0

Exponent = 10000101Mantissa = 100 1000 1000 0000 0000 0000

Notemantissa of a number 1.XXXX is the XXXXThe 1. is an implied one-bitthat is only stored in the extended precision formof the floating-point numberas an explicit-one bit

Tukarkan kpd Tukarkan kpd Bentuk Titik ApunganBentuk Titik Apungan

Format Sign Exponent Mantissa

Single (+) 7F+6 = 85h (8 bits) Implied 1. (23 bit)

0 1000,0101 100,1000,1000,0000,0000,0000

Double (+) 3FFh + 6 = 405h (11 bits) Implied 1. (52 bit)

0 100,0000,0101 100,1000,1000,0000,…,0000

Extended (+) 3FFFh+6 = 4005h (15 bits) Explicit 1. (63 bit)

0 100,0000,0000,0101 1 10,0100,0100,0000,…,0000

...

ContohContoh

-7.50.5625-247.60.0

Pewakilan IstimewaPewakilan Istimewa Zero:

– Exp = All Zero, Mant = All Zero

NAN (not a number) an invalid floating-point result

– Exp = All Ones, Mant non-zero

+ Infinity:

– Sign = 0, Exp = All Ones, Mant = 0

- Infinity:

– Sign = 1, Exp = All Ones, Mant = 0

Tukar drpdTukar drpdBentuk Titil Apungan (cth) Bentuk Titil Apungan (cth)

Sign = 1Exponent = 1000,0011Mantissa = 100,1001,0000,0000,0000

100 = 1000,0011 - 0111,1111 (tukarkan pincang

eksponen)

1.1001001 x 24 (normalkan nom binari)

11001.001 (nyah normalkan nom binari)

-25.125 (nom desimal)

Unit Titik Apungan Unit Titik Apungan 80x87 80x87

Perkakasan On-chip utk hitungan pantas bg nom titik apungan

Operasi2 FPU dilaksanakan selari dgn operasi2 integer Historically implemented as separate chip

– 8087-80387 Coprocessor 80486DX-Pentium III contain their own internal and

fully compatible versions of the 80387 CPU/FPU Exchange data though memory

– Converts Single and Double to Extended-precision

Arithmetic Coprocessor ArchitectureArithmetic Coprocessor Architecture Control unit

– interfaces the coprocessor to the microprocessor-system data bus Numeric execution unit (NEU)

– executes all coprocessor instructions NEU has eight-register stack

– each register is 80-bit wide (extended-precision numbers)– data appear as any other form when they reside in the memory system– holds operands for arithmetic instructions and the results of arithmetic

instructions– FSTSW AX ;the only instruction (not available for 8087) that

allows direct communications between CPU and FPU through the AX register

Other registers - status, control, tag, exception

Arithmetic CoprocessorArithmetic CoprocessorFPU RegistersFPU Registers

The eight 80-bit data registers areorganized as a stack

As data items are pushed into the top register, previous data itemsmove into higher-numbered registers, which are lower on the stack

All coprocessor data are stored in registers in the 10-byte real format

Internally, all calculations are done on the greatest precision numbers

Instructions that transfer numbersbetween memory and coprocessorautomatically convert numbers to and from the 10-byte real format

Sample 80x87 FPU Opcodes Sample 80x87 FPU Opcodes FADD: Addition FMUL: Multiplication FDIV: Division (divides the destination by the

source) FDIVR: Division (divides the source by the

destination) FSIN: Sine (uses radians) FCOS: Cosine (uses radians) FSQRT: Square Root FSUB: Subtraction FABS: Absolute Value FYL2X: Calculates Y * log2X(X) (Really) FYL2XP1: Calculates Y * log2X(X)+1 (Really)

Programming the FPUProgramming the FPU

FPU Registers = ST(0) .. ST(7)

Format: OPCODE destination, source

Restrictions: One register must be ST(0)

ST=ST(0)=top of stack

Use of ST(0) is implicit when not specified

FINIT - Execute before starting to initialize FPU registers!

Programming the FPU (cont.)Programming the FPU (cont.)

FLD MemVar – Load ST(0) with MemVar &– Push all other ST(i) to ST(i+1) for i=0..6

FSTP MemVar – Move top of stack to memory & – Push all other ST(i) to ST(i-1) for I = 1..7

FST MemVar – Move top of stack to memory – Leave result in ST(0)

FSTP – Store Result and Pop FPU stack

FPU ProgrammingFPU ProgrammingClassical-Stack FormatClassical-Stack Format

Instructions treat the coprocessor registers like items on the stack

ST (the top of the stack) is the source operand ST(1), the second register, is the destinationInstructions

ST

ST(1)

fld 1 fldpi fadd

1.0

1.0

3.14 4.14

StackContents

FPU ProgrammingFPU ProgrammingMemory FormatMemory Format

The stack top (ST) is always the implied destination

ST

ST(1)

fld m1 fld m2 fadd m1

1.0 1.0

1.0

fstp m1 fst m2

m1

m2

1.0

2.0

1.0

2.0

1.0

2.0

1.0

2.0

3.0

2.0

3.0

1.0

1.0

1.0

2.0 3.0

.DATAm1 REAL4 1.0m2 REAL4 2.0.CODE….fld m1fld m2fadd m1fstp m1fst m2

FPU ProgrammingFPU ProgrammingRegister FormatRegister Format

Instructions treat coprocessor registers as registers rather than stack elements– require two register operands; one of them must be the stack top

(ST)

ST

ST(1)

fadd st(1), st

1.0

3.0

4.0

fadd st, st(2) fxch st(1)

ST(2)

2.0

1.0

3.0

3.0

3.0 3.0

4.0

3.0

3.0

FPU ProgrammingFPU ProgrammingRegister-Pop FormatRegister-Pop Format

Coprocessor registers are treated as a modified stack– the source register must always be a stack top

ST

ST(1)

faddp st(2), st

2.0

ST(2)

2.0

1.0

3.0

4.0

FPU ProgrammingFPU ProgrammingTiming IssuesTiming Issues

A coprocessor instruction following a processor instruction

– coordinated by assembler for 8086 and 8088

– coordinated by processor on 80186 - Pentium

A processor instruction that accesses memory following a coprocessor instruction that accesses the same memory

– for 8087 need include WAIT or FWAIT to ensure that coprocessor finishes before the processor begins

– assembler is doing this automatically

Calculating Calculating the Area of a Circlethe Area of a Circle

MODEL SMALL.DATARAD DD 2.34, 5.66, 9.33, 234.5,

23.4AREA DD 5 dup (?).CODE.STARTUP

mov si, 0 ;source element 0mov di, 0 ;destination element 0mov cx, 5 ;count of 5

Main1:fld rad[si] ;radius to STfmul st, st(0) ; square radius

fldpi ; pi to ST

fmul ; multiply ST = ST x ST(1)

fstp AREA[di]

inc si

inc di

loop Main1

.EXIT

END

Calculating Sqrt(xCalculating Sqrt(x22 + y + y22))(Example of Using Code View)(Example of Using Code View)

.MODEL SMALL

.STACK

.DATA

X real4 4.0Y real4 3.0Z real4 ? .CODE main procmov ax, @DATA

mov ds, ax finit fld X fld st(0)

Fmulfld Y fld st(0)Fmulfaddfsqrtfst Z

mov ax, 4C00hint 21h main endp