1 / 37

Arhitektura računara

Arhitektura računara. GLAVA 3 Napredne tehnike u računarskim arhitekturama. Timarac Igor, 2006. 3.1 Numerički koprocesor. Razlikujemo dva tipa implementacije numeričkih koprocesora u računarskim sistemima i to: Pridodati (attached) koprocesor

Download Presentation

Arhitektura računara

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Arhitektura računara GLAVA 3 Napredne tehnike u računarskim arhitekturama Timarac Igor, 2006

  2. 3.1 Numerički koprocesor • Razlikujemo dva tipa implementacije numeričkih koprocesora u računarskim sistemima i to: • Pridodati (attached) koprocesor • Koprocesor je realizovan u zasebnom integrisanom kolu koje je pridodato procesoru • Karakteristično za starije Intelove procesore • (8086+8087, 80286+80287, 80386SX+80387SX, 80386DX+80387DX, 80486SX+80487SX) • Ugrađeni (built-in) koprocesor • koprocesor je integrisan (ugrađen) u CPU • karakteristično za 80486DX i Pentium procesore

  3. 3.1.1 Arhitektura numeričkog koprocesora • Čine ga dvije sekcije: • Upravljačka jedinica (Control Unit) • Numerička izvršna jedinica (Numeric Execution Unit) • Posjeduje 8-registarski stek • Registri steka su 80-bitni i u njima se drže operandi i rezultati

  4. 3.1.1 Arhitektura numeričkog koprocesora • Statusni registar • Sadrži statusnu informaciju o koprocesoru • Statusnom registru pristupa se instrukcijom FSTSW, koja kopira sadržaj statusnog registra u odgovarajuću riječ u memoriji, odnosno FSTSW AX instrukcijom (80287 i noviji), koja statusnu informaciju koprocesora direktno upisuje u AX registar procesora • Učitavanjem statusne informacije u AX lako se testira stanje pojedinih statusnih bita • Struktura statusnog registra

  5. C3-C0 3.1.1 Arhitektura numeričkog koprocesora

  6. 3.1.1 Arhitektura numeričkog koprocesora

  7. 3.1.1 Arhitektura numeričkog koprocesora • Postoje 2 načina da se testiraju biti u statusnom registru: • Učitati statusnu informaciju u AX pomoću FSTSW instrukcije, a zatim pomoću TEST instrukcije testirati odgovarajući bit • Primjer: FDIV BROJ ; dijeli podatak na vrhu steka s podatkom BROJ FSTSW AX ; učitava statusnu informaciju u AX TEST AX,4 ; testira ZE bit (bit 2 statusnog registra) JNZ GRESKA ; ako ima greška (bit je setovan) skoči • Primjer: FSQRT ; traži drugi korijen podatka na vrhu steka FSTSW AX ; učitava statusnu informaciju u AX TEST AX,1 ; testira IE bit (bit 0 statusnog registra) JNZ GRESKA ; ako ima greška (bit je setovan) skoči

  8. 3.1.1 Arhitektura numeričkog koprocesora • Postoje 2 načina da se testiraju biti u statusnom registru: • Učitati statusnu informaciju u AX pomoću FSTSW instrukcije, a zatim pomoću SAHF instrukcije izvršiti prenos viših 8 bita (AH) u registar stanja (flegove), a potom koristiti instrukcije uslovnog skoka (JE, JB ...) • Primjer: FCOM BROJ ; poredi podatak na vrhu steka s BROJem FSTSW AX ; učitava statusnu informaciju u AX SAHF ; kopira AH u flegove JE JEDNAKO ; skače zavisno od stanja JB MANJE JA VECE

  9. 3.1.1 Arhitektura numeričkog koprocesora NOVO • P6 familija mikroprocesora ima sljedeće instrukcije: • FCOMI • FCOMIP • One direktno utiču na EFLAGS registar, tako da nema potrebe za FSTSW i SAHF instrukcijama u prethodnom slučaju: FCOMI BROJ ; poredi podatak na vrhu steka s BROJem JE JEDNAKO ; skače zavisno od stanja JB MANJE JA VECE

  10. 3.1.1 Arhitektura numeričkog koprocesora • Kontrolni registar • Selektuje preciznost, način zaokruživanja i kontrolu beskonačnosti • Upravljačka informacija upisuje se u kontrolni registar pomoću FLDCW instrukcije, a registar se očitava pomoću instrukcije FSTCW

  11. 3.1.1 Arhitektura numeričkog koprocesora • Tag registar • Pokazuje status svakog od registara internog koprocesorskog steka.

  12. 3.1.2 Instrukcijski set numeričkog koprocesora • Instrukcije za prenos podataka FLOATING POINT • FLD Učitava floating point podatak iz memorije i smješta ga na vrh internog steka Nakon toga pokazivač vrha steka (ST) uvećava se za 1 Podatak može da se učita iz neke memorijske lokacije ili nekog od registara koprocesora FLD ST(2) ; kopira sadržaj reg 2 steka na vrh steka FLD BROJ ; kopira sadržaj lokacije BROJ na vrh steka • FST Kopira podatak sa vrha steka u memoriju ili naznačeni registar koproc. • FSTP Skida podatak sa vrha steka i upisuje ga u memoriju ili naznačeni registar koprocesora • FXCH vrši zamjenu sadržaja datog registra i vrha steka FXCH ST(3) ; mijenja sadržaj vrha steka i registra 3

  13. 3.1.2 Instrukcijski set numeričkog koprocesora • Instrukcije za prenos podataka INTEGER • FILD Učitava integer podatak iz memorije i smješta ga na vrh internog steka • FIST Kopira podatak sa vrha steka u memoriju • FISTP Skida podatak sa vrha steka i upisuje ga u memoriju

  14. .model small .286 .287 .data broj1 dd 30.0 ; obična preciznost broj2 dq 100.25 ; dvostruka prec. broj3 dt 32.4567 ; proširena preciznost broj4 dw 10 ; 16-bitni integer broj5 dd 20 ; 32-bitni integer broj6 dq 30 ; 64-bitni integer broj7 dt 30 ; bcd podatak .code .startup fld broj1 fld broj2 fld broj3 fild broj4 fild broj5 fild broj6 fbld broj7 .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Instrukcije za prenos podataka BCD • FBLD Učitava integer podatak iz memorije i smješta ga na vrh internog steka • FBST Kopira podatak sa vrha steka u memoriju • FBSTP Skida podatak sa vrha steka i upisuje ga u memoriju

  15. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije • Oblici adresiranja u aritmetičkim instrukcijama: • Stek • Uzima podatak sa vrha steka, tj ST (izvorni operand) i podatak neposredno ispod vrha steka, tj. ST(1) (odredišni operand) Primjer: FADD ; skida podatak sa vrha steka, sabira ga sa sljedećim ; i umjesto njega upisuje zbir (sada je zbir na vrhu steka) • Registarsko • Uzima podatak sa vrha steka i podatak iz nekog od registara steka ST(n), n=0..7 Primjer: FADD ST, ST(2) FADD ST(2), ST

  16. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije • Memorija • Uzima podatak sa vrha steka i podatak iz memorije Primjer: FADD BROJ

  17. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije SABIRANJE FADD ; ST(1) + ST => ST(1) i skida ST sa steka FADD ST(i), ST ; ST(i) + ST => ST(i) FADDP ST(i), ST ; ST(i) + ST => ST(i) i skida ST sa steka FADD ST, ST(i) ; ST + ST(i) => ST FADD fp_mem ; ST + fp_mem (adresa FP podatka) => ST FIADD int_mem ; ST + int_mem (adresa Integer podatka) => ST

  18. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije ODUZIMANJE FSUB ; ST(1) - ST => ST(1) i skida ST sa steka FSUB ST(i), ST ; ST(i) - ST => ST(i) FSUBP ST(i), ST ; ST(i) - ST => ST(i) i skida ST sa steka FSUB ST, ST(i) ; ST - ST(i) => ST FSUB fp_mem ; ST - fp_mem (adresa FP podatka) => ST FISUB int_mem ; ST - int_mem (adresa Integer podatka) => ST FSUBR ; ST - ST(1) => ST(1) i skida ST sa steka FSUBR ST(i), ST ; ST - ST(i) => ST(i) FSUBRP ST(i), ST ; ST - ST(i) => ST(i) i skida ST sa steka FSUBR ST, ST(i) ; ST(i)- ST => ST FSUBR fp_mem ; fp_mem (adresa FP podatka) - ST => ST FISUB int_mem ; int_mem (adresa Integer podatka) - ST=> ST

  19. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije MNOŽENJE FMUL ; ST(1) * ST => ST(1) i skida ST sa steka FMUL ST(i), ST ; ST(i) * ST => ST(i) FMULP ST(i), ST ; ST(i) * ST => ST(i) i skida ST sa steka FMUL ST, ST(i) ; ST * ST(i) => ST FMUL fp_mem ; ST * fp_mem (adresa FP podatka) => ST FIMUL int_mem ; ST * int_mem (adresa Integer podatka) => ST

  20. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije DIJELJENJE FDIV ; ST(1) / ST => ST(1) i skida ST sa steka FDIV ST(i), ST ; ST(i) / ST => ST(i) FDIVP ST(i), ST ; ST(i) / ST => ST(i) i skida ST sa steka FDIV ST, ST(i) ; ST / ST(i) => ST FDIV fp_mem ; ST / fp_mem (adresa FP podatka) => ST FIDIV int_mem ; ST / int_mem (adresa Integer podatka) => ST FDIVR ; ST / ST(1) => ST(1) i skida ST sa steka FDIVR ST(i), ST ; ST / ST(i) => ST(i) FDIVRP ST(i), ST ; ST / ST(i) => ST(i) i skida ST sa steka FDIVR ST, ST(i) ; ST(i)/ ST => ST FDIVR fp_mem ; fp_mem (adresa FP podatka) / ST => ST FIDIV int_mem ; int_mem (adresa Integer podatka) / ST=> ST

  21. 3.1.2 Instrukcijski set numeričkog koprocesora • Aritmetičke instrukcije FSQRT ; podatak na vrhu steka mijenja njegovim drugim korijenom FSCALE ; dodaje ST(1) (posmatran kao integer) eksponentu podatka na ; vrhu steka (što je ekvivalentno brzom množenju ili dijeljenju ; nekim stepenom broja 2) FPREM ; dijeli ST po modulu ST(1) i ostatak ostavlja na ST(1), što je novi ST FRNDINT ; zaokružuje vrh steka na integer FXTRACT ; rastavlja floating point podatak sa vrha steka na eksponent i mantisu, ; mantisa je na vrhu, a nemodifikovani eksponent naST(1) FABS ; podatak na vrhu steka mijenja njegovom apsolutnom vrijednošću FCHS ; mijenja znak podatka na vrhu steka (pozitivan u negativan i obrnuto)

  22. 3.1.2 Instrukcijski set numeričkog koprocesora • Instrukcije poređenja • Porede podatak sa vrha steka sa drugim elementom, a rezultat se vraća u statusnom registru pomoću bitova C3-C0 FCOM ; poredi vrh steka (ST) s nekom mem. lokacijom ili registrom. Ako se ; ne referencira poseban podatak uzima se ST(1) FCOMP ; isto kao i FCOM, samo što skida podatak sa steka FCOMPP ; isto kao i FCOM, samo što skida dva podatka sa steka FICOM ; poredi ST sa integerom iz memorije FICOMP ; isto kao i FICOM, samo što skida podatak sa steka FTST ; provjerava ST u odnosu na nulu FXAM ; provjerava ST (postavlja C3-C0 u statusnom registru u zavisnosti od ; vrijednosti ST)

  23. 3.1.2 Instrukcijski set numeričkog koprocesora • Transcendentalne operacije FTAN ; parcijalni tangens Y/X = tg θ ; ulaz:ST = θ (u radijanima) ; rezultat: ST = X, ST(1) = Y FPATAN ; parcijalni arkus tangens θ= arctg(Y/X) ; ulaz: ST = X, ST(1) = Y (0<=Y<X< θ) ; rezultat: skida X, a umjesto Y upisuje rezultat θ F2XM1 ; 2X-1 ; ulaz: ST = X ; rezultat: ST = 2X-1 log210, log2e su ugrađene konstante

  24. 3.1.2 Instrukcijski set numeričkog koprocesora • Transcendentalne operacije FSIN ; mijenja ugao na vrhu steka θ (u radijanima) sa sinθ FCOS ; mijenja ugao na vrhu steka θ (u radijanima) sa cosθ FSINCOS ; traži sinθ i cosθ ugla θ sa vrha steka (u radijanima) i ; ostavlja ST = sinθ i ST(1) = cosθ FYL2X; Ylog2X ; ulaz: ST = X, ST(1) = Y ; rezultat: skida X, a umjesto Y upisuje Ylog2X FYL2XP1 ; Ylog2(X+1) ; ulaz: ST = X, ST(1) = Y ; rezultat: skida X, a umjesto Y upisuje Ylog2(X+1)

  25. 3.1.2 Instrukcijski set numeričkog koprocesora • Operacije s konstantama Instrukcije koje na stek stavljaju odgovarajuću konstantu

  26. 3.1.2 Instrukcijski set numeričkog koprocesora • Upravljačke instrukcije FINIT/FNINIT ; resetuje i inicijalizuje koprocesor FLDCW ; puni kontrolni registar odgovarajućom upravljačkom ; informacijom adresiranom datim operandom FSTCW/FNSTCW ; pohranjuje kontrolni registar u datu memorijsku ; lokaciju tipa WORD FSTSW AX/FNSTSW AX ; kopira sadržaj statusnog registra u AX registar FINCST ; inkrementira ST FDECST ; dekrementira ST FNOP ; No OPeration za koprocesor FWAIT ; procesor čeka da koprocesor završi operaciju ; ovu instrukciju treba koristiti prije pristupa nekoj ; memorijskoj lokaciji od strane procesora koju koristi

  27. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI.

  28. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 3.0 ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  29. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 9.0 ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  30. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 3.141592653589 ST Korak: SI = 3 9.0 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  31. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 28.27433388230 ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  32. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  33. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 3.0 ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  34. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 6.0 ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  35. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 3.141592653589 ST Korak: SI = 3 6.0 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  36. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. 18.84955592153 ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

  37. .model small .286 .287 .data rad dd 1.0, 2.0, 3.0, 4.0, 5.0 povrsine dd 5 dup (?) obimi dd 5 dup (?) dva dd 2.0 .code .startup mov si,0 mov cx,5 petlja: fld rad[si] ; st <= r fmul st,st(0) ; st <= r * r fldpi ; st(1) <= r*r, st <= pi fmul ; st <= pi * r*r ; pohrani povrsinu i skini sa steka: fstp povrsine[si] fld rad[si] ; st <= r fmul dva ; st <= 2*r fldpi ; st(1) <= 2*r, st <= pi fmul ; st <= pi * 2*r ; pohrani obim i skini sa steka: fstp obimi[si] add si,4 loop petlja .exit end 3.1.2 Instrukcijski set numeričkog koprocesora • Primjer: Napisati asemblerski program koji računa površine i obime krugova čiji se radijusi nalaze u intervalu [1..5] s korakom 1, a rezultate smješta u nizove POVRSINE i OBIMI. ST Korak: SI = 3 ST(1) ST(2) ST(3) ST(4) ST(5) ST(6) ST(7)

More Related