You are on page 1of 62

BM212 Dersi

28 May s 2010

Performans Yanl Dü ünce ve Tuzaklar
‡

Yanl dü ünce ve tuzaklar ile ilgili bir bölümün amac , di er tüm bölümlerde oldu u gibi bir tak m yanl bilgileri düzeltmektir. Bir yanl dü ünceyi anlat rken ters bir örnek veririz. Yanl lar genellikle k s tl bir içerik için geçerli olan kurallar n genellenmesi ile olu ur. Cost/performans yanl dü ünceleri ve tuzaklar birçok bilgisayar tasar mc s n tuza a dü ürmektedir. lk olarak, bir çok tasar mc y tuza a dü üren bir yanl tan ba layaca z.

‡

‡

Tuzak
‡

Bir bilgisayar n yaln zca bir cephesinde meydana gelen geli me, bilgisayar n performans n bu cephenin performans n n toplam performansa oran kadar geli tirir. Bu yanl dü ünceye hem yaz l m hem donan m tasar mc lar kap labilir. Basit bir örnek vermek gerekirse: bir program n çal mas n n 100 sn sürdü ünü ve 80 saniyesinin çarpma i lemi ile geçti ini dü ünelim. Bu program n 5 kat daha h zl çal mas n istiyorsak çarpma i leminin h z n ne kadar artt rmam z gerekmektedir? Bir iyile tirme sonras nda bir bilgisayar program n n çal ma süresini a a da gösterilen ve Amdahl kural olarak bilinen denklem ile hesaplayabiliriz.

‡

‡

Garip bir biçimde. Amdahl kural . Donan m tasar m ndaki ortak bir tema da Amdahl kural n n tabi sonucu olarak s k kullan lan durumu daha h zl yap mant d r. geli tirilmek istenen özelli in kullan m miktar ile s n rl d r. Performans art . Bir fonksiyonun ne kadar sürdü ünü ve h zlanma potansiyelini biliyorsak performans art için Amdahl kural n kullanabiliriz. . paralel i lemci say s n s n rlamada da kullan lmaktad r. ± 20 saniye=80 saniye/n + 20 saniye ± 0=80 saniye/n Buradan u sonuca var r z: toplam i in %80i çarpma i lemi ise. s k kullan lan durumlar daha basittir ve geli tirilmeleri de daha kolayd r. çarpma i leminin performans n artt rarak toplam performans 5 kat artt rmak mümkün de ildir.Tuzak (dvm) ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ Bu problem için: Geli tirme sonras ndaki çal ma zaman = 80 saniye/n + (100-80 saniye) Performans art n n 5 kat olmas n istedi imiz için çal ma zaman n 20 saniye al r z. Daha s k kullan lan durumlar n daha seyrek kullan lan durumlara göre daha h zl olmas performans artt r r.

%50. %10 çal ma ve bo ta kalma durumlar nda tükettikleri güçleri göstermektedir.Yanl Dü ünce ‡ ‡ ‡ Az kullan lan bilgisayarlar daha az güç harcar. Luiz Barroso ve Urs Hölzle. E er gelecekteki sunucular n %10 yük alt nda %10 güç harcamalar n sa layabilirsek büyük datacenter lar n daha az elektrik paras ödemelerini ve karbondioksit sal n m n n azalt lmas n sa layabiliriz. Yaln zca %1 lik gibi bir sürede CPU lar %100 yük ile çal r. Örne in Google sunucular ndaki CPU kullan m n n ço u %10 ile %50 aras ndad r. 3 sunucunun SPECPower sonuçlar . sunucular n yüklerinin de i ken olmas na ra men kulland klar enerji kullanabilecekleri toplam enerjinin büyük bir bölümü oldu u için donan m n yeniden tasarlanarak orant l enerji kullanan bilgisayarlar olu turulmas gerekti ini tart m lard r. A a daki ekilde sunucular n %100. Güç etkinli i dü ük kullan mlarda önemlidir çünkü sunucu yükü de i kenlik gösterir. ‡ ekil.

Çal t rma zaman n denklemde yerine koyarsak MIPS ile saat h z ve CPI aras ndaki ili kiyi görebiliriz. . komutlar n ne i yapt klar n hesaba katmaz. e er bir program daha fazla komut çal t r yorsa ancak komutlar daha h zl ysa. Bir bilgisayar için yaln zca bir MIPS de eri yoktur. Performans tahmininde yaln zca clock rate. Birincisi. Çal ma zaman n belirlemek için bir alternatif MIPS dir (million instructions per second). Bir di er genel hata da performans kar la t rmas nda bu 3 faktörden ikisini kullanmakt r. kincisi.Tuzak ‡ ‡ Performans denkleminin bir alt kümesini performans ölçütü olarak kullanmak. komut say s ve CPI gibi parametreleri kullanmak yanl sonuçlar meydana getirir. ‡ Son olarak ve en önemlisi. Bu nedenle farkl komut kümeleri kullanan bilgisayarlar MIPS ile kar la t ramay z. Belirli bir program için MIPS basit olarak: ‡ ‡ Daha h zl bilgisayarlar daha yüksek MIPS de erine sahiptirler. MIPS komut çal t rma oran n belirlerken. ayn bilgisayardaki farkl programlarda MIPS farkl sonuçlar verir. MIPS i bilgisayarlar k yaslamada kullan rken 3 problem ile kar la l r. MIPS gerçek performanstan çok farkl ç kabilir.

