BÖLÜM 4
BELLEK ADRESLEME VE EMÝR TÜRLERÝ
CPU emirlerinin belirttiði iþlemler, bellekte veya CPU kaydedicilerinde saklanan
veriler üzerinde icra edilir. Bellekte oturan veriler kendi adresleriyle gösterilir. CPU
kaydedicilerinde oturan veriler ise kaydedici adresiyle belirtilir. Kaydedici adresi, CPU
içindeki 2n kaydediciden birini gösteren n-bitlik ikili koddur. Bu yüzden mikroiþlemcisinde
16 kaydedici bulunan bir bilgisayarda, emir kodlarý 4-bitlik kaydedici adres alanýna sahip
olmalýdýr.
Bilgisayarlar, deðiþik sayýda adres içeren birkaç farklý uzunluklu emirlere sahip
olabilir. Emirdeki adres alanlarýn sayýsý CPU içindeki kaydedicilerin iç organizasyonuna
baðlýdýr. Ticari bilgisayarlarda iki adresli emirler oldukça yaygýndýr. Her adres alaný ya
bir CPU kaydedicisini veya bir bellek adresini gösterir. Örnek olarak bir yerden baþka bir
yere veri transferi yapan LOAD (LD) emrini inceleyelim.
LD
R1, ADDR
emiri ADDR adres alanýnda saklanan veriyi R1 kaydedicisine taþýr, yani R1←M [ADDR]
iþlemini yapar. Burada M[ADDR] sembolü ADDR adresindeki kelimeyi gösterir.
4.1. ADRESLEME MODLARI
Emir kodu, gerçekleþtirilecek iþlemi gösterir. Bu iþlem CPU kaydedicilerinde veya
bellekte saklanan bir veri üzerinde gerçekleþtirilir. Program icrasý esnasýnda verilerin
seçilmesi yolu, emirin adresleme moduna baðlýdýr. Veri referanslanmadan önce, emir
adres alanýnýn yorumlanmasý veya deðiþtirilmesi kuralý adresleme modunu belirtir.
Bilgisayarlar, aþaðýdaki koþullardan birini veya her ikisini kapsamak amacýyla adresleme
tekniklerini kullanýr.
1. Bellek göstericileri (pointers), döngü denetleme sayýcýlarý, veri indeksleme, ve
programý yeniden yükleme (relocation) gibi kolaylýklar saðlayarak kullanýcýya
programlama esnekliði vermek
2. Emirin adresleme alanýndaki bitlerin sayýsýný azaltmak.
Adresleme modlarý, emirlerin sayýsý ve icra süresi bakýmýndan programlarý daha
verimli yazabilmek için programcýya esneklik kazandýrýr. Bazý bilgisayarlarda emirin
adresleme modu açýk ikili kod kullanýlarak belirtilir. Bazýlarýnda ise emirin hem iþlem
hem de adresleme modunu gösteren ortak ikili kod kullanýlýr. Emirler çeþitli adresleme
modlarýna sahip olacak þekilde tanýmlanabilir, ve bazen iki veya daha fazla adresleme
modu bir emirde biraraya getirilebilir. Emir kodu çözülerek, gerçekleþtirilecek iþlem türü
ve emirin adresleme modu belirlenir.
Açýk adresleme moduna sahip bir emirin biçimi Þekil 4.1’deki örnekte
gösterilmiþtir. Ýþlem kodu gerçekleþtirilecek iþlemi belirtir. Mod alaný ise iþlem için
gerekli verilerin nasýl adresleneceðini
gösterir. Emirde adres alaný bulunabilir veya
bulunmayabilir. Eðer adres alaný varsa, bu alan bir bellek adresini veya CPU kaydedicileri
için bir kodu gösterebilir. Ayrýca bir emirde birden çok adres alaný bulunabilir. Bu
durumda her adres alaný kendine özgü adresleme moduna iliþkin olur.
Ýþlem
kodu
Mod
Adres
Þekil 4.1. Mod alanýna sahip emirin biçimi.
4.1.1 Ýmalý Bellek Adresleme
Ýmalý bellek adresleme tekniðini kullanan bir emir veri sayýcýnýn içeriðini bellek
adresi olarak yorumlar. Bu mod, adres alaný gerektirmez. Veri yeri, iþlem kodunun
tanýmýnda kapalý olarak belirtilir. Belleði adreslemek için veri sayýcýyý kullanmak iki
adýmlýk iþlemdir:
1. Gerekli bellek adresi veri sayýcýya yüklenir.
2. Veri sayýcýnýn içeriðini bellek adresi olarak yorumlayan bir baytlýk bir bellek
referanslama emiri icra edilir.
CPU yapýsýný incelerken verilen toplama örneðindeki ilk iki adýmý tekrar
inceleyelim. Birinci emir mnemonik biçimi ( LD DC, ADDR) olan ve (A3 0A 20) makina
koduna karþý düþen veri sayýcýyý yükleme emiridir. Ýkinci emir ise mnemonik biçimi
(LD A, [DC] ) ve makina kodu (38) olan imalý adresleme yaparak akümülatörü bellekten
yükleyen bir yükleme emiridir, Þekil 4.2. Burada bellek referanslama emiri bellek adresini
belirlemez. Bu emir daha ziyade veri sayýcý tarafýndan adresi ima edilen bellek adresinin
referanslanacaðýný gösterir. Bir adres defalarca kulanýlacaksa veya küçük deðiþikliklerle
defalarca kullanýlacaksa bu adresleme modu çok elveriþlidir. Veri sayýcýdaki adres,
yeniden yükleme yapýlmadýðý sürece orada sabit kalýr.
0100
0101
0102
0103
0104
0A1
F
0A20
0A21
A3
0A
20
38
LD DC, ADDR
0A20
3B
Veri sayýcý
Akümülatör
LD A,[DC]
3B
Þekil 4.2. Ýmalý adresleme ile verinin akümülatöre taþýnmasý.
4.1.2 Yakýn Bellek Adresleme
Yakýn adreslemede veri, emir ile beraberdir. Diðer bir deyiþle yakýn modlu emir,
adres alanýndan ziyade veri alanýna sahiptir. Veri alaný, emirde belirtilen iþlemde
kullanýlacak gerçek veriyi içerir. Bu adresleme moduna sahip emirler, kaydedicileri sabit
deðerlerle yüklemek için çok yararlýdýr. Yakýn mod bir bakýma imalý adreslemedeki
iþlemlerin birincisine karþý düþer. Þekil 4.2’deki ilk emir, veri sayýcýyý emir kodundan
sonra gelen yakýn deðer (0A 20) ile yüklediðinden bir yakýn adresleme yapýlmýþ olur.
4.1.3 Doðrudan Bellek Adresleme
Bu modda emirin adres alaný bellekteki verinin adresini gösterir. Ýmalý
adreslemede kullanýlan (LD DC, ADDR) ve (LD A, [DC] ) emirleri doðrudan bellek
referans emiri oluþturacak biçimde Þekil 4.3’deki gibi birleþtirilebilir.
Adres kaydedici veri sayýcý ile ayný görevi gerçekler, ama bu kaydedici çok kýsa
süreli çalýþýr. Doðrudan bellek referans emiri, hesaplanýp adres kaydediciye yüklenen bir
bellek adresi ile baþlar. Bu adres, eriþilecek bellek alanýnýn adresi haline gelir.
0202
0203
0204
0205
61
0B
20
0B20
3B
LD A, [ADDR]
0B20
3B
Adres kaydedici
Akümülatör
Þekil 4.3. Doðrudan adresleme ile verinin akümülatöre taþýnmasý.
4.1.4 Göreceli Bellek Adresleme
Bazý adresleme modlarý etkin adresi hesaplamak için CPU içindeki belirli bir
kaydedici içeriðine emir adres alanýnýn eklenmesini gerektirir. Göreceli adresleme
modunda etkin adres aþaðýdaki biçimde hesaplanýr:
Etkin adres = Emirin adres kýsmý (öteleme) + PC içeriði
Emirin adres kýsmý, pozitif veya negatif olabilen iþaretli bir sayýdýr. Bu sayý PC
içeriðine eklendiði zaman, elde edilen sonuç programdaki bir sonraki emirin adresine göre
etkin adresin bellekteki konumunu verir.
Programa göre adresleme, her iki yönde olmak üzere bir sayfanýn yarýsý kadar,
emirlerin bellek adreslemesine izin verir. Bu adresleme modu çoðunlukla dallanma
emirlerinde kullanýlýr. Adres alaný iþaretli çok büyük öteleme bilgisi oluþturamadýðýndan
dolayý, dallanma emirin yakýn civarýna olmalýdýr. Bu sakýncasýna raðmen, küçük adres
vererek program sayýcýya göre program bellekte sýnýrlý dallanma imkaný saðladýðýndan
çok kullanýþlý bir adresleme türüdür.
Durumu daha iyi açýklamak için, 24AE bellek alanýnda göreceli adresleme yapan
ve öteleme bilgisi 7A olan bir emirin olduðu örneði inceleyelim. O zaman etkin adres
aþaðýdaki þekilde hesaplanýr
0010010010101110
0000000001111010
24 AE
7A
0010010100101000
Ýþaret biti uzantýsý
25 28
Belleðin ilerisini adreslemeye iliþkin bu örnek assembli dili emirler kullanýlarak aþaðýdaki
þekilde gösterilebilir:
Bellek adresi
24AD
----2528
Amaç (object) kodu
BC 7A
-----
Kaynak program emiri
JMP HERE
HERE LD A, THERE
Yukarýdaki gösterimde BC sembolü JMP emirin kodunu gösterir. (LD A, THERE
emirinin iþlem kodu bu incelemede önemli olmadýðý için verilmemiþtir.) JMP emiri
CPU’ya alýndýktan sonraki PC içeriðini assembler HERE etiketine iliþkin deðerden
çýkararak JMP emirinin öteleme bilgisini hesaplar.
HERE etiketinin eþdeðeri
= 2528
JMP emiri alýndýktan sonra PC içeriði
= 24AF
Fark
= 0079
Assembler 7F’den büyük deðer bulursa, JMP emiri yasal deðildir, ve assembler tarafýndan
programcýya bir mesaj gönderilir.
JMP ve LD emirleri kendi aralarýnda yer deðiþtirseydi geriye dallanma yapýlacaktý.
Assemblerin yaptýðý iþ deðiþmeyecekti ve HERE etiketine ait deðerden PC içeriði
çýkarýlarak öteleme hesaplanacaktý.
HERE etiketinin eþdeðeri
= 24 AD
Emir yüklendikten sonra PC içeriði = 25 2A
Fark =
-7D
4.1.5 Otomatik Artýrma ve Azaltma Yaparak Ýmalý Bellek Adresleme
Veri dizisini belleðin bir bölgesinden baþka bir bölgesine taþýmak için iki veri
sayýcýdan yararlanýlýr. Bu sayýcýlarda saklanan adresler her bellek eriþiminden sonra
artýrýlýr. Veri dizisinin diðer ucundan baþlayan bir program lojiði tasarlamak mümkündür,
o zaman bellek adresi her bellek eriþiminden sonra bir azaltýlmalýdýr. Her iki durumda da
bellek referanslama iþlemini yapan ve bellek adresini bir artýran veya azaltan tek baytlýk
emir yapýlabilir, Þekil 4.4. Veri sayýcýlardan birine okumanýn yapýlacaðý bellek adresi,
diðerine de okunan verinin yazýlacaðý bellek adresi saklanýr ve her iki sayýcý ya artýrýlýr
veya azaltýlýr. Böylece bir veri dizisi bir yerden baþka bir yere taþýnmýþ olur.
(4) Akümülatörü DC1 üzerinden yükle
(5) Akümülatörü DC2 üzerinden sakla
(4) (6) Akümülatörü DC1 üzerinden yükle ve DC1 sayýcýsýný 1
artýr
(5) (7) Akümülatörü DC2 üzerinden sakla ve DC2 sayýcýsýný bir
artýr.
(6) DC1 sayýcýsýný bir artýr
(7) DC2 sayýcýsýný bir artýr
Þekil 4.4. Bellek referanslayan ve veri sayýcý içeriðini bir artýran emirler
kullanarak veri dizilerin bellekte taþýnmasý.
4.1.6 Yýðýn Bellek Adresleme
Çoðu bilgisayarda bulunan çok yararlý bir özellik yýðýn bellektir. Bu yýðýn songiren ilk- çýkar (last-in fýrst-out, LIFO) bellek olarak da bilinir. Yýðýn, son saklanan
bilginin ilk olarak alýndýðý bir saklama cihazýdýr. Yýðýn çoðu uygulama için yararlý olan
ve veri iþleme görevini kolaylaþtýracak özellikler taþýyan bir yapýya sahiptir. Aritmetik
iþlemleri kolaylaþtýrmak için elektronik hesap makinalarýnda ve bilgisayarlarda verimli bir
þekilde kullanýlmaktadýr.
Yýðýn bellek, her bellek eriþiminden sonra artýrýlan veya azaltýlan bir adres
yardýmýyla kendisine eriþilen bir bellek parçasýdýr. Yýðýnýn adresini tutan kaydediciye
yýðýn gösterici (SP) denir, çünkü onun içeriði daima yýðýnýn tepesindekini gösterir.
Yýðýnýn tepesine yazmak ve yýðýnýn tepesinden okumak yýðýn üzerinde yapýlan iki
yýðýn iþlemidir. Yýðýna yazma itme (push) ve yýðýndan okuma çekme (pop) olarak
adlandýrýlýr. Ama fiziksel olarak itilen veya çekilen birþey yoktur. Bu iþlemler yýðýn
gösterici artýrýlarak veya azaltýlarak benzetimlenir (simulate).
Yýðýn gösterici yýðýnýn baþlangýç deðeriyle yüklenir. Baþlangýç deðeri yýðýnýn
bellekteki taban (bottom) adresi olmalýdýr. Daha sonra her itme veya çekme iþlemi
yapýldýðý zaman SP otomatik olarak artýrýlýr veya azaltýlýr. Bellek yýðýnýn üstünlüðü
adres belirtmeden mikroiþlemcinin kendisine eriþebilmesidir, çünkü adres SP’de daima
vardýr ve otomatik olarak güncelleþtirilir.
Ýtme iþlemi yýðýn gösterici tarafýndan adreslenen bellek alanýna CPU
kaydedicilerinden birinin içeriðini yazar. Önce yýðýnýn yeni tepesini adreslemek için
yýðýn göstericinin (SP) içeriði otomatik olarak bir azaltýlýr, ve daha sonra belirtilen
kaydedicinin içeriði yýðýnýn tepesine yazýlýr, Þekil 4.5.
Yýðýn
bellek
A
SP
8F
F023
?
?
65
08
F021
F022
F023
F024
(a) Ýtme iþleminden önce
Yýðýn
bellek
A
SP
8F
F022
?
8F
65
08
A:Akümülatör
SP:Yýðýn Gösterici
F021
F022
F023
F024
(b) Ýtme iþleminden sonra
Þekil 4.5. Ýtme iþleminin yapýlýþý.
Çekme iþlemi itmenin tam tersidir. Yýðýn göstericinin içeriði ile adreslenen yerden
bilgi alýnarak akümülatöre veya CPU’nun diðer kaydedicilerine taþýnýr ve yýðýnýn yeni
tepesini göstermek amacýyla yýðýn gösterici içeriði otomatik olarak artýrýlýr, Þekil 4.6.
A
SP
?
F022
F021
8F F022
65 F023
08 F024
(a) Çekme iþleminden önce
A
SP
8F
F023
F021
8F F022
65 F023
08 F024
(b) Çekme iþleminden sonra
Þekil 4.6. Çekme iþleminin yapýlýþý.
Veri sayýcý kullanýlarak yapýlan imalý bellek adresleme ile yýðýn gösterici
kullanýlarak yapýlan bellek adresleme arasýndaki paralelllik açýktýr. Aralarýndaki tek fark,
yýðýn bellek içeriðinin her yazmadan sonra azaltýlmasý ve her okumadan sonra
artýrýlmasýdýr. Yýðýn gösterici içeriðinin ne kadar artýrýlacaðý veya azaltýlacaðý çekilen
veya itilen kaydedicinin büyüklüðüne baðlýdýr. Örneðin veri kaydedici içeriði yýðýna
itileceði zaman, yýðýn gösterici içeriði iki azaltýlýr, ve böylece yýðýn derinliði iki bayt
büyür.
Yýðýnýn nasýl kullanýldýðýný açýklayabilmek için altprogramlý bir çalýþmayý
inceleyelim. Çoðu programlar sýk sýk tekrarlanan emir dizilerinden oluþmuþtur. Bu
dizilerin herbiri program belleðin bir yerine yalnýz bir kere yazýlýr ve her istendiðinde
oradan çaðrýlýp icra edilirse, böyle dizilere altprogram denir.
Çok baytlý sayýlar üzerinde dört iþlem yapabilen emirler bazý CPU’larda yoktur.
Bu tür iþlemler birden çok emir kullanýlarak altprogramlar sayesinde gerçekleþtirilir.
Toplama, çýkarma, çarpma, ve bölme altprogramlarý bellekte ayrý ayrý bölgelerde oturur
ve gerektiðinde ana program içinden CALL emiri ile çaðrýlarak koþturulur. Bu çaðýrma
biçimi Þeki 4.7’deki gibi gösterilebilir.
Ana programýn kullandýðý
program bellek
Alt programýn kullandýðý
program bellek
Þekil 4.7. Ana program tarafýndan altprogramýn çaðrýlmasý.
Altprogramlý çalýþma kullanýlmasaydý, ana program içinde ihtiyaç duyulan her
noktada altprogramýn tekrarlanmasý zorunlu olacaðýndan program bellek büyüyecekti.
Altprogram çaðrýldýðý zaman, PC içeriði yýðýn belleðe itilir ve altprogramýn
baþlangýç adresi PC’ye yerleþtirilir. Ayrýca PC içeriði iki bayt olduðundan, yýðýnýn yeni
tepesini göstermek üzere yýðýn gösterici 2 azaltýlýr. Altprogramdan geri dönebilmek için
altprogramýn sonuna bir RET geridön emri konulmalýdýr. Bu emir PC’nin eski içeriðini
yýðýndan CPU’ya taþýr ve yýðýn göstericiyi 2 artýrýr. Altprogramlarý koþullu çaðýrmak
ve altprogramlardan koþullu geri dönmek için CPU’larýn özel emirleri mevcuttur.
Yuvalý (nested) altprogram, bir altprogramýn baþka bir altprogramýn tarafýndan
çaðrýlmasý olarak tanýmlanýr. Bir altprogramýn diðeri tarafýndan çaðrýlmasýnda olaðan
olmayan herhangi birþey yoktur. Gerçekte altprogramlar çok kere içiçe girebilir. Bazý
matamatiksel iþlerde program yazmanýn en etkin yolu kendi kendini çaðýran
altprogramlarýn olmasýdýr. Kendi kendini çaðýran altprograma yinelemeli (recursive)
altprogram denir.
Geri dönüþ adresleri yýðýnda saklandýðý sürece, altprogramlar yuvalanabilir ve
kendi kendilerini çaðýrabilir. Geri dönüþ sýrasý, çaðrýlma sýrasýný tam tamýna izlemek
koþulu ile, doðru geri dönüþ adresi daima yýðýnýn tepesinde bulunacaktýr.
Yýðýn bellek kesmeli G/Ç iþleminde de
kullanýlýr. Bu çalýþmanýn nasýl
yapýldýðý ilerideki bölümlerde anlatýlacaðýndan burada bu konuya deðinilmeyecektir.
4.1.7 Dolaylý Bellek Adresleme
Dolaylý adres, gerekli etkin adresin tutulduðu yerin adresidir. CPU program
bellekten emiri aldýktan sonra, etkin adresi okumak için alýnan emirin adres kýsmýný
kullanarak tekrar belleðe eriþir, Þekil 4.8. Etkin adres eriþilecek yerin adresidir.
Bellek
XX
YY
XXYY
XXYY + 1
AA
BB
AABB
3E
Dolaylý adresleyen emirin kodu
Dolaylý adres
Þekil 4.8. Dolaylý adresleyen emirin çalýþmasý.
LD A, [[ Adres]] emirini inceleyelim. Çift parantez içeriðin içeriði anlamýndadýr.
Bu emir icra edildiði zaman akümülatörde 3E deðeri oluþur. Dolaylý adreslemede etkin
adres
EA = [XXYY]
baðýntýsýyla verilir.
Dolaylý adresleme sýnýrlý alaný adresleyen emirlere sahip sayfalý bilgisayarlarda
çok yararlý olabilir. Çünkü emirin bulunduðu sayfanýn dýþýndaki bellek bölgesine,
programýn eriþmesini saðlayan en etkin yoldur. Sayfalý bilgisayarlarda dolaylý adresli bir
emir, sayfa içinde etkin adresin tutulduðu yerin adresini taþýr, Þekil 4.9.
Bellek
PPQQ
PPQQ + 1
PPYY
YY
Dolaylý adresleyen emir kodu
Emirin saðladýðý sayfa adresi
AA
BB
AABB
Adreslenen bellek alaný
Þekil 4.9. Sayfalý bilgisayarlarda dolaylý bellek adresleme.
4.1.8 Ýndeksli Bellek Adresleme
Ýndeksli adres, doðrudan ve imalý adresin toplamýdýr. Ýndeksli adresleme
modunda indeks kaydedicinin içeriði etkin adresi elde etmek için emirin adres kýsmýna
eklenir, Þekil 4.10. Ýndeks kaydedici, indeks deðerini içeren CPU’nun özel bir
kaydedicisidir. Emirin adres alaný bellekteki veri dizisinin baþlangýç adresini tanýmlar.
Dizideki her bir eleman bu baþlangýç adresine göre bellekte saklanýr. Baþlangýç adresi ile
elemanýn adresi arasýndaki uzaklýk, kaydedicide saklanan indeks deðerini oluþturur.
Ýndeks kaydedici doðru indeks deðerini içermek koþuluyla, dizinin herhangi bir
elemanýna ayný emirle eriþilebilir. Peþpeþe sýralanmýþ dizi elemanlarýna eriþimi
kolaylaþtýrmak için indeks kaydedici artýrýlabilir. Zaten indeks adý, bu kaydedici
içeriðinin deðiþme olasýlýðýnýn fazla olmasýndan gelmektedir.
Ýndeks
kaydedici
XXYY
Bellek
AA
Ýndeksli adresleyen emir kodu
Öteleme baytý
8E
Adreslenen bellek alaný
+
XXYY + AA
Þekil 4.10. Ýndeksli bellek adresleme.
4.2 EMÝR TÜRLERÝ
Bilgisayarlar çeþitli hasaplama iþlerini yürütmek için kullanýcýya esneklik saðlayan
büyük bir emir takýmý içerir. Bilgisayarlarýn emir takýmý bilgisayardan bilgisayara
deðiþir. Bu farklýlýk daha çok adres ve mod alanlarýndan yararlanarak operandlarýn
belirlenmesi yönteminde olur. Emir takýmlarýn yaptýðý gerçek iþlemler bir bilgisayardan
diðerine çok fark etmez. Emirler ayný görevi yapsalar dahi, iþlem kodlarý genellikle farklý
bilgisayarlarda farklý yapýdadýr. Ayrýca emirlere verilen sembolik adlar da farklý olur.
Buna raðmen çoðu bilgisayarlarda emirlerin dayandýrýldýðý temel iþlemler vardýr.
Bilgisayar emirleri üç sýnýfa ayrýlabilir:
1. Veri transfer emirleri
2. Veri iþlem (manipulation) emirleri
3. Program denetleme emirleri
Veri transfer emirleri, veriyi deðiþtirmeden bir yerden baþka bir yere taþýr. Veri
iþlem emirleri veriler üzerinde aritmetik, lojik, ve kaydýrma iþlemleri gerçekler. Program
denetleme emirleri ise karar verme olanaðý saðlar ve programýn icra yönünü deðiþtirir. Bu
emir türlerine ilaveten bazý bilgisayarlar özel uygulamalar için bazý özel emirlere sahip
olabilir.
4.2.1 Veri Transfer Emirleri
Veri transfer emirleri veriyi dðiþtirmeden bir yerden baþka bir yere taþýmaya yarar.
Çoðu transferler belek ile CPU kaydedicileri arasýnda, CPU kaydedicilerin kendi arasýnda,
veya CPU kaydedicileri ile giriþ ve çýkýþ arasýnda olur. Bilgisayarlarda kullanýlan sekiz
veri transfer emirinin listesi Tablo 4.1’de verilmiþtir. Her emire iliþkin mnemonik sembol
bu tabloda gösterilmiþtir. Farklý bilgisayarlar ayný tür emir için farklý mnemonik
kullanabilir.
Yükleme emiri bellekten veriyi alýp CPU kaydedicilerine yükler. Saklama emiri
yükle emirinin tersini yapar ve CPU kaydedicilerinden veri alýp bellek adresine depolar.
Taþý emiri ise çok kaydedicili mikroiþlemcilerde bir kaydediciden diðerine veri taþýmak
için kullanýlýr. Ama taþý emiri ayný zamanda CPU kaydedicileri ile bellek arasýnda, veya
farklý bellek alanlarý arasýnda veri transferi yapmak için de kullanýlabilir. Takas emiri iki
kaydedici veya bir kaydedici ile bellek adresi arasýnda bilgi deðiþ-tokuþu yapar. Ýtme ve
çekme emirleri yýðýn bellek ile CPU kaydedicileri arasýnda veri transferi yapar. Giriþ ve
çýkýþ emirleri ise CPU kaydedicileri ile giriþ ve çýkýþ arayüz cihazlarý arasýnda veri
transferi yapar.
Tablo 4.1. Veri transfer emirleri.
Adý
Yükleme(Load)
Saklama (Store)
Taþýma (Move)
Takas (exchange)
Ýtme (Push)
Çekme (Pop)
Giriþ (Ýnput)
Çýkýþ (Output)
Mnemonik
LD
ST
MOVE
XCH
PUSH
POP
IN
OUT
Giriþ/Çýkýþ (G/Ç) emirleri yükle ve sakla emirlerine benzerdir; aralarýndaki fark
bellek adresleri yerine dýþ kaydedicilerden transferin yapýlmasýdýr. Bilgisayarlar dýþ
dünya ile haberleþmek için belirli sayýda kapýya (port) sahiptir. Bir dýþ cihaza bir veya
daha çok kapý ayrýlabilir. Her kapý bir dýþ kaydediciye eþdeðerdir. Bellek alaný seçmede
olduðu gibi, her kapý kendine özgü bir adresle seçilir. G/Ç emirleri, veri transferi için
seçilen kapýyý belirlemek amacýyla emir yapýsýnda bir adres alaný içerir.
Bellek alanlarýný ve G/Ç kapýlarýný seçmek için iki ayrý adres tahsis biçimi
vardýr. Birincisi baðýmsýz G/Ç sistemini kullanýr, ikincisi ise bellek-izdüþümlü yapýdan
yararlanýr. Baðýmsýz G/Ç sisteminde, belleðe ve G/Ç kapýlarýna tahsis edilen adresler
birbirinden baðýmsýzdýr. Böyle bilgisayarlar ayrý G/Ç emirlerine sahiptir. Bellek adres
alaný, kapý adresleri tahsisinden etkilenmez.
Ýkinci alternatifte bellek adresleri G/Ç kapýlarýna tahsis edilir. Bu yapý bellekizdüþümlü G/Ç olarak bilinir. G/Ç transferleri yürütmek için ayrý adresler yoktur, çünkü
G/Ç kapýlarý bellek alanlarý olarak düþünülür. Her G/Ç kapýsý ayrý bir bellek alaný olarak
yorumlanýr. Bellek-izdüþüm yöntemini benimseyen bilgisayarlarda özel G/Ç emirleri
yoktur. Bellek iþlemleri ve G/Ç veri iþlemleri için ayný emirler kullanýlýr.
4.2.2 Veri Ýþlem Emirleri
Veri iþlem emirleri veriler üzerinde iþlemler gerçekleþtirir ve bilgisayara hesaplama
yeteneði saðlar. Bu emirler üç sýnýfa bölünebilir.
1. Aritmetik emirler
2. Lojik ve bit iþlem emirleri
3. Kaydýrma emirleri
4.2.2.1 Aritmetik Emirler
Dörtiþleme iliþkin toplama, çýkarma, çarpma, ve bölme aritmetik iþlem emirleri
çoðu bilgisayarda vardýr. Buna raðmen bazý mikroiþlemciler yalnýz toplama ve çýkarma
emirlerine sahiptir. O zaman çarpma ve bölme iþlemleri özel programlar vasýtasýyla
gerçekleþtirilir.Bu dört temel iþlem, herhangi bir sayýsal problemin çözümünü formüle
etmek için yeterlidir.
Aritmetik emirlerin listesi Tablo 4.2’de verilmiþtir. Artýrma (increment) emiri
bellekte veya kaydedicide saklanan deðere bir ekler. Azaltma (decrement) emiri ise bellekte
veya kaydedicide saklanan deðerden bir çýkarýr. FFH deðerine sahip bir sayýyý bir
artýrmak 00H, ve 00H deðerine sahip bir sayýyý bir azaltmak ise FFH sonucunu doðurur.
Tablo 4.2. Aritmetik emirler.
Adý
Artýrma (increment)
Azaltma (Decrement)
Toplama (Add)
Çýkarma (Subract)
Çarpma (Multýply)
Bölme (Divide)
Elde ile topla
Ödünç ile çýkarma
Olumsuz (2’li tümleme)
Mnemonik
INC
DEC
ADD
SUB
MUL
DIV
ADDC
SUBB
NEG
Toplama, çýkarma, çarpma, ve bölme emirleri dört tür veri için mevcut olabilir. Bu
aritmetik iþelmlerin icrasý esnasýnda kaydedicide olduðu varsayýlan veri türü, iþlem
kodunda kapsatýlmýþtýr.. Bir aritmetik emir iþaretli veya iþaretsiz tamsayýlarý, ikili veya
onlu sayýlarý, veya kayan-noktalý verileri belirtebilir.
4.2.2.2 Lojik ve Bit Ýþlem Emirleri
Lojik emirler kaydedici veya bellekte saklanan bit dizileri üzerinde ikili iþlemleri
gerçekleþtirir. Bu emirler ikili kodlayan biligiyi gösteren bitleri veya bit gruplarýný
iþlemek için çok yararlýdýr. Lojik emirler operandýn her bitini ayrý ayrý ele alýr ve Boole
deðiþkeni olarak iþleme tabi tutar. Lojik emirler kullanýlarak kaydedici veya bellekte
saklanan operandlardaki bit deðerlerini deðiþtirmek, bir bit grubunu silmek, veya yeni bit
deðerlerini operanda sokmak mümkündür.
Bazý lojik ve bit iþleme emirleri Tablo 4.3’te listelenmiþtir. Silme emiri belirli bir
operandýn tüm bitlerini sýfýrlar. Birleme emiri ise tersine operandýn tüm bitlerini birler.
Tümleme emiri operand bitlerinin tersini alýr. AND, OR, ve XOR emirleri operand bitleri
üzerinde bu emirlere karþý düþen lojik iþlemleri gerçekler. Bu emirler Boole iþlemlerini
gerçeklemelerine raðmen, bilgisayarda kullanýldýklarý zaman bit iþleme emirleri olarak
kabul edilirler. Seçilen bitin sýfýrlanmasý; birlenmesi, veya tümlenmesi olmak üzere
gerçekten üç bit iþleme emiri vardýr.
Tablo 4.3. Lojik ve bit iþleme emirleri.
Adý
Silme (Clear)
Birleme (Set)
Tümleme (Complement)
AND’leme
OR’lama
XOR’lama
Elde sýfýrlama
Elde birleme
Elde tümleme
Mnemonik
CLR
SET
COM
AND
OR
XOR
CLRC
SETC
COMC
4.2.2.3 Kaydýrma Emirleri
Operand içeriðini kaydýran emirler çok çeþitlidir. Kaydýrma, operand bitlerinin
saða veya sola kaydýrýldýðý iþlemlerdir. Kelimenin sonundan içeriye kaydýrýlan bit,
kullanýlan kaydýrmanýn türünü belirler. Kaydýrma emirleri lojik kaydýrmayý, aritmetik
kaydýrmayý, veya döndürme türü iþlemleri ifade eder.
Tablo 4.4’te dört cins kaydýrma emiri listelenmiþtir. Lojik kaydýrma, kaydýrma
iþlemi sonunda son bit konumuna sýfýr sokar. Son bit konumu, saða kaydýrma için en
soldaki bit ve sola kaydýrma için en saðdaki bit konumudur. Aritmetik kaydýrmalar,
iþaretli sayýlarýn kaydýrýlmasý kuralarýna uyar. Aritmetik saða kaydýrma emiri en sol
konumdaki iþaret bitinin konumunu korur. Ýþaret biti, geriye kalan bitlerle birlikte saða
kaydýrýlýr, ama iþaret bitin kendisi deðiþmeden kalýr. Aritmetik sola kaydýrma emiri, en
saðdaki son bit konumuna sýfýr koyar ve lojik sola kaydýrma emirine denktir. Bu yüzden
lojik sola kaydýrma emirinin bulunduðu çoðu bilgisayarlarda aritmetik sola kaydýrma emiri
yoktur.
Tablo 4.4. Kaydýrma emirleri.
Adý
Lojik saða kaydýrma
Lojik sola kaydýrma
Aitmetik saða kaydýrma
Aritmetik sola kaydýrma
Saða döndürme
Sola döndürme
Elde üzerinden saða döndürme
Elde üzerinden sola döndürme
Mnemonik
SHR
SHL
SHRA
SHLA
ROR
ROL
RORC
ROLC
Döndürme emirleri dairesel kaydýrma saðlar. Kelime sonundan dýþarý kaydýrýlan
bitler, lojik kaydýrmada olduðu gibi, kaybolmaz, ama diðer sondan içeri alýnýrlar. Elde
üzerinden döndür emirleri, elde bitini içeriði döndürülecek kaydedicinin uzantýsý olarak
görür. Bu yüzden elde üzerinden sola döndür emiri, elde bitini kaydedicinin en saðdaki bit
konumuna, en soldaki bitini ise eldeye transfer eder, ve tüm kaydediciyi bir bit sola
kaydýrýr.
4.2.3 Program Denetleme Emirleri
Program emirleri ardýþýl bellek alanlarýna yerleþtirilir. Denetleme birimi
tarafýndan program iþlendiði zaman, emirler ardýþýl bellek alanlarýndan okunur ve birer
birer icra edilir. Bellekten her emir alýnýþýnda PC içeriði bir sonraki emirin adresini
içerecek þekilde artýrýlýr. Veri transfer veya veri iþlem emirlerinin icrasýndan sonra,
denetim tekrar emir alma dönemine geçer ve PC kullanýlarak bir sonraki emir alýnýr.
Bunun
tersine, program denetleme emirleri PC’deki adres deðerini deðiþtirebilir ve
program icrasý yönünün saptýrýlmasýna sebep olabilir. Program denetleme emirin icrasý
sonucunda PC’de meydana gelen deðiþme emir icrasýnýn sýrasýnda deðiþikliðe yol açar.
Bu özellik, farklý program dilimlerine dallanma yeteneði verir.
Bazý program denetleme emirleri Tablo 4.5’te listelenmiþtir. Dallanma ve atlama
emirleri ayný þeyi ifade edecek biçimde kullanýlýr, ama bazen farklý adresleme modlarýný
göstermek için kullanýlabilirler. Dallanma emirleri genellikle bir adresli emirlerdir.
Tablo 4.5. Program denetleme emirleri.
Adý
Dallanma
Atlama
Sýçrama (Bir sonraki emiri atla)
Altprogramý çaðýrma
Altprogramdan geridönme
Karþýlaþtýrma (Çýkarma yaparak)
Test etme (AND’leyerek)
Mnemonik
BR
JMP
SKP
CALL
RET
CMP
TEST
Dallanma ve atlama emirleri koþullu veya koþulsuz olabilir. Koþulsuz dallanma
emiri herhangi bir koþul olmadan belirtilen etkin adrese dallanmayý saðlar. Koþullu
dallanma emiri ise pozitif veya negatif sonucun olmasý durumunda dallan gibi bir koþulu
beraberinde taþýr. Ýstenilen koþul saðlanýrsa, PC etkin adres ile yüklenir ve bir sonraki
emir bu adresten alýnýr. Koþul saðlanmaz ise, PC içeriði deðiþmez ve bir sonraki emir
icra edilir.
Sýçrama (skip) emiri adres alaný gerektirmez. Koþullu sýçrama emiri, koþul
saðlanýnca bir sonraki emire atlar.Bu iþ, alma dönemindeki artýrmaya ilaveten icra
döneminde de PC artýrýlarak baþarýlýr. Koþul saðlanmaz ise, icra bir sonraki emirle
devam eder. Bir sonraki emir koþulsuz bir dallanma emiri ise, o zaman koþul saðlanmazsa
dallan iþlemi gerçekleþtirilmiþ olur. Halbuki koþullu dallanma emiri koþul saðlanýnca
atlama saðlýyordu.
Karþýlaþtýr ve test et emirleri gerçekte program denetleme emirleri deðildir, çünkü
programýn icra sýrasýný kendileri doðrudan doðruya deðiþtiremezler. Tablo 4.5’te
bulunmalarýnýn nedeni, kendilerinden sonra gelen dallanma emirleri için bayrak
oluþturmada kullanýlmalarýdýr. Karþýlaþtýrma emiri iki operandýn farkýný hasaplar, ama
fark deðer saklanmaz. Ama durum bayraklarý iþlemin sonucuna göre güncelleþtirilir.
Benzer þekilde, test etme emiri iki operandýn lojik olarak AND’lenmesini saðlar ve sonucu
saklamadan veya operandlarý deðiþtirmeden sadece belirli bazý bayraklarý güncelleþtirir.
Programýn
icrasýný
altprogramlara
yönlendiren
emirlere
deðiþik
adlar
verilmektedir. En yaygýn olan adlar altprogramý çaðýr, altiþlemi çaðýr, altprograma atla,
veya altprograma dallan adlarýdýr. Altprograma dallan emirin bir adres alaný vardýr.
Altprogram çaðýrma emiri aþaðýdaki mikroiþlemlerle gerçeklenir:
SP ← SP -1
Yýðýn göstericiyi azalt
M[SP] ← PC
Dönüþ adresini yýðýnda sakla
PC ← Etkin adres
Denetimi altprograma ver
Her altprogram çaðýran programa geridönme emiriyle sonlanýr. Altprogramdan
geridönme emiri, yýðýndan dönüþ adresini çekip PC’ye transfer ederek gerçekleþtirir.
PC ← M [SP]
Dönüþ adresini PC’ye taþý
SP ← SP +1
Yýðýn göstericiyi artýr
Programýn icrasýný normal sýrasýndan saptýrýp baþka noktalara yönlendiren bazý
önemli olaylar vardýr. Bu olaylar kesmeli çalýþmayý oluþturur. Kesme, donaným veya
yazýlýlmla gerçekleþtirilebilir. Donanýmlý kesmede icra sýrasýnýn deðiþtirilme anýný dýþ
cihazlar belirler. Bu konu daha sonra anlatýlacaktýr. Bazý CPU’lar yazýlým kesme
emirlerine (SWI) sahiptir. Ýcra sýrasýnýn hangi noktaya yönlendirileceðini bu emirin ima
ettiði bellek alanýnda bulunan etkin bellek adresi gösterir.
4.3. BAZI ÖRNEK PROGRAMLAR
Asseembli dili emirlerinin nasýl kullanýldýðýný göstermek amacýyla bazý örnek
programlar yapýlacaktýr. Yukarda anlatýlan emir türlerine uyduðu halde, çoðu bilgisayarýn
emirlerinin mnemonikleri birbirinden farklýdýr. Ayrýca ayný görevi gerçekleyen emirlerin
bile etkiledikleri durum bayraklarý farklý olabilir. Bu yüzden tüm bilgisayarlarý
kapsayacak ortak bir programlama dili mümkün deðildir. Buradaki örnek programlar 6802
CPU emir takýmýna dayanýlarak yazýlacaktýr.
Örnek 4.1. BCD (Ýkili Kodlanmýþ Onlu)-Binary (ikili) sayý dönüþümü yapýlmak
isteniyor. BCD sayý iki haneli (örneðin 0110 0010 = 62 gibi) olup E000H adresinde
tutulmaktadýr. Dönüþüm kuralý aþaðýdaki gibidir.
1. Tamsayý bölmesi yaparak BCD sayý 2’ye bölünür.
2. Kaydýrma ile yapýlan 1. maddedeki bölme iþleminde, onlar hanesinden birler
hanesine bir 1 geçiþi olmuþ ise, anlamsýz (birler) haneden 3 çýkararak düzeltme
yapýlýr.
3. Kalan bir yerde saklanýp, elde edilen bölüm tekrar tamsayý bölmesi yapýlarak
2’ye bölünür.
4. Bu bölme iþlemi bölüm hanesinde tamsayý çýkmayýncaya kadar tekrarlanýr.
5. Kalanlar uygun sýrada dizilir.
Çözüm. Bu örnekte BCD sayý 2 haneli iþaretsiz bir sayý olduðundan, deðeri en
fazla 99 olabilir. Bu yüzden saf ikili karþýlýðý için 7-bitlik bir alan yeterlidir. E001H adres
alaný saf ikili sayýnýn, diðer bir deyiþle kalanlarýn tutulduðu yerdir. Programda kullanýlan
# iþareti yakýn (immediate) veriyi ve $ iþareti ise saðýndaki sayýnýn onaltýlý tabanda
yazýldýðýný göstermektedir. Program Þekil 4.11’de verilmiþtir.
BAÞ
DÜZ
DUR
LDA B # $ 08
LDA A$ E000
LSR A
ROR $ E001
BIT A # $ 08
BEQ DÜZ
SUB A # $ 03
DEC B
BNE BAÞ
JMP DUR
BCD sayýdaki bit uzunluðunu belirle
BCD sayýyý A’ya taþý ve
2’ye böl
Kalaný sakla
Birler hanesinin en anlamlý biti
1 midir ?
Düzeltme yap
Bütün bitler için iþlem
tekrarlandý mý ?
Bekle
Þekil 4.11. Ýkili Kodlanmýþ Onlu-ikili dönüþümü.
Örnek 4.2. 6802 CPU çarpma emirlerine sahip deðildir. Bu cins CPU’larda çarpma
iþlemi altprogram olarak kullanýlan özel bir yazýlým ile saðlanýr. Bu örnekte 16-bitlik
iþaretsiz saf ikili sayýlarý çarpabilen bir program yazýlacaktýr. Çarpýlan 0104-0105H
adreslerinde, çarpan ise 0106-0107H adreslerinde tutulmaktadýr. Çarpým 32-bit olup
0100H, 0101H, 0102H, ve 0103H adreslerinde tutulacaktýr.
Çözüm. Çarpma iþleminin gerçeklenmesinde kullanýlacak algoritmanýn çalýþmasý
aþaðýda verilmiþtir.
1. Çarpan bitini test et. Eðer bit 1 ise, çarpýlaný kýsmi çarpýma ekle. Sýfýr ise,
çarpýlaný kýsmi çarpýma ekleme.
2. Kýsmi çarpýmý bir bit saða kaydýr.
3. 1. ve 2. adýmdaki iþlemleri tüm çarpan bitleri için tekrarla.
Kýsmi çarpýmlardaki anlamsýz bitler yalnýz bir kere toplama iþlemine girdiðinden,
çarpýlan kýsmý çarpýma eklenirken 16-bitlik toplama yapmak yeterli olmaktadýr. Kýsmi
çarpýmýn her kaydýrýlýþý, en anlamsýz bitten baþlayarak, çarpýmýn yeni bir bitini verir.
16 defa kaydýrma yapýldýðýndan, çarpým kaydedicinin anlamsýz yarýsýndaki çarpmaya
baþlamadan önceki deðer tamamen atýlmýþ olur. Bu yüzden çarpým kaydedicinin anlamlý
yarýsý programýn baþlangýcýnda sýfýrlandýðý halde anlamsýz yarýsý temizlenmemiþtir.
Program Þekil 4.12’de verilmiþtir.
KAY1
LDA
CLR
CLR
ROR
ROR
B # $ 10
$ 0102
$ 0103
$ 0107
$ 0106
BCC $ KAY2
CLC
LDA A $ 0102
ADC A $ 0104
STA A $ 0102
LDA A $ 0103
ADC A $ 0105
STA A $ 0103
KAY2
SON
ROR
ROR
ROR
ROR
$ 0103
$ 0102
$ 0101
$ 0100
DEC B
BEQ $ SON
JMP $ KAY1
WAI
Operandlarýn uzunluðunu belirle
Çarpým kaydedicinin anlamlý
yarýsýný sýfýrla
Çarpaný elde
üzerinden döndür
Çarpanýn test edilen biti = 0
mýdýr?
Çarpan biti = 1 ise
çarpýlan kýsmi çarpýma
ekle. Yeni kýsmi,
çarpýmý çarpým kaydedicide
sakla
Çarpým kaydediciyi
1-bit saða kaydýr.
Tüm çarpým bitleri
için iþlemler tekrarlandý mý ?
Þekil 4.12. 2-baytlýk sayýlarýn çarpýmý.
Örnek 4.3. B001H adresinden baþlayan ve uzunluðu B000H adresinde tutulan,
küçükten büyüðe doðru sýralanmýþ, ve elemanlarý bir bayt büyüklüðünde pozitif
tamsayýlar olan bir sýralý dizi veriliyor. 2111H adresinde oturan bir giriþ cihazýndan
alýnan bir baytlýk pozitif tamsayýnýn bu dizide bulunup bulunmadýðýný test ettikten
sonra, eðer dizide yoksa, dizinin sýralý oluþunu bozmadan dizide uygun yere koyulmasýný
saðlayacak ve dizi uzunluðunu bir artýracak bir program yazýnýz.
Çözüm. Giriþ cihazýndan alýnan bilgi dizinin tüm elemanlarýyla sýrayla
karþýlaþtýrýlýr. Karþýlaþtýrma CMP emiriyle yapýlýr. Eþitliðe rastlanýrsa, giriþ
cihazýndan alýnan deðer dizide vardýr, dolayýsýyla program sonuna atlanýr. Eðer girilen
bayt dizi elemanlarýnýn birinden küçük kalýyorsa, girilen baytý bu noktada diziye
sokmalýyýz. Dizede yer açmak amacýyla dizinin bu noktadan sonraki elemanlarý bir bayt
ileri kaydýrýlýr. Girilen bayt dizinin tüm elemanlarýndan büyükse, elemanlarýn yerlerinde
bir deðiþiklik yapýlmayacak, sadece girilen bayt dizinin sonuna eklenecektir. Girilen bayt
dizeye ilave edilince, dizi boyu mutlaka bir artýrýlacaktýr. Program Þekil 4.13’de
verilmiþtir.
Dizinin baþlangýcýný belirle
Dizi uzunluðu izlemek
için bellekte sayýcý yap
Dýþardan bilgiyi al
[Akü]-[Bellek] iþlemini yaparak karþýlaþtýr.
Bilgi dizide vardýr.
[Akü] < [Bellek] dir. Bilgi dizide yoktur.
LDX # $ B001
LDA B $ B000
STA B $ AFFF
LDA A $ 2111
BAÞ
CMP A $ 00,X
BEQ SON
BMI YERLEÞ
INX
DEC $ AFFF
BNE BAÞ
YERLEÞ LDA B $ 00, X
STA A $ 00, X
TBA
ÝNX
DEC $ AFFF
BGE YERLEÞ
INC $ B000
SON
WAI
Tüm elemanlar için karþýlaþtýrma
yapýldý mý ?
Alýnan bilginin koyulacaðý
yer belirlenmiþtir. Kaydýrmayý
yap ve bilgiyi
belleðe yerleþtir.
[Akü] > [Bellek] ise alýnan bilgiyi
dizi sonuna yerleþtirmeye yarar
Þekil 4.13. verilen bir baytlýk bilginin sýralý bir dizide bulunup bulunmadýðýný
araþtýran program.
Örnek 4.4. Ýþaretsiz ikili sayýlardan oluþan bir sayý dizisi azalan sýrada tasnif
edilmek isteniyor. Dizi uzunluðu 0040H adresinde tutulmaktadýr. Dizinin kendisi 0041H
adresinden baþlamaktadýr. Bu sayý dizisi sýralama programýný yazýnýz.
2111
AFFF
B000
B001
B002
:
(2)
39
Uzunluk kopyasý
Uzunluk
10
22
36
38
45
Dizi
(3)
(1)
56
72
.
.
Þekil 4.13’ün devamý.
Çözüm. Örnek dizi 25 12 86 69 10 70 olsun. Sayý dizisini sýralayabilmek için etkin
bir algoritmanýn kurulmasý gerekir. Dizilerin sýralanmasýnda genellikle yuvalý (nested)
döngüler kullanýlýr. Döngülerin her ikisi FOR...NEXT biçiminde seçilirse dizinin sýralama
süresi sabit olur. Ama döngülerden biri FOR...NEXT diðeri WHILE...WEND kuralýna
göre yapýlýrsa, sýralý bir dizi verildiði zaman, dizinin sýralanmasý için yalnýz bir tarama
iþlemi yeterli olur. Aksi halde dizideki eleman sayýsý kadar tarama iþlemi gerekli olur.
Þekil 4.14’teki programda FOR...NEXT ve WHILE...WEND döngüleri kullanýlmýþtýr, ve
her taramada dizinin en küçük elemanlarýndan birinin belirlenmesi amaçlanmýþtýr.
Bir tarama iþlemi esnasýnda iki komþu sayýnýn yerleri deðiþtirilmiþ ise yeni bir
taramanýn daha yapýlmasý zorunlu olmaktadýr. Bu yer deðiþtirme takas bayraðýnýn
birlenmiþ olmasýndan anlaþýlmaktadýr. Örnek dizi sýralandýðý zaman 86 70 69 25 12 10
biçimini alýr.
BAÞ
KARÞ
CLR $ 0038
LDA A$ 0040
STA A$ 0039
DEC $ 0039
BEQ SON
LDX #$ 0041
LDA A$ 0,X
CMP A$ 1,X
BPL TEKR
LDA B$ 1,X
Takas bayraðýnýn yerini belirle
Dizi uzunluðunun
kopyasýný çýkar
(Eleman sayýsý-1) karþýlaþtýrma yap ve
tek elemanlý dizi olduðunu belirle
Dizinin baþlangýcýný belirle
Komþu iki sayýyý
karþýlaþtýr
Önceki sayý sonrakinden büyükse yer deðiþtir
Önceki sayý küçük ise
TEKR
SON
STA
STA
LDA
STA
INX
DEC
BNE
DEC
BEQ
WAI
A$ 1,X
B$ 0,X
A #$ 01
A$ 0038
$ 0039
KARÞ
$ 0038
BAÞ
takas yap
Takas bayraðýný birle
Dizi sonuna varýldý mý ?
Yeni tarama gerekiyor mu ?
Þekil 4.14. Sayý dizisini büyükten küçüðe doðru sýralama programý.
Download

Специальное предложение Термальный курорт