prog w asm koprocesor

background image

1

P

ROGRAMOWANIE ZMIENNOPRZECINKOWEJ JEDNOSTKI ARYTMETYCZNEJ

na podstawie:
W. Stanisøawski, D. Raczy ski: Programowanie systemowe mikroprocesorów rodziny x86,
PWN, 2010.
B. Drozdowski: Kurs asemblera -

http://rudy.mif.pg.gda.pl/~bogdro/dos/a_kurs05.htm

Architektura

W skøad FPU (zmiennoprzecinkowa jednostka arytmetyczna (ang. Float Point Unit) wchodzi:

 osiem 80-cio bitowych rejestrów roboczych zorganizowanych w stos (R0 – R7),
 16-bitowy rejestr stanu stosu (ang. Tag Field Register – TW),
 rejestr sterowania (ang. Control Register - FPCR),
 rejestr stanu (ang. State Register – FPSR),
 rejestry adresu rozkazu (ang. Instruction Pointer – FIP) i adresu danych (ang. Data Pointer –

FDP) u ywane wyø cznie do obsøugi bø dów.

0

63

64

78

79

Mantysa

Wykøadnik

Znak

R7
R6
R5
R4
R3
R2
R1
R0

Bit

Pole

stanu

0

1

Rejestr sterowania FPCR
Rejestr stanu FPSR
Rejestr stanu stosu TW

0

15

Bit

Rejestry zmiennoprzecinkowej jednostki arytmetycznej

background image

2

Stos rejestrów

Ka dy

rejestr

roboczy

mo e

przechowywa

liczb

zmiennoprzecinkow

w

formacie

(1-bitowy znak liczby, 15-bitowy wykøadnik oraz 64-bitowa mantysa). Rejestry robocze stanowi

o mioelementowy stos, którego aktualny wierzchoøek wskazywany jest przez 3-bitowy wska nik stosu

(ang. Stack Top Pointer), b d cy cz ci rejestru stanu (FPSR).

Rejestr znajduj cy si aktualnie na szczycie stosu okre lany jest przez ST (ang. Stack Top). Wszystkie

rozkazy FPU adresuj rejestry wzgl dem aktualnego szczytu stosu, a w j zyku assemblera u ywamy

nazw ST(i), gdzie i=0,...,7.

Odøo enie nowej warto ci na stos powoduje przesuni cie wska nika stosu (nowo odøo ona dana

znajduje si na szczycie), a rejestr b d cy poprzednio na wierzchoøku stosu (ST(0)) staje si rejestrem

ST(1).

Rejestr stanu stosu

Rejestr ten skøada si z o miu dwubitowych pól stanu, odpowiadaj cych poszczególnym rejestrom

roboczym FPU. Pole stanu mo e znale

si w jednym z czterech stanów:

00 – rejestr zawiera poprawn liczb ,

01 – rejestr zawiera liczb zero,

10 – rejestr zawiera symbol specjalny (np. NaN, Inf),

11 – rejestr jest pusty.

Rejestr sterowania

Rejestr ten zawiera bity steruj ce sposobem zaokr glania, dokøadno ci

oblicze

oraz bity

maskowania bø dów numerycznych.

(bit 12) IC - bit sterowania niesko czono ci :

 0 - nierozro nianie +Nan i -Nan,
 1- rozró nianie znaku niesko czono ci,

(bity 10 i 11) Round Control (RC) – bity sterowania zaokr glaniem:

 00 zaokr glanie w kierunku najbli szej liczby maszynowej (0,5 do liczby parzystej),
 01 zaokr glanie w dóø (w kierunku -niesko czono ),
 10 zaokr glanie w góre (w kierunku + niesko czono ),
 11 zaokr glanie w kierunku zera.

(bity 8-9) sterowanie precyzj (liczba bitów mantysy):

 00 - krótka rzeczywista liczba (24 bity)
 10 - 53 bity
 11 - 64 bity

background image

3

(bity 0-5) maskowanie bø dów numerycznych. Warto

1 maski oznacza podj cie przez koprocesor

próby korekcji bø du, 0 natomiast generuje sygnaø przerwania.

5 -> PM (Precision) - maska precyzji,

4 -> UM (Underflow) - maska niedomiaru,

3 -> OM (Overflow) - maska nadmiaru

2 -> ZM (Zero Divide) - maska dzielenia przez zero

1 -> DM (Denormalized Operand) - maska zdenormalizowanego operandu (bardzo maøe liczby)
5 -> IM maska niedozwolnej operacji.

Value in Hex Description

0C00

Rounding control mask

0C00

Truncate

0800

Round up

0400

Round down

0000

Round to nearest

0300

Precision control mask

0300

64-bit precision

0200

53-bit precision

0000

24-bit precision

003F

Exception mask

0001

Allow invalid numbers

0002

Allow denormals (very small numbers)

0004

Allow divide by zero

0008

Allow overflow

0010

Allow underflow

0020

Allow inexact precision

background image

4

Rejestr stanu

Rejestr stanu procesora zawiera nast puj ce których ustawienie przez FPU oznacza, e podczas

wykonywania instrukcji wyst piø okre lony bø d numeryczny. Bity te odzwierciedlaj wszystkie

bø dy, które wyst piøy od momentu ich wyzerowania. Wyzerowanie wszystkich znaczników odbywa

si rozkazem FCLEX.

0 – IE (ang. Invalid Operation Exception) znacznik bø du niedozwolonej operacji,

1 – DE (ang. Denormalized Operand Exception) znacznik bø du zdenormalizowanego argumentu,

2 – ZE (ang. Zero Divide Exception) znacznik bø du dzielenia przez zero,

3 – OE (ang. Overflow Exception) znacznik bø du nadmiaru,

4 – UE (ang. Underflow Exception) znacznik bø du niedomiaru,

5 – PE (ang. Precision Exception) znacznik bø du niedokøadno ci wyniku.

6 – SF (ang. Stack Fault) znacznik bø du stosu,

7 – ES (ang. Error Summary) suma logiczna niezamaskowanych znaczników bø dów numerycznych ,

Poza znacznikami bø dów:

8,9,10,14 – C0,C1,C2,C3 (ang. Condition Code Bits) bity rodzaju wyniku ustawiane przez instrukcje

porównania,

11,12,13 – ST (ang. Stack Top Pointer) trzybitowe pole wska nika stosu,

15 – B (ang. Busy) znacznik zaj to ci FPU. Aktualnie dubluje stan bitu ES.

W wyniku porównania dwóch argumentów (instrukcje fcom itp.) ustawiane s bity rodzaju wyniku
C0...C3 (bity o numerach 8,9,10,14) w rejestrze stanu. Flagi te mo na nast pnie przenie do
rejestru flagowego procesora (poprzez rejestr AX).

FCOM

;porównanie, ustawienie bitów C0...C3

FSTSW AX

;przesøanie FPSR do AX

SAHF

;przesøanie odpowiednich bitów z AH do EFLAGS

C4

C3

C1

C0

0

7

8

15

Bity

FPSR

C4

C3

C1

C0

0

7

8

15

Bity

AX

FSTSW AX

ZF

PF

CF

0

7

8

15

Bity

EFLAGS

SAHF

background image

5

Lista instrukcji zmiennoprzecinkowej jednostki arytmetycznej zawiera kilkadziesi t instrukcji
operuj cych na danych zmiennoprzecinkowych, caøkowitych binarnych oraz caøkowitych
dziesi tnych. Instrukcje mo na podzieli na kilka grup, a mianowicie: przesøania danych, operacje
arytmetyczne, porównania, obliczanie warto ci niektórych funkcji przest pnych oraz sterowanie.
Mnemoniki wszystkich instrukcji FPU rozpoczynaj si liter F. Je eli instrukcja dotyczy danych
zmiennoprzecinkowych, to bezpo rednio za liter F podana jest nazwa operacji (np. FADD). W
przypadku gdy operacja dotyczy danych caøkowitych, to za liter F pojawia si litera I (np. FIADD),
natomiast dla danych caøkowitych dziesi tnych – litera B (np. FBADD). Dla niektórych operacji
arytmetycznych mo na w instrukcji zmieni

kolejno

argumentów poprzez zamieszczenie w

mnemoniku instrukcji litery R (np. FSUBR, FDIVR). Je eli operacja zawiera zdj cie ze stosu wyniku
(argumentu), to mnemonik instrukcji ko czy si liter P.

1. Instrukcje przemieszczenia danych i øadowania staøych

Skøadnia instrukcji

Operacja

FLD m(32,64,80) real

ST(i)

m(32,64,80)

 ST(0)

ST(i)

 ST(0)

FILD m(16,32,64) int
FBLD m80bcd

m(16,32,64)

 ST(0)

m80

 ST(0)

FST m(32,64) real

ST(i)

FSTP m(32,64,80) real

ST(i)

ST(0)

 m(32,64)

ST(0)

 ST(i)

ST(0)

 m(32,64,80), zwolnienie ST(0)

ST(0)

 ST(i), zwolnienie ST(0)

FIST m(16,32) int
FISTP m(16,32,64) int
FBSTP m80bcd

ST(0)

 m(16,32)

ST(0)

 m(16,32,64), zwolnienie ST(0)

ST(0)

 m80, zwolnienie ST(0)

FXCH
FXCH ST(i)

ST(0)

 ST(1)

ST(0)

 ST(i)

FLDZ
FLD1
FLDPI
FLDL2T
FLDL2E
FLDLG2
FLDLN2

0

 ST(0)

1

 ST(0)

  ST(0)

log

2

10

 ST(0)

log

2

e

 ST(0)

log

10

2

 ST(0)

log

e

2

 ST(0)

background image

6

2. Dziaøania matematyczne:

Instrukcje arytmetyczne posiadaj jeden z nast puj cych formatów: format stosowy, rejestrowy,
rejestrowy ze zdj ciem ze stosu, z argumentem w pami ci.

 W formacie stosowym instrukcja arytmetyczna zapisywana jest bez argumentów, argumentami

domy lnymi s rejestry ST(0) i ST(1). Efektem wykonania instrukcji jest zast pienie dwóch

argumentów wynikiem operacji.

 Format rejestrowy charakteryzuje si wyst pieniem w rozkazie dwóch argumentów, z których

jednym jest zawsze rejestr ST(0) a drugim dowolny rejestr roboczy ST(i).

 W formacie rejestrowym ze zdj ciem ze stosu Po wykonaniu instrukcji, argument ródøowy jest

zdejmowany ze stosu.

 Instrukcja w formacie z argumentem w pami ci wykorzystuje jako argument ródøowy komórk

pami ci o zadanym adresie, natomiast argumentem docelowym jest rejestr ST(0).

Skøadnia instrukcji

Operacja

FADD równowa ny FADDP ST(1),ST(0)

FADD ST(i),ST(0)
FADD ST(0),ST(i)

FADD m(32,64) real

ST(1) + ST(0)

 ST(1), zwolnienie ST(0)

ST(i) + ST(0)

 ST(i)

ST(0) + ST(i)

 ST(0)

ST(0) + m(32,64)

 ST(0)

FADDP ST(i),ST(0)

ST(i) + ST(0)

 ST(i), zwolnienie ST(0)

FIADD m(16,32) int

ST(0) + m(16,32)

 ST(0)

FSUB równowa ny FSUPB ST(1),ST(0)
FSUB ST(i),ST(0)
FSUB ST(0),ST(i)

FSUB m(32,64) real

ST(1) – ST(0)

 ST(1), zwolnienie ST(0)

ST(i) – ST(0)

 ST(i)

ST(0) – ST(i)

 ST(0)

ST(0) – m(32,64)

 ST(0)

FSUBR
FSUBR ST(i),ST(0)
FSUBR ST(0),ST(i)

FSUBR m(32,64) real

ST(0) – ST(1)

 ST(1), zwolnienie ST(0)

ST(0) – ST(i)

 ST(i)

ST(i) – ST(0)

 ST(0)

m(32,64) – ST(0)

 ST(0)

FSUBP ST(i),ST(0)
FSUBRP ST(i),ST(0)

ST(i) – ST(0)

 ST(i), zwolnienie ST(0)

ST(0) – ST(i)

 ST(i), zwolnienie ST(0)

FISUB m(16,32) int

FISUBR m(16,32) int

ST(0) – m(16,32)

 ST(0)

m(16,32) – ST(0)

 ST(0)

FMUL równowa ny FMULP ST(1),ST(0)
FMUL ST(i),ST(0)
FMUL ST(0),ST(i)

FMUL m(32,64) real

ST(0) * ST(1)

 ST(1), zwolnienie ST(0)

ST(i) * ST(0)

 ST(i)

ST(0) * ST(i)

 ST(0)

ST(0) * m(32,64)

 ST(0)

FMULP ST(i),ST(0)

ST(i) * ST(0)

 ST(i), zwolnienie ST(0)

background image

7

FIMUL m(16,32) int

ST(0) * m(16,32)

 ST(0)

FDIV równowa ny FDIVP ST(1),ST(0)

FDIV ST(i),ST(0)
FDIV ST(0),ST(i)

FDIV m(32,64) real

ST(1) / ST(0)

 ST(1), zwolnienie ST(0)

ST(i) / ST(0)

 ST(i)

ST(0) / ST(i)

 ST(0)

ST(0) / m(32,64)

 ST(0)

FDIVR równowa ny FDIVP ST(1),ST(0)

FDIVR ST(i),ST(0)
FDIVR ST(0),ST(i)

FDIVR m(32,64) real

ST(0) / ST(1)

 ST(1), zwolnienie ST(0)

ST(0) / ST(i)

 ST(i)

ST(i) / ST(0)

 ST(0)

m(32,64) /ST(0)

 ST(0)

FDIVP ST(i),ST(0)
FDIVRP ST(i),ST(0)

ST(0) / ST(i)

 ST(i), zwolnienie ST(0)

ST(0) / ST(i)

 ST(i), zwolnienie ST(0)

FIDIV m(16,32) int

FIDIVR m(16,32) int

ST(0) / m(16,32)

 ST(0)

m(16,32) / ST(0)

 ST(0)

FSQRT

)