Beklide bu soyutlamaya en güzel örnek. Donan m ve yaz l m tasar mc lar bilgisayar sistemlerini bir hiyerar i içerisinde olu tururlar. Bu yöntem. ‡ unu unutmamak gerekir: bireysel faktörler performans belirlemekte ölçüt de illerdir. Bunun dezavantaj . arayüzdeki yenilikçi de i ikliklerin mimari taraf ndan k s tlanmas d r. günümüz bilgisayar sistemlerini anlamay kolayla t r r ancak bu demek de ildir ki tasar mc lar yaln zca belirli bir katmanda s n rl kals nlar. Bu ba lamda bilgisayar tasar mc lar n n ve programc lar n anlamalar gereken konular vard r. donan m ile dü ük seviyeli yaz l m aras nda arayüz görevi gören komut kümesi mimarisidir.Sonuç ‡ ‡ ‡ Gelecekteki bilgisayarlar n Cost/performans oranlar n günümüzdeki bilgisayarlardan ne kadar daha iyi olacaklar n tahmin etmek güçtür. Bu faktörlerin bir arada de erlendirilmesi ile güvenilir bir ölçüm yap labilir. Hiyerar ide yer alan her katman kendi detaylar n di er katmanlardan gizler. . Gerçek programlar n performanslar n belirlemek için güvenilir bir yöntem vard r.

Komutlar n Bilgisayarda Gösterilmesi ‡ Komutlar bilgisayarda yüksek ve dü ük voltajl elektrik sinyalleri olarak saklan r ve say lar ile gösterilebilir. Komutlar register lar kulland klar ndan register isimlerinin say lar ile gösterilmesi gerekir. $s0-$s7 aras register lar 16-23 aras say lar ile. Komutun her bir parças n n ayr bir de eri olabilir ve bu de erler yan yana getirilerek komut olu turulur. MIPS assembly dilinde. ‡ . ± Bu nedenle örne in $s0 demek 16 numaral register demektir. $t0-$t7 aras register lar 8-15 aras say lar ile gösterilir.

Bir MIPS Assembly Komutunu Makine Komutuna Çevirmek ‡ ‡ ‡ Sembolik olarak a a daki ekilde gösterilen komutu gerçek MIPS dilinde gösterelim. Bu komut ayn zamanda binary gösterimle de gösterilebilir: . kinci alan toplanacak ilk operand n say sal kar l n veriyor (17=$s1). Decimal gösterim: ‡ ‡ Komuttaki bu segmentlerin her biri alan (field) olarak isimlendirilir. $s1. Bu komut için be inci alan kullan lmayan aland r ve 0 a set edilmi tir. $s2 lk önce decimal daha sonra binary gösterim ile gösterelim. Burada 0-32 ile gösterilen ilk ve son alanlar komutun toplama komutu oldu unu belirtiyor. ± add $t0. Sonuçta komut $s1 ile $s2 register lar ndaki de erleri toplay p sonucu $t0 register na yaz yor. Üçüncü alan ise toplanacak ikinci operand gösteriyor (18=$s2). Dördüncü alan toplam tutacak olan register gösteriyor (8=$t0).

Assembly dilinden ay rmak için komutun nümerik versiyonunu makine dili olarak isimlendiririz ve komutlar dizisine de makine kodu deriz. Hexadecimal-binary dönü üm tablosu. Komut toplamda 32 bitten olu ur.Bir MIPS Assembly Komutunu Makine Komutuna Çevirmek (dvm) ‡ ‡ ‡ Komutun bu ekilde gösterime komut format denilir. Binary say lar n karma as ndan kurtulmak için 16 l say sistemini kullan r z. MIPS de bütün komutlar 32 bit uzunlu undad r. ‡ ekil. . 16 l say lar n binary say lara ve binary say lar n hexadecimal say lara dönü türülmesi oldukça kolayd r.

Örnek .

opcode olarak isimlendirilir rs: Birinci kaynak register operand rt: kinci kaynak register operand rd: Hedef register operand .MIPS Alanlar op: Komutun temel i lemi. örne in load word komutu iki register ve bir sabit belirlemelidir. 25 veya 32 ile s n rlanmak zorunda kalacakt r. Bu sabit genellikle dizilerdeki elemanlar seçmek veya veri yap lar n seçmek için kullan l r ve 32 den genellikle daha büyüktür. Dolay s yla bu 5 bitlik alan kullan l olmaz. E er adres yukar daki 5 bitlik alanlardan birisi olursa o zaman load word komutundaki sabit. ‡ ‡ ‡ ‡ ‡ ‡ . lem sonucu bu register a aktar l r shamt: Kayd rma miktar (Kullan lmayacak ve 0 de erini alacakt r) funct: Fonksyion alan . Function code olarak isimlendirilir ve op alan ndaki i lem için belirli bir de i keni seçer E er komut burada gösterildi i gibi 32 bitten daha fazla alan gerektirirse problem olur.

