37
Arhitektura računara GLAVA 3 Napredne tehnike u računarskim arhitekturama imarac Igor, 2006

Arhitektura računara

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Arhitektura računara

Arhitektura računaraGLAVA 3

Napredne tehnike u računarskim arhitekturama

Timarac Igor, 2006

Page 2: Arhitektura računara

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

Page 3: Arhitektura računara

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

Page 4: Arhitektura računara

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

Page 5: Arhitektura računara

3.1.1 Arhitektura numeričkog koprocesora

Bit Naziv Opis

B busy Pokazuje da li je koprocesor zauzet izvršavanjem nekog taska može se provjeravati testiranjem statusne informacije ili korištenjem FWAIT instrukcije.Noviji koprocesori se automatski sinhronizuju s procesorom, pa nije potrebno testirati B bit

C3-C0 condition code

TOP Top of stack Pokazuje koji je registar steka adresiran kao top of stacknormalno (nakon resetovanja) to je registar 0

C3-C0

Page 6: Arhitektura računara

3.1.1 Arhitektura numeričkog koprocesora

Bit Naziv Opis

ES error summary setovan ako je setovan bilo koji od bita koji pokazuju neku od grešaka (PE, UE, OE, ZE, DE, IE)

PE precision error pokazuje da rezultat ili operandi premašuju selektovanu preciznost

UE underflow error pokazuje da je nenulti rezultat premalen da bi se prikazao u traženoj tačnosti

OE overflow error pokazuje da je rezultat prevelik da bi se prikazaoako je ova greška maskirana koprocesor generiše beskonačnost

ZE zero error pokazuje da je došlo do dijeljenja s nulom

DE denormalized error

pokazuje da je bar jedan od operanada denormalizovan

IE invalid error pokazuje overflow ili underflow steka, neodređenost izraza ili korištenje NAN (nenumeričkog) podatka kao operanda, npr. vađenje drugog korijena iz negativnog broja

Page 7: Arhitektura računara

3.1.1 Arhitektura numeričkog koprocesora

Postoje 2 načina da se testiraju biti u statusnom registru:

1. 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

Page 8: Arhitektura računara

3.1.1 Arhitektura numeričkog koprocesora

Postoje 2 načina da se testiraju biti u statusnom registru:

2. 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

Page 9: Arhitektura računara

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

Page 10: Arhitektura računara

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

Page 11: Arhitektura računara

3.1.1 Arhitektura numeričkog koprocesora

Tag registar

Pokazuje status svakog od registara internog koprocesorskog steka.

Page 12: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 13: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 14: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora.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

Page 15: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 16: Arhitektura računara

Aritmetičke instrukcije

Memorija Uzima podatak sa vrha steka i podatak iz memorije

Primjer:

FADD BROJ

3.1.2 Instrukcijski set numeričkog koprocesora

Page 17: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 18: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 19: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 20: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 21: Arhitektura računara

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 na ST(1)

FABS ; podatak na vrhu steka mijenja njegovom apsolutnom vrijednošću

FCHS ; mijenja znak podatka na vrhu steka (pozitivan u negativan i obrnuto)

3.1.2 Instrukcijski set numeričkog koprocesora

Page 22: Arhitektura računara

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)

3.1.2 Instrukcijski set numeričkog koprocesora

Page 23: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Funkcija Identitet

10Y 2Ylog2(10)

eY 2Ylog2(e)

XY 2Ylog2(X)

log210, log2e su ugrađene konstante

Page 24: Arhitektura računara

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)

3.1.2 Instrukcijski set numeričkog koprocesora

Page 25: Arhitektura računara

Operacije s konstantama

Instrukcije koje na stek stavljaju odgovarajuću konstantu

3.1.2 Instrukcijski set numeričkog koprocesora

Instrukcija Konstanta koja se stavlja na ST

FLDZ +0.0

FLD1 +1.0

FLDPI π

FLDL2T log210

FLDL2E log2e

FLDLG2 log102

FLDLN2 loge2

Page 26: Arhitektura računara

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

3.1.2 Instrukcijski set numeričkog koprocesora

Page 27: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

Page 28: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end3.0 ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 29: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end9.0 ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 30: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end3.141592653589

9.0

ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 31: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end28.27433388230 ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 32: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

endST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 33: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end3.0 ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 34: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end6.0 ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 35: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end3.141592653589

6.0

ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 36: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

end18.84955592153 ST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3

Page 37: Arhitektura računara

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.1.2 Instrukcijski set numeričkog koprocesora.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

endST

ST(1)

ST(2)

ST(3)

ST(4)

ST(5)

ST(6)

ST(7)

Korak: SI = 3