0

(

ST

 ST(0)

FABS

)

0

(

ST

 ST(0)

FCHS

-ST(0)

 ST(0)

FPREM

st(0) = st(0) mod st(1)

3. Komendy porównania:

Instrukcje porównania porównuj argument podany w instrukcji z liczb zapisan na wierzchoøku
stosu ST(0). Argumentem instrukcji porównania mo e by rejestr roboczy ST(i), liczba

zmiennoprzecinkowa lub staøoprzecinkowa zapisana w pami ci.
 Instrukcje FCOMP, FUCOMP i FICOMP po dokonaniu porównania zdejmuj ze stosu jeden

argument porównania ST(0), natomiast instrukcje FCOMPP i FUCOMPP porównuj liczby w
rejestrach ST(0) i ST(1), a nast pnie zdejmuj ze stosu obydwa argumenty.

 Instrukcje FUCOM, FUCOMP oraz FUCOMPP dziaøaj analogicznie do instrukcji FCOM, FCOMP,

FCOMPP, lecz nie zgøaszaj bø du w przypadku gdy jeden z argumentów ma warto NaN.

 W wyniku porównania dwóch argumentów ustawiane s bity rodzaju wyniku C0...C3 w

rejestrze stanu zmiennoprzecinkowej jednostki arytmetycznej FPSR. Po przeniesieniu zawarto ci
rejestru FPSR do rejestru AX przy pomocy instrukcji FSTSW AX, a nast pnie przepisaniu bitów
rejestru AH odpowiadaj cych znacznikom SF, ZF, AF, PF, CF do rejestru EFLAGS przy
pomocy instrukcji SAHF, mo na wykonywa instrukcje skoków warunkowych zale nie od

wyniku porównania.

 W procesorach PENTIUM wprowadzono instrukcje FCOMI, FCOMIP, FUCOMI, FUCOMIP

które porównuj operandy w rejestrach ST(0) i ST(1) i ustawiaj bezpo rednio bity rejestru
flagowego EFLAGS: ZF, PF, CF, dzi ki czemu nie ma potrzeby u ywania instrukcji FSTSW
AX, oraz FAHF.

Zastosowanie instrukcji porównania i sposób wykonywania skoków warunkowych w zale no ci od
stanu bitów rodzaju wyników przedstawiono w poni szym fragmencie programu:

background image

8

...
FCOM

;porównanie, ustawienie bitów C0...C3

FSTSW AX

;przesøanie FPSR do AX

SAHF

;przesøanie odpowiednich bitów z AH do EFLAGS

JP nieliczba

;skok przy ustawionym bicie PF

JB mniejsza

;skok je li mniejszy

JE rowna

;skok je li równy

...

wieksza:

;CF=0 i ZF=0 , ST(0) > ST(1)

...

mniejsza:

;CF=1 i ZF=0, ST(0) < ST(1)

...

rowna:

;CF=0 i ZF=1, ST(0) = ST(1)

...

nieliczba:

;PF=1, ST(0) ? ST(1)

...

Skøadnia instrukcji

Operacja

FCOM
FCOM ST(i)

FCOM m(32, 64) real

Porównanie ST(0) z ST(1)

Porównanie ST(0) z ST(i)

Porównanie ST(0) z m(32,64)

FCOMP
FCOMP ST(i)

FCOMP m(32,64) real

Porównanie ST(0) z ST(1), zwolnienie ST(0)

Porównanie ST(0) z ST(i) , zwolnienie ST(0)

Porównanie ST(0) z m(32,64), zwolnienie ST(0)

FCOMPP

Porównanie ST(0) z ST(1), zwolnienie ST(0) i ST(1)

FICOM m(16,32) int

FICOMP m(16,32) int

Porównanie ST(0) z m(16,32)

Porównanie ST(0) z m(16,32), zwolnienie ST(0)

FCOMI ST(0), ST(i)
FCOMIP ST(0), ST(i)

Porównanie ST(0) z ST(i), ustawienie ZF, PF, CF

Porównanie ST(0) z ST(i), ustawienie ZF, PF, CF

zwolnienie ST(0)

FUCOMI ST(0), ST(i)
FUCOMIP ST(0), ST(i)

Porównanie ST(0) z ST(i), ustawienie ZF, PF, CF

Porównanie ST(0) z ST(i), ustawienie ZF, PF, CF

zwolnienie ST(0)

FUCOM
FUCOM ST(i)

Porównanie ST(0) z ST(1)

Porównanie ST(0) z ST(i)

FUCOMP
FUCOMP ST(i)

Porównanie ST(0) z ST(1), zwolnienie ST(0)

Porównanie ST(0) z ST(i), zwolnienie ST(0)

FTST

Porównanie ST(0) z zerem

background image

9

4. Instrukcje trygonometryczne:

Instrukcje te søu

do wyznaczania warto ci podstawowych funkcji trygonometrycznych,

wykøadniczych i logarytmicznych.

Skøadnia instrukcji

Operacja

FSIN
FCOS
FSINCOS

SIN(ST(0))

 ST(0)

COS(ST(0))

 ST(0)

SIN(ST(0))

 ST(0); COS(ST(0))  ST(1)

FPTAN
FPATAN

TG(ST(0))

 ST(1); 1.0 ST(0)

ARCTG(ST(1)/ST(0))

 ST(0)

F2XM1
FYL2X
FYL2P1

1

2

)