Adres alan na da 32 de eri yerle tirilir.Tasar m ‡ Komutlar n ayn uzunlukta olmas ile ayn formatta olmas aras nda çat ma olu ur. rt alan na 8 ($t0 için) de eri yerle tirilir. Örne in. ‡ ‡ 16-bit adres alan sayesinde load word komutu taban register rs nin ±215 aras ndaki (32. ± lw $t0. Rformat olarak da isimlendirilir. hedef register olarak kullan ld . . Bu nedenle MIPS tasar mc lar bütün komutlar n ayn uzunlukta fakat farkl formatlarda olmas na karar vermi lerdir. Burada 19 ($s3 için) de eri rs alan na yerle tirilir. kinci bir format tipi de I-tipi (immediate) veya I-format olarak isimlendirilir. Benzer ekilde immediate ekleme sabiti ±215 den büyük olamaz. R-tipi (register) komutlarda kullan lan format yukar daki gibidir. Burada rt alan n n anlam de i ti.768 bytes) alan n adresleyebilecektir. 32($s3) # Temporary register $t0 a A[8] de eri aktar l r.

‡ Burada reg 0-31 aras nda bir say d r. add ve sub komutlar n n op alan nda ayn de erler vard r. burada R-tipi oldu una karar verilen komutun ne i lem yapaca funct alan na göre belirlenir. Örne in R-tipi ve I-tipi formatlarda ilk üç alan ayn büyüklü e ve isimlere sahiptir. I-tipinin dördüncü alan n n uzunlu u R-tipinin geri kalan üç alan n n toplam na e ittir.Tasar m (dvm) ‡ ‡ Donan m karma as ndan kurtulmak için formatlar benzer tutmu lard r. address 16 bitliktir. Formatlar ilk alanlar ndaki de erlere göre ayr lmaktad rlar. n.a (not applicable) anlam o tipte o alanalr n olmad n gösterir. op alan na göre format n I veya R tipi oldu una karar verilir. .

lemini yapmak için yaz lacak olan komutlar: ‡ Bu üç komut için MIPS makine dili ne olmal d r? . ± A[300]=h+A[300]. $s2 ise h de erini göstersin.MIPS Assembly Dilini Makine Diline Çevirmek ‡ ‡ $t1 A dizisini.

çünkü adresler 4 byte artarlar. 1200ten=0000 0100 1011 0000 oldu undan ikili gösterimde: two ‡ lk ve son komutlardaki binary benzerlik oldukça fazlad r ve donan m karma as ndan kurtulmam z sa lar. .MIPS Assembly Dilini Makine Diline Çevirmek (dvm) ‡ Decimal say lar kullanarak gösterirsek: ‡ 300 de eri 4 ile çarp l r.

MIPS de iki adet komut tipi vard r. . lk 16 bit ikisinde de ayn d r. R ve I.MIPS Komut Tipleri ‡ ekil.

bir operand her zaman 0 al n r. ancak daha sonradan bit alanlar ve hatta tek tek bitler üzerinde i lemler yapman n daha kullan l oldu u görüldü. ‡ MIPS mimarisinde NOT i lemi NOR kullan larak yap l r.Mant ksal lemler ‡ lk bilgisayarlar word üzerinde i lemler yap yorlard . .

rs alan kullan lmad için 0 de erini alm t r. . ‡ Sola 4 kere kayd r rsak: ‡ MIPS de kayd rma komutlar sll (shift left logical) ve srl (shift right logical) d r. Örne in bizim örne imizde 4 kere sola kayd rarak 24 (16) ile çarpm oluyoruz. rd hedef register bu örnek için 10 ($t2) de erini. Sola kayd rma i lemi ayn zamanda çarpma i lemi yapmam z sa lar. ‡ Kayd rma i lemlerinde R-format ndaki shamt alan kullan l r. Sonuç 9x16=144 oluyor. ‡ ‡ sll komutu için op ve funct alanlar 0 d r. Sola i bit kayd rmak demek 2i ile çarpmak demektir. rt alan 16($s0) ve shamt alan 4 de erini alm t r.Shift ‡ Shift i lemi word deki bütün bitleri sola veya sa a hareket ettirir ve bo kalan alan 0 ile doldurur.

$t1. ± $t2: 0000 0000 0000 0000 0000 1101 1100 0000two ± $t1: 0000 0000 0000 0000 0011 1100 0000 0000two and $t0.AND ‡ Di er bir mant ksal i lem AND dir. $t2 # reg $t0=reg $t1 & reg $t2 ± $t0: 0000 0000 0000 0000 0000 1100 0000 0000two ‡ .

± $t2: 0000 0000 0000 0000 0000 1101 1100 0000two ± $t1: 0000 0000 0000 0000 0011 1100 0000 0000two ‡ $t0 daki de er: .OR ‡ Di er bir mant ksal i lem OR i lemidir.

NOT
‡

Son mant ksal i lem NOT i lemidir. MIPS tasar mc lar NOT i lemi için NOR (NOT OR) kullanmay , bir de i kenin hep 0 olmas n uygun görmü lerdir. ± NOT: A NOR 0= NOT (A OR 0)= NOT (A) $t1: 0000 0000 0000 0000 0011 1100 0000 0000two $t3:0000 0000 0000 0000 0000 0000 0000 0000two

