Sunteți pe pagina 1din 3

Utilizarea unităt, ii pentru calcule ı̂n virgulă mobilă x86.

Aplicat, ie - implementarea filtrului trece-jos de ordin I

March 22, 2021

1 Introducere
În acest laborator utilizăm instruct, iuni ale unităt, ii ı̂n virgulă mobilă x86 pentru implementarea
unui filtru digital. Vom folosi asamblorul din Visual Studio 2019 ı̂mpreună cu libraria irvine http:
//asmirvine.com/gettingStartedVS2019/index.htm. Librăria va fi folosită doar pentru afis, area la
consolă a stivei FPU (Floating-Point Unit) s, i pentru afis, area cont, inutului registrelor (EAX, EBX,
ECX, etc).
Tipurile de date utilizabile impreuna cu FPU sunt mentionate in tabelul 1.

Table 1: Tipuri de date x86

tip nume echivalent ı̂n C nr. octet, i interval reprezentare


short floating point REAL4 float 32 1.18 ∗ 10−38 : 3.40 ∗ 1038
long floating point REAL8 double 64 2.23 ∗ 10−380 : 1.79 ∗ 10308
integer WORD short int 16
long integer DWORD long int 32

Numerele in virgula mobila sunt stocate dupa standardul IEEE 754. În principal există un bit
pentru semn, mai multi bit, i pentru mantisă s, i un grup de bit, i care formează exponentul.

Arhitectura registrelor FPU

Există opt registre, denumite ST(0), ST(1), ...., ST(7). ST este o alta denumire utilizată pentra a
face referire la ST (0). Registrele sunt organizate intr-o stivă, ST (0) fiind ı̂ntotdeauna valoarea din
vârful stivei. Când o nouă valoare este ı̂mpinsă pe stivă, ea devine ST (0) s, i vechea ST (0) devine ST
(1). Când varful stivei este extras vechiul ST (1) devine ST (0) s, i toate celelalte se deplasează ı̂n sus.

Instruct, iuni de ı̂ncărcare s, i stocare a datelor in stiva FPU

Următorul tabel oferă un set de instruct, iuni utilizate pentru ı̂ncărcarea s, i stocarea datelor ı̂n virgulă
mobilă

1
Table 2: Instruct, iuni de ı̂ncărcare s, i stocare a datelor in stiva FPU

Instruct, iune Descriere


FLD, FST, FSTP Încarcă numere reale ı̂n/din stiva FPU
FILD, FIST, FISTP Încarcă numere ı̂ntregi ı̂n/din stiva FPU
FXCH Interschimbă valorile registrelor
FLDZ Încarcă 0 ı̂n ST
FLD1 Încarcă 1 ı̂n ST
FLDPI Încarcă π ı̂n ST
FLDL2E Încarcă valorea lui log2 e ı̂n ST
FLD2T Încarcă valorea lui log2 10 ı̂n ST
FLDG2 Încarcă valorea lui loge 2 ı̂n ST

Instruct, iuni aritmetice cu operanzi intregi si reali

Table 3: Instruct, iuni aritmetice FPU

Instruct, iune Descriere


FADD, FADDP Adunare/Adunare si ”pop”(extragere varf stiva)
FIADD Adunare numere ı̂ntregi folosind FPU
FSUB/FSUBP Scădere/Scădere si ”pop”(extragere varf stiva)
FSUBR/FSUBRP Scădere/Scădere si ”pop”(extragere varf stiva) cu operanzi inversati
FISUB Scădere intregi
FISUBR Scădere intregi cu operanzi inversati
FDIV/FDIVP Împărt, ire/Împărt, ire si ”pop”(extragere varf stiva)
FIDIV Împărt, ire intregi
FDIVR/FDIVRP Împărt, ire/Împărt, ire si ”pop”(extragere varf stiva) cu operanzi inversati
FIDIVR Împărt, ire intregi cu operanzi inversati
FABS Reseteaza bitul de semn al lui ST(0) pentru a obtine valorea absoluta.
FMUL Multiplicare cu operand de pe stiva

Instruct, iuni aritmetice ce implementeaza funct, ii matematice s, i instruct, iuni pentru


comparat, ii

Table 4: Instruct, iuni ce implementează funct, ii matematice

Instruct, iune Descriere


FSIN Calculează sinus
FCOS Calculează cosinus
FSINCOS Calculează sinus si cosinus simultan
FPTAN Calculează tangenta
FPATAN Calculează arctangenta
FYL2X Calculează y * log2x
FYL2XP1 Calculează y * log2(x + 1)
F2XM1 Calculează (2x) − 1

Table 5: Instruct, iuni pentru comparat, ii

Instruct, iune Descriere


FCOM Compara reali
FCOMP Compara reali si extrage varful stivei (pop)
FICOM Compara intregi
FTST Compara intregi si extrage varful stivei (pop)

2
2 Probleme propuse
1. Să se implementeze un filtru trece jos discret de ordin I folosind unitatea flotantă FPU. Filtrul va
fi discretizat prin metoda dreptunghiului ı̂nainte (a se vedea observat, ia a). Perioada de es, antionare
este Ts = 10−5 [s]. Semnalul de intrare va fi o treaptă de amplitudine u = 10. Factorul de amplificare
al filtrului s, i constanta de timp sunt Kf = 1 s, i Tf = 10−4 [s]. Funct, ia de transfer a filtrului este
definită astfel:
Kf Y (s)
Gf (s) = = (1)
Tf s + 1 U (s)
unde Y s, i U sunt ies, irea, respectiv intrarea filtrului.
Observat, ii:

a) Aproximarea ariei prin metoda dreptunghiului ı̂nainte conduce la substitut, ia variabilei s din
domeniul laplace cu variabila transformatei Z:
1 − z −1
s← (2)
Ts
Din (1) si (2) rezulta că
Kf Kf Ts Y (z −1 )
G(z −1 ) = 1−z −1
= = (3)
Ts Tf + 1 Tf − Tf z −1 + Ts U (z −1 )
b) Din raportul ecuat, iilor (3) se obt, ine ecuat, ia cu diferent, e:
Tf Kf Ts
y[k] = y[k − 1] + u[k] (4)
Tf + Ts Tf + Ts
Se va nota:
Ts
a= (5)
Ts + Tf
iar raportul Tf /(Tf + Ts ) devine
Tf
1−a= (6)
Tf + Ts
As, adar, din (4) cu notat, iile (5) s, i (6) rezultă ecuat, ia cu diferent, e ce va fi implementată ı̂n asamblor:

y[k] = (1 − a)y[k − 1] + Kf au[k] (7)

Figure 1: Model program

S-ar putea să vă placă și