0

(

ST

 ST(0)

ST(1)* log

2

ST(0)

 ST(0)

ST(1)* log

2

(ST(0)+1)

 ST(0)

5. Instrukcje kontrolne:

o

FINIT/FNINIT - inicjalizacja FPU. Litera N po F oznacza, aby nie bra po uwag
potencjalnych niezaøatwionych wyj tków.

o

FLDCW, FSTCW/FNSTCW - Load/Store control word - zapisuje 16 kontrolnych bitów do
pami ci, gdzie mo na je zmienia np. aby zmieni sposób zaokr glania liczb.

o

FSTSW/FNSTSW - zapisz do pami ci (lub rejestru AX) søowo statusu, czyli stan FPU

o

FCLEX/FNCLEX - wyczy wyj tki

o

FLDENV, FSTENV/FNSTENV - wczytaj/zapisz rodowisko (rejestry stanu, kontrolny i
kilka innych, bez rejestrów danych). Wymaga 14 albo 28 bajtów pami ci, w zale no ci od
trybu pracy procesora (rzeczywisty - DOS lub chroniony - Windows/Linux).

o

FRSTOR, FSAVE/FNSAVE - jak wy ej, tylko e z rejestrami danych. Wymaga 94 lub 108
bajtów w pami ci, zale nie od trybu procesora.

o

FINCSTP, FDECSTP - zwi ksz/zmniejsz wska nik stosu - przesu st(0) na st(7), st(1) na
st(0) itd. oraz w drug stron , odpowiednio.

o

FFREE - zwolnij podany rejestr danych

o

FNOP - no operation.

o

WAIT/FWAIT - czekaj, a FPU sko czy prac . U ywane do synchronizacji z CPU.


Wyszukiwarka

Podobne podstrony:
prog w asm podstawy
prog w asm podstawy
asm skrot prezentacji
Próg rentowności
EMP7700 ASM E B SM
Prog wyk TMM AiR 2010
techniki manipulacji politycznych prog 14
cg100 prog iii airbag restore devices support list
prog lidkakor
asm z5 psp n
Prog lab TMM 2006 2007
5ZF Prezentacja5 prog rent
µprog V1 2 bottom
Ansys LAB 6 Tutorial Excel prog Nieznany (2)
prog zima 15
Metody prog sciąga
Ćw 2 Proste prog

więcej podobnych podstron