‡ ‡

‡

$t0: 1111 1111 1111 1111 1100 0011 1111 1111two olur.

Immediate De erler
‡

Sabitler AND ve OR mant ksal i lemleri ve aritmetik i lemler için önemlidir. Bu nedenle MIPS ayn zamanda andi (and immediate) ve ori (or immediate) komutlar n da içerir. NOR için sabit kullan m na s k rastlanmaz, de erlerin tersini almak için kullan l r. Bu nedenle NOR i leminin immediate versiyonu yoktur. NOT: MIPS komut seti ayn zamanda XOR (exclusive or) komutunu da içerir.

‡

Karar Komutlar
‡

Bilgisayar basit bir hesap makinesinden ay ran özellik karar verebilme yetene idir. Giri de erleri ve hesaplama s ras nda üretilen de erlere göre farkl komutlar çal t r l r. Programlama dillerinde kararlar genelde if komutu ile ifade edilir. Baz dillerde go to komutu ve etiketler de kullan l r. MIPS assembly dili if ve go to komutlar na benzeyen iki adet karar verme komutuna sahiptir. ± beq register1, register2, L1 Bu komutun (beq, branch if equal) anlam register1 deki de er register2 dekine e it olursa L1 le etiketlenen komuta git demektir. kinci komut: ± bne register1, register2, L1 Bu komutun (bne, branch if not equal) anlam register1 ile register2 birbirinden farkl ise L1 le etiketlenen komuta git demektir. Bu iki komut ko ullu dallanmalar olarak isimlendirilir.

‡

‡

‡ ‡

g. else f=g-h. f-j aras ndaki 5 de i ken $s0$s4 olarak de erlendirilirse bu C kodunu MIPS kodu olarak nas l yazar z? ± if (i==j) f=g+h. h. i ve j de i kenlerdir.if-then-else komutunu ko ullu dallanmalar için de erlendirelim: ‡ Örnek: A a daki kod segmentinde f. .

j olarak kullan l r. Ko ullu ve ko ulsuz dallanmalar ay rmak için MIPS ko ullu dallanmaya jump ismini vermi tir. E it olmama durumu için else k sm çal acakt r (bne). lemci bu komutu gördü ünde hiçbir arta bakmaks z n dallanma yapar. .Örnek (dvm) ‡ lk deyim e itlik kar la t rmas yap yor. ‡ Bundan sonra if deyiminin sonuna gitmeliyiz. Burada farkl bir dallanma kullan l r ve ko ulsuz dallanma olarak isimlendirilir.

save dizisinin de $s6 regsiter nda tutuldu unu kabul edelim. Bu C segmenti için MIPS assembly kodu ne olmal d r? ‡ ‡ . Örnek: C de bir while döngüsü derleyelim: ± while (save[i]==k) ± i+=1.Döngüler ‡ Kararlar iki alternatif içinden birini seçmek(if) ve hesaplamay iteratif yapmak(loop) aç s ndan önemlidir. i ve k de i kenlerinin $s3 ve $s5 register lar ile e le ti ini varsayal m.

Bunu yapmadan önce save[i] nin adresine ihtiyac m z olacakt r. save[i] nin adresini elde etmek için: ‡ ‡ ‡ ‡ ‡ Art k save[i] yi geçici register a atabiliriz. Adresi bulmak için de i de erini 4 ile çarpmam z gerekmektedir. Döngü testi için a a daki komut kullan l r ve save[i] k iken döngüden ç kar: i de i kenine 1 eklemek için: Son olarak döngüye tekrar döneriz: . Bu nedenle shift i lemi yapabiliriz. Shift i leminin ba na Loop etiketi koymal y z ki döngü sonunda bu komuta dallanabilelim.Cevap ‡ lk ad m save[i] de erini geçici registar a atmak olacakt r.

slt ve slti komutlar i aretli say lar için çal r. Kar la t rmalarda sabit operandlar önemlidir. bu tip kar la t rmalar için MIPS assembly dilinde iki register kar la t r p üçüncü bir register 1 e set eden bir komut vard r. ‡ ‡ ‡ ‡ MIPS derleyicileri slt. Bunun için komut slti eklini al r. Daha h zl komutlar kullanmay tercih eder. küçük olma. aretli say lardaki i aret biti 1 oldu unda say negatiftir ve tabi ki bütün pozitif say lardan küçüktür. beq. büyük olma. küçük e it olma. e itsizlik. Slt i leminde immediate kullan labilir. Örne in e er döngü index de i keninin 0 dan küçük oldu u durum için olabilir. Buna set on less than (slt) komutu denir. MIPS mimarisi branch on less than komutunu karma kl ndan ötürü kullanmaz. Baz durumlarda bir de i kenin di erinden küçük olmas durumunu da belli eder.SLT ‡ E itlik ve e itsizlik kontrolü en çok kullan lan kontroldür. Kar la t rma komutlar i aretli ve i aretsiz say lar için ikiye ayr l r. . büyük e it olma. sltu ve sltui ise i aretsiz say lar için kullan l r. bne komutlar n ve sabit 0 de erini ($zero register ) bütün ko ullar üretmek için kullan r: e itlik. aretsiz say larda ise en yüksek de erlikli bitte 1 olan say 0 olan say dan büyüktür. slti.

$t0 ve $t1 register lar n n de erleri a a daki komutlar neticesinde ne olur? ‡ Cevap: ± $t0 =1 ve $t1=0 olur. .Örnek ‡ ‡ ‡ $s0: 1111 1111 1111 1111 1111 1111 1111 1111two $s1: 0000 0000 0000 0000 0000 0000 0000 0001two olsun.

Case/Switch Deyimi ‡ ‡ Ço u dilde case/switch deyimi bulunur. Daha sonra bu register daki adrese atlama yapar. Program sadece tabloya indeksleme yapar ve uygun s raya atlama yapar. Program uygun giri i jump table dan bir register a al r. Bunun yerine if-then-else komutu da kullan labilir. Bunun için kullan lacak MIPS kodu jr (jump register) dir. ‡ . Alternatif komut dizilerinin adres tablosu jump address table veya jump table olarak isimlendirilir. Jump table koddaki etiketlere uyan adresleri içeren word dizileridir.

stenilen görevi yerine getirmek. Prosedürün çal mas alt ad mda özetlenebilir: 1. 5.Prosedürler ‡ Programc lar n programlar n yap land rmakta kulland klar araçlardan birisi de prosedür veya fonksiyondur. ‡ . çünkü bir prosedür birçok kere ça r labilir. 4. 3. Sonuçlar prosedürü ça ran program n eri ebilece i yerlere yerle tirmek. Prosedürler programc lar n bir seferde sadece bir i ile ilgilenmelerini sa lar. böylelikle yaz lan kod tekrar tekrar kullan labilir. Prosedür için gerekli depolama kaynaklar n tedarik etmek. Prosedürün eri ebilece i yerlere parametreleri yerle tirmek. Kontrolü prosedüre devretmek. 6. Kontrolü ba lang ç noktas na getirmek. Parametreler prosedür ile program n geri kalan k sm aras nda arayüz görevi görürler. 2.

jal komutu asl nda $ra rgister na PC+4 adresini atar çünkü s radaki komut bu adrestedir. .Prosedürler (dvm) ‡ ‡ ‡ ‡ Prosedürler program n h zlanmas n sa larlar. Bu komut jal (jump-and-link-instruction) komutudur. bu nedenle s kl kla kullan lmak istenirler. jal X ile X prosedürünün adresine atlama yapar. MIPS yaz l m prosedür ça rma i lemi için a a daki ekilde davran r: ± $a0-$a3: parametre geçi leri için dört adet argüman register ± $v0-$v1: De er döndürmek için iki adet de er register ± $ra: ba lang ç noktas na dönmek için ba lang ç adresi register Bütün bu register lar n tahsis edilmesinin yan nda MIPS assembly dili sadece prosedürler için kullan lan bir komuta sahiptir. ± jal ProcedureAddress Bir register daki adrese atlamak için de jr komutunu kullan yorduk: ± jr $ra Prosedürü ça ran program parametre de erlerini $a0-$a3 register lar na koyar. gerekli görevi yerine getirdikten sonra sonuçlar $v0 ve $v1 register lar na atay p jr $ra komutu ile kald yerden çal maya devam eder. Bu komut prosedürün oldu u adrese atlama yap lmas n ve s radaki komutun adresini de $ra register na(register 31) at lmas n sa lar.

Bu nedenle stack e veri yazarken(push) stack pointer azalt lmal d r. stack de son tahsis edilen adresi gösteren bir pointer a ihtiyaç duyar. Stack ler yüksek adresten dü ük adrese do ru ilerler. Bunun için stack-LIFO kuyru u kullan l r. Stack pointer n artmas ise pop i lemini gösterir. stack den veri almak için ise pop kelimeleri kullan l r. Register stack pointer olarak ay rm t r ($sp). ‡ . Stack pointer her bir word de bir artar.Daha fazla register kullanmak ‡ Baz durumlarda 4 argüman ve 2 return value register yeterli olmayabilir. Stack e veri yazmak için push. MIPS yaz l m 29. Stack. Prosedürü ça racak olan program taraf ndan kullan lacak olan register lar n içindeki de erler prosedür ça r ld ktan sonra tekrar yerine yaz lmal d r.

Derlenecek program ilk önce prosedürün ismi ile ba lar: ± leaf_example: ‡ Daha sonraki ad m prosedürün kullanaca register lar saklamakt r. . i ve j de i kenleri $a0-$a3 argümanlar na denk gelsin. Sonuç f ise $s0 da tutulsun.Örnek ‡ Yukar daki C prosedürünün MIPS assembly kodu nedir? Cevap: ‡ g. $s0. $t0 ve $t1 register lar n kullanaca z. her register 4 byte oldu undan 4x3=12 byte l k bir alana ihtiyac m z olacak. h. Bu register lardaki var olan de erleri korumak için push i lemi yapaca z.

(a)önce.Örnek (dvm) ‡ ekil. .Stack pointer her zaman stack in en üstünü gösterir. (c) prosedür ça r s sonlan nca. (b) prosedür ça r l nca.

‡ ‡ Sonuç de erini döndürmek için: Ana programa dönmeden önce kulland m z register lar n eski de erlerini pop i lemi ile elde etmeliyiz.Örnek (dvm) ‡ S radaki üç sat r prosedür gövdesini temsil etmektedir. ‡ Ana programa dönerken s radaki adresi tuttu umuz $ra register n n gösterdi i adrese atlama yapar z: .

Örnek (dvm) ‡ Bu örnekte kulland m z register lar n ilk de erlerini yeniden yükledik. Bu i lemden kaç nmak için MIPS yaz l m hiç kullan lmam geçici register lar kullanabiliriz. MIPS 18 register iki gruba ay r r: ± $t0-$t9: Bir prosedür ça r s s ras nda 10 adet geçici register ça ran program taraf ndan saklanmaz ± $s0-$s7: Bir prosedür ça r s s ras nda 8 adet saved register ça ran program taraf ndan saklanmal d r (e er kullan l rlarsa ça ran program stack e yazma ve stack den alma i lemini yapar) .

Ancak bazen prosedürler içlerinde ba ka prosedürleri ça rabilirler.ç içe prosedürler ‡ Ba ka bir prosedür ça rmayan prosedürler yaprak prosedür olarak isimlendirilirler. Bu durumlarda kulland m z register lara dikkat etmeliyiz. ‡ ‡ . Daha sonra A prosedürünün de $a0 register na 7 argüman n atayarak ve jal B komutunu kullanarak B prosedürünü ça rd n varsayal m. A prosedürü kendi görevini sonland rmadan $a0 register nda bir çak ma olacakt r. Program do ru bir ekilde çal amayacakt r. Bunun için $a0 register na 3 de erini atas n ve jal A komutunu kullans n. Ayn ekilde geri dönü register $ra üzerinde de çak ma olacakt r. Örne in ana program 3 argüman ile A prosedürünü ça rs n. Bunu çözmenin yolu bütün register lar stack e push etmektir. Bunun yan nda recursive prosedürler kendi klonlar n olu turabilirler.

Örnek ‡ Faktöriyeli hesaplayan recursive bir program: ‡ MIPS assembly kodu nedir? Cevap: ‡ n de i keni $a0 register nda tutulsun. daha sonradönü adresi ile $a0 register n stack e atar z. lk önce prosedürün etiketini yazar z. .

1 ile s f r toplan r ve $v0 a yaz l r. S radaki iki sat r n nin durumuna göre dallanma yapar.Örnek (dvm) ‡ fact ilk defa ça r ld nda sw fact i ça ran program n adresini tutar. ‡ E er n < 1 ise value register a 1 de eri yaz l r. Daha sonra stack deki iki register pop ile al r: ‡ n<1 de ilse n azalt l r ve fact tekrar ça r l r: .

Örnek (dvm) ‡ S rada fact in de erinin döndürülmesi vard r. Art k eski de erler dönü adresi ve argüman de erleri yerine yaz l r: ‡ S radaki de er register $v0 $a0 n eski de erini ve kendi imdiki de erini al r: ‡ Son olarak fact dönü adresine atlama yapar: .

. Otomatik de i kenler prosedür için yereldirler ve prosedür sonlan nca anlams zla rlar. Statik de i kenler prosedürden ç k lsa bile var olurlar. aksi taktirde otomatik say l rlar.$gp ‡ C de iki depolama s n f vard r :statik ve otomatik. Statik de i kenler static anahtar sözcü ü ile belirtilirler. MIPS statik bir veriye eri mek için bir register rezerve etmi tir. bu register $gp(global pointer) d r.

‡ ekil. . Prosedür ça r s nda korunan ve korunmayan de erler.

(c) sonra. Stack tahsisinin gösterilmesi. $sp program çal t sürece de i irken $fp de i mez. ‡ ekil. Prosedürün saved register lar n ve yerel de i kenlerini içeren stack segmenti prosedür frame i ya da aktivasyon kayd olarak isimlendirilir.Stack de Yeni Veri için Yer Ay rmak ‡ Yerel diziler ve yap lar gibi register lara s mayan fakat prosedür için yerel olan de i kenler stack lerde depolanabilir. $sp (stack pointer) stack in en üstünü gösterir. (b) prosedür ça r s boyunca. Frame register ($fp) frame in ilk word unu gösterir ve bu genelde saved argüman register d r. . (a) önce.

Program ve veri için MIPS de haf za ay rma . A a daki ekil MIPS gelene ine göre haf za ayr m n göstermektedir. ‡ ekil.Heap Alan nda Yeni Veriler çin Yer Ay rma ‡ Prosedürlerde yer alan de i kenler için otomatik olarak yer ayr lmas na ek olarak C programc lar statik de i kenler ve dinamik veri yap lar için haf zada yer ay rmaya ihtiyaç duyarlar.

bu durumda program. Haf za ay rma i lemi C program içerisinde yap l r. böylece her iki segment büyüyüp küçülebilir. Diziler statik yap da olmalar na ra men. her iki segmentin birbirlerine do ru büyümesine olanak tan r. heap üzerinde yer ay rma ve serbest b rakma i lemlerini belirli fonksiyonlar ile yapar. haf zan n dü ük seviyeli ucundaki rezerve edilmi aland r ve bu alan MIPS makine kodunun yer ald Text alan (text segment) takip eder. Text alan n n üzerinde statik de i kenlerin ve sabitlerin tutuldu u Static Data Segment bulunur. Bu tür verileri tutmak için kullan lan alana genellikle heap denir ve Static Data Segmentten sonra yer al r.Heap Alan nda Yeni Veriler çin Yer Ay rma (dvm) ‡ ‡ Stack. bu tür hatalar ortadan kald rmak için otomatik yer ay rma yapar ve ayr lan yerlerin b rak lmas için de garbage collection (at k toplama) kullan r. C dili. Bu nedenle birçok hataya neden olabilir. lk parça. Malloc() heap üzerinde bir yer ay r r ve kullan ld yere bir pointer döndürür. Java. . haf zan n yüksek seviyeli ucundan ba lar ve a a do ru büyür. hiç kullanmayaca verilere ba vurabilir. Ayr lan haf zan n serbest b rak lmamas haf za yetersizli ine neden olurken. Bu yap . gerekenden erken serbest b rak lan haf za da geçersiz pointerler n olu mas na neden olur ki. free() pointer ile gösterilen yeri serbest b rak r. ba l listeler gibi veri yap lar zaman içinde büyüyebilirler.

MIPS register gelene i .Heap Alan nda Yeni Veriler çin Yer Ay rma (dvm) ‡ ekil.

toplam bulma i lemi için a a daki gibi bir prosedür yaz ld n dü ünelim. MIPS in C derleyicisi bunun için bir ba ka register kullan r ($s8). ekstra parametreleri frame pointer n hemen üzerindeki stack e yerle tirir. . Frame pointer kullanmak uygundur çünkü stack içerisindeki bütün parametreler ayn ofset adresine sahiptir. GNU MIPS C derleyicisi frame pointer kullan r fakat MIPS in C derleyicisi kullanmaz. Prosedür ilk 4 parametrenin $a0 ile $a3 registerlar aras nda saklanmas n ve di er parametrelerin frame register ile adreslenen haf za bölgesinde olmas n bekler. NOT: Baz rekürsif prosedürler iteratif olarak yaz labilirler.Heap Alan nda Yeni Veriler çin Yer Ay rma (dvm) ‡ ‡ NOT: 4 parametreden daha fazla parametre varsa ne olur? MIPS. Örne in. teratif yaz m. prosedür ça rma yükünü ortadan kald rd için performans önemli ölçüde artt r r.

Heap Alan nda Yeni Veriler çin Yer Ay rma (dvm) ‡ Sum(3. sum(1. Bu rekürsif ça rma yöntemine sondan ça rma (tail call) denir ve etkin bir biçimde uygulanabilir. ($a =n ve $a1 = acc oldu unu varsayal m) .5) ve sum(0. sum(2. Bu.6) rekürsif ça r lar na neden olacakt r ve sonuç olan 6 de eri 4 defa döndürülecektir.0) eklinde prosedürün ça r ld n dü ünelim.3).

Ço u bilgisayar. ASCII karakter gösterimi tablosu nsan do as 10 luk taban kullanmaya elveri li olmas na ra men neden bilgisayarlar 2 li taban kullan rlar? Asl nda ilk ticari bilgisayarlar 10 luk taban aritmeti i kullanmay sa lamaktayd . . ‡ ‡ ekil.nsanlarla leti im ‡ Bilgisayarlar. say larla i lem yapmak için icat edilmi lerdir ancak zaman içerisinde ticarile meleriyle birlikte metin i leme için kullan lmaya ba lanm lard r. Ancak bilgisayarlar aç-kapa mant kulland klar için kendi içlerinde 2 li taban kullanmaktad rlar. A a daki ekil ASCII tablosunu özetlemektedir. Yaln zca giri -ç k gibi k s tl i lemlerde 10 luk taban kullan l r. karakterleri tan mlamak için standard ASCII taraf ndan belirlenen 8 bitlik gösterim kullan r.

. Bu durumda 1 milyar say s n 32 bitlik integer ile gösterirken ASCII gösterimi ne kadar yer kaplar? Bir milyar 1. ondal k say lar üzerinde i lem yapmak da zordur. a a daki komutlar ile bir byte kopyalayabiliriz. Load byte (lb) haf zadan bir byte okur ve bir register n dü ük seviyeli 8 bitine yerle tirir. aretli bir veriyi bir register a yüklerken i aret biti register n geri kalan na doldurulur. Böylece.000. Böylece ASCII gösterimi için gerekli olan alan integer gösterimi için gerekli olan alandan (10x8)/32 = 2.5 kat daha fazlad r. Bir word den byte elde eden.000 10 ASCII basama na sahiptir ve her bir basamak 8 bittir. MIPS dili de bu i lemler için komutlar sa lamaktad r. word u kaydeden ve word e atama yapabilen komutlar byte transferi için yeterlidir.kili Say lara Kar ASCII ‡ ‡ ‡ Bir say y göstermek için integerlar yerine ASCII tablosundan basamaklar da kullanabilir. Store byte (sb) bir register n dü ük seviyeli 8 bitini okur ve bunu haf zaya yazar. Artan saklama alan n n yan s ra. ‡ aretsiz verileri yüklemeye kar n i aretli verileri yükleme aritmetik i lemlerde oldu u gibi farkl d r.000.

Bir stringi göstermek için 3 seçenek vard r: ± 1) stringin ilk pozisyonu stringin uzunlu unu göstermesi için ayr l r. Böylece Cal stringi C de 4 byte ile u ekilde ifade edilir: 67. seçene i kullan r. 0 ‡ . 108. Stringin biti ini gösteren 0 de erli bir karakter (ASCII NULL) stringe eklenir. aretsiz yükleme yaparken load byte unsigned (lbu) kullan l r. Bu nedenle lbu pratikte byte yüklemeleri için daha s k kullan l r. ± 3) stringin son karakterini takip eden bir biti karakteri stringe eklenir. aretli yükleme için MIPS lb komutunu kullan r ve register n geri kalan 24 biti i aret biti ile doldurulur. Karakterler normalde stringleri olu tururlar ve stringler de i ken uzunlu a sahiptirler. C 3. C programlar karakterleri göstermek için i aretli integer say lar yerine byte lar kullan r. 97.kili Say lara Kar ASCII (dvm) ‡ 32 bitlik bir wordu 32 bitlik bir registera yüklerken i aretli ve i aretsiz yükleme yöntemleri ayr d r. ± 2) stringe e lik eden bir yap stringin uzunlu unu gösterir.

MIPS komut seti lui (load upper immediate) komutunu içermektedir. Ancak bu durumun istisnalar da vard r. Immediate sabit 16bitten büyük oldu unda bu komut kullan l r. Örnek: A a daki 32-bitlik sabiti $s0 register na atamak için gerekli MIPS kodu nedir? .32-Bit Immediate Operandlar ‡ ‡ Sabitler genelde k sad r ve 16-bitlik alana s arlar.

‡ ‡ ‡ Daha sonra $s0 register n n de eri: Olur. Art k $s0 n de eri: ‡ Olur.Cevap ‡ lk önce upper 16 biti (burada decimal 61 de erine sahip)lui komutu ile al r z. . Lower 16-biti de $s0 register na atmal y z.

Bu komut tipi 6-bitlik i lem alan na sahiptir. ‡ ‡ Burada 2 opcode ve 10000 de eri jump adresidir.Dallanma ve Atlamalarda Adresleme ‡ MIPS atlama komutlar basit bir adresleme yap s na sahiptir. . J-tipi komut format n kullan rlar. geri kalan k sm adrese ayr lm t r. jump komutundan farkl olarak branch komutu branch adresinin yan nda iki operand belirtmelidir.

Yak nda bir noktadaki komuta gitmek için branch komutlar kullan l r. . Bu tip branch addressing formuna PC-relative addressing denir. Günümüz için bu pek realistik de ildir.Dallanma ve Atlamalarda Adresleme (dvm) ‡ Adres 16 bit ile gösterildi inden program 216 dan büyük olamaz. PC (program counter) mevcut komut adresini tuttu undan adrese PC eklenecektir. Ancak prosedürler gibi uzak adreslere gitmek için jump kullan lmas gereklidir. sadece lower 28 bitini de i tirir. Peki bunun için hangi register kullan lacakt r? Ko ullu dallanmalar döngülerde ve if deyimlerinde kullan l rlar. Dallanma olmad sürece PC+4 ile s radaki komutun adresi gösterilir. Genelde bütün döngüler ve if deyimleri 216 dan küçüktür. ‡ ‡ ‡ ‡ Bu sayede program 232 kadar büyük olabilir. bu nedenle PC ideal seçimdir. NOT: MIPS jump komutu PC nin upper 4 bitini de i tirmez. Yak ndaki bir komuta dallanmak isterler. Bunun alternatifi branch adrese sürekli olarak eklenecek bir register belirlemektir.

. komutun içindeki sabittir. 5. Register addressing: Operand bir register d r. 4. komutun içindeki sabit ile register n toplam olan adrese sahip haf za alan d r. Pseudodirect addressing: Jump adresin PC nin upper bitlerinin yan na s ralanan komutun 26 biti oldu u durumdur.MIPS Adresleme Modlar ‡ MIPS adresleme modlar 5 tanedir: 1. komuttaki sabit ile PC nin toplam d r. 3. 2. PC-relative addressing: Branch adres. Immediate addressing: Operand. Base or displacement addressing: Operand.

.

‡ ‡ Yine tabloyu referans alarak 5-3 aras bitler 100 ve 2-0 aras bitler de 000 oldu undan bu komutun add komutu oldu unu anlar z. rs alan ndaki decimal de er 5. Sonuçta komut: . Di er k s mlar da komuttan okuruz.Makine Kodunu Çözmek ‡ Örnek: A a daki makine kodunun MIPS kar l nedir? ‡ Cevap : lk olarak bu say y binary formata çevirmeliyiz: ‡ Tabloyu referans alarak 31-29 aras bitler 000 ve 28-26 aras bitler de 000 oldu undan bu komutun R-tipi bir komut oldu unu söyleyebiliriz. rt deki 15 ve rd deki 16 d r. Tabloya bakarsak bu de erlerin register kar l klar n buluruz.