Académique Documents
Professionnel Documents
Culture Documents
(ADDRESSING MODES)
ADRESLEME MODU NEDİR?
Adresleme modu, ASSEMBLY DİLLERİNDE kullanılan İŞLEM YÖNTEMLERİDİR
Bir komutun gerektirdiği işlemin yürütülmesi sırasında VERİLERİN bir bellek gözünden yani
bir ADRESTEN alınması veya bir ADRESE yüklenmesi ya da akümülatör ve kaydediciler
arasında değiştirilmesi için değişik yöntemler uygulanmaktadır.
1- Daha çok ADRESLEME MODU geliştirilerek ihtiyaç duyulan Komut Sayısı azaltılmıştır.
Bir bilgisayarın İSLEM GÜCÜ, kullanılan KOMUT (Instruction) sayısıyla orantılıdır. Fakat
komut sayısı çokluğu bir takım kullanılma güçlükleri yaratmaktadır. Bugün dahi, sürekli
olarak, KOMUT SAYISINI azaltıcı bilgisayar (Reduced Instruction Set Computer – RISC)
araştırmaları yapılmaktadır.
Komut sayısının azaltılmasıyla oluşan açık ise ADRESLEME MODLARIYLA kapatılmıştır.
•Assembly dilinin bugünkü diller ile birlikte kullanılması sırasında alt program hazırlığı
kolaylaşmaktadır.
Görüldüğü gibi mikroişlemciler geliştikçe komut sayısı azaltılmış buna karşılık ADRESLEME
MODLARI artırılmıştır.
Komutun, “OP CODE”dan sonra gelen adres bölümünde, transferi yapılacak VERİNİN,
çıkacağı (source) ve gideceği (destination) devrelerin ADLARI bulunmaktadır.
Bu durum Şekil 3.2 de şematik olarak gösterilmiştir. Bir INTEL mikroişlemcisi için DOĞAL
ADRESLEME YAZILIM KALIBI:
A ve B yerinde Tablo 3.1’de görüldüğü gibi, AKÜMÜLATÖR, herhangi bir KAYDEDİCI veya
BELLEK olabilir.
“B” kaydedicisindeki VERİ’yi “A” kaydedicisine (akümülatöre) aktar (transfer et) demektir.
0 1 0 0 0 1 1 1
7 6 5 4 3 2 1 0
Şekil 3.2-8 bit’lik mikroişlemcide Doğal Adresleme için kullanılan komuttaki bit sıralaması.
Şekil 3.2de Görüldüğü gibi, 8 bit’lik bir bilgisayar belleğinde 1 byte’lık bir bellek gözü
kullanılarak iki kaydedici arasındaki VERİ transferi gerçekleştirilmiştir.
Örnekler:
(Temp)à DE
Doğal adresleme yöntemi daha çok kaydediciler arasındaki işlemler için kullanıldığından, bu
yönteme KAYDEDİCİ ADRESLEME YÖNTEMİ” veya daha kısa olarak “KAYDEDİCİ
İŞLEMİ” (REGISTER OPERATIONS) da denir.
HEMEN ADRESLEME
(IMMEDIATE ADDRESSING)
VERİ yazılmaktadır.
Eğer VERİ bir byte’ tan daha geniş yer kaplıyorsa bir üçüncü byte’ ta kullanılabilecektir.
16 bit’ lik veya daha geniş kapasiteli mikroişlemcili bilgisayarlarda, 1 KELİMELiK (WORD)
alana hem OPCODE hem de VERİ sığacağından bellek adresinde kaplayacağı yer de daha az
olacaktır.
HEMEN ADRESLEMEDE bellekteki görüntü, Şekil 3.3’te verilen gibi olmaktadır. İşlemin
sıfırıncı adresten başladığı kabul edilmiştir.
Şekil 3.3- Hemen adresleme yönteminde Bellek ve Mikroişlemcideki görüntü.
Şekil 3.3’te işlemi yapılacak VERİ 99H gibi herhangi bir Hex sayı olabilir verilen görüntünün
programda yazılışı mikroişlemcisine göre bazı küçük değişiklikler göstermektedir.
63 Hex (99)
40 Hex (64)
FF Hex
0F Hex
0040 Hex
(64)
(4094)
DİREK ADRESLEME
(DIRECT ADRESSING)
Yukarıda açıklanan Doğal ve Hemen adresleme yöntemi uygulamaları sınırlı kalmaktadır.
Direk adresleme yöntemi ise, gerek genel amaçlı uygulanabilir olması, gerekse de
programlama kolaylığı bakımından yaygın olarak veya buraya VERİYİ depolayarak kullanılan
bir yöntemdir.
Direk adresleme yönteminde, belleğin herhangi bir bölgesindeki VERİ’ ye doğrudan ulaşmak
veya bunun tersini yapmak mümkün olabilmektedir.
Örneğin:
Bu yazılımın anlamı:
için konmuştur.
Programın girilişi sırasında H harfi girilmez. Yukarıdaki yazılım şekli bir yazılım kuralıdır.
Şekilde görüldüğü gibi akümülatörde “11001010” gibi bir kayıt var. Bu kayıt
‘ST’ komutu OP-CODE’ unun 8080’lerdeki Hexodecimal kodu Tablo 3.1 ‘de de gösterilmiş
olduğu gibi ‘32”dır.
Dolayısıyla:
0002 adresinde: Akümülatör içeriğini Direk olarak belleğe depo et (Store accumulator direct)
anlamındaki “0011 0010’ kayıtlıdır.
İşlem görecek olan ve akümülatördeki kayıtlı bulunan “1100 1010’ sayısının gideceği 3A78H
B adresini gösteren 8’er BİT’lik iki sayı bulunmaktadır.
Bilindiği gibi Hexodecimal bir sayının Binary karşılığı, her bir rakamının dört basamaklı
Binary bir sayı olarak yapılması suretiyle oluşturulmaktadır. Yani,
Hex Binary
Bu Binary sayı 8 bit’lik tek bellek gözüne sığmadığı için Şekil 3.4’te görüldüğü gibi iki göze
yani iki ADRESE yazılır.
şematik gösterilimi.
LDA 3A78H
Yazım şekilleri genel kurallarla saptanmış olmasına rağmen mikroişlemciyi üreten, dolayısıyla
da programı hazırlayan firmaya göre bazı değişiklikler gösterebilmektedir.
Yukarıdaki yazılımın şematik gösterilimi de Şekil 3.4’ dekine benzer şekilde olacaktır.
Örnekler:
FF Hex addr
L0
OF Hex addr.
Hi
L0
D4 Hex addr
Hi
0001 Hex
(addr. Hi)
0000 Hex
(addr. Lo)
ENDİREK ADRESLEME
(INDIRECT ADRESSING)
Endirek adresleme de çok uygulanan yöntemlerden biridir. Bellekte kayıtlı bulunan bir
programın belirli bir adresindeki veya adres bölgesindeki bilgileri almak veya oraya yeni bilgi
eklemek ya da bir değişiklik yapmak gerektiğinde, ENDİREK ADRESLEME yöntemi
uygulanmaktadır.
Endirek adreslemede belirli bir adresteki VERİ alış verişi, bu adresi taşıyan
Şekil 3.5te çoğunlukla uygulanan, bir ara adres yoluyla ENDİREK ADRESLEME örneği
verilmiştir.
LDA ((1050H))
Akümülatörü, 1050 adresinde kayıtlı bulunan adresin gösterdiği bellek gözünün içeriği
ile yükle
Bilinmektedir ki her bir hex basamağın (rakamın) BINARY karşılığı 4 bit’ liktir.
Bellek gözleri 8 bit’lik olduğundan her bir göze 2 basamaklı Hex sayı sığabilmektedir. Bu
nedenle iki basamağı geçen Hex sayılann devamı otomatikman bir sonraki bellek gözüne
kaydolmaktadır.
Endirek adreslemede, Şekil 3.5’te belirtilen örnekte olduğu gibi, Bellek gözünden
‘AKÜMÜLATÖRE kayıt yapıldığı gibi, AKÜMÜLATÖRDEN Bellek gözüne de kayıt
yapılmaktadır.
Örnekler:
1. Z80
Mikroişlemcili bir bilgisayarda, bellekte kayıtlı bulunan programın 1000’inci adresinden
itibaren 100 byte’ lık bir BLOK’ un her bir adres başlangıcı, programın bir başlangıç fazı
olarak “0” (sıfır) yapılsın.
Çözümün mantığı;
Önce, uygun bir kaydedici çifti ki bu kaydedici çifti BC, DE veya HL çiftinden biri olabilir,
başlama noktasını belirtmek üzere l000 Hex adresiyle yüklenmeli, ve sonra da, bu adres “1”
artırılırken, bir sayıcı tarafından da, çevrim (LOOP) boyunca, belirtilen blok sayısı kadar
döngü sağlanmalıdır. Yani burada, 100’den başlanarak geri saymak suretiyle sıfıra kadar
döngü işlemi devam edecektir.
Bu işlemlerin her adımında da yeni adrese “0” sıfır bitinin kaydı yapılacaktır. Bu da
akümülatör ‘aracılığıyla sağlanabilecektir.
Programın Yazımı:
KOMUT AÇIKLAMA
LD D, 100 :”D” kaydedicisine 100 döngü sayısını yükle. (Döngü sayımını başlatma)
LD A 0 :”A” akümülatörüne, kopya edilecek olan “0” başlangıç değerini yükle. (Kopya
edilecek başlangıç değeri).
DJNZ LOOP 1 :D kaydedicisi içeriğini 1eksilt. Eğer yeni değer “0” değilse LOOP 1’e dönerek
işleme devam et.
LD (load): Yükle
DJNZ (Decrement....., Jump if Non-Zero):.....‘da kayıtlı sayıyı “1” eksilt ve bu yeni sayı “0”
değilse başa dön.
Burada,”.....”lı kısım da, D kaydedicisi var. Başa dönme işlemi de LOOP 1 başlangıcıdır.
“BC” kaydedici çiftinin içeriğine göre işlem yapılacaktır. Endirek adresleme “BC” tarafından
yapılmaktadır. Bu yönteme, KAYDEDİCİ ENDİREK ADRESLEME MODU (Register
Indirect Addressing Mode) denmektedir.
Programın uzunca olması nedeniyle, “KISA YAZIM,” ve “MAKİNA KOD NO” yazılmamıştır.
(INDEXED ADRESSING)
İngilizce “Index” kelimesinin Türkçe sözlükteki karşılığı “DİZİN”dir. Fakat bu terim günlük
konuşmada fazla kullanılmamaktadır. Bu nedenle “Indexed”ın karşılığı olarak “SIRALI”
kullanılacaktır.
Sıralı adresleme, programcıya, çoklu VERİ TABLOSU veya DİZİYE (array) ulaşma kolaylığı
sağlamaktadır.
Dizilerin ard arda gelen elemanları arasında bir takım işlemlerin yürütülmesi SIRALI
ADRESLEME metoduyla daha basit hale gelmektedir.
LD A, BA +(X)
Açıklaması:
Akümülatörü, BA temel adresinden sonra gelen X’ inci sıradaki adreste bulunan sayı ile yükle.
Şekilde; Taban adres (BA)= 100, Sıra No (X)= 10, yüklenecek sayı=16 olarak alınmıştır.
Görüldüğü gibi, SIRALI KAYDEDİCİYE kaydedilmiş olan TABAN ADRESE (100)10 sıra
numarası eklenerek ETKİN ADRES (110) bulunmuştur. Bu adresteki 16 sayısı da
AKÜMÜLATÖRE yüklenmiştir.
Bellekteki bir sayının, Akümülatöre yüklenmesi için bu kadar uzun işlem yapılması biraz
zaman kaybına neden olmaktadır. O halde bu tür işlemin bir yararının bulunması
gerekmektedir.
Sıralı adresleme yönteminin yararını daha iyi belirleme bakımından, aynı işlemi hem DIREK
ADRESLEME yöntemi, hem de SIRALI ADRESLEME yöntemi ile
yapalım:
A ve B gibi iki dizi bulunsun. Dizilerin her biri N elemanlı olsun. Program bu iki dizinin
toplanarak belleğe kaydını istesin.
Bu işlemi yürütebilmek için, önce dizilerin belleğe kaydı gerekmektedir. Bu dizilerden A dizisi
belleğe 10. adresten itibaren, B dizisi 50. adresten itibaren, Toplam değerleri de 90. adresten
itibaren kaydedilsin.
Örnek olarak dizilerin ilk üç sayıları alınırsa bellekteki durum şöyle olacaktır:
10 A1 50 B1 90 A1+A1
11 A2 51 B2 91 A2+B2
12 A3 52 B3 92 A3+B3
LDA 10
ADDA5O
STA 90
LDA 11
ADD A 51
STA 91
Adres sıra numaraları konulurken N<40 olduğu kabul edilmiştir. Görüldüğü gibi DİREK
ADRESLEME yönteminde uzun bir program gerekmektedir. Her program satırının işlenişi
kısa sürmektedir. Fakat programın tamamı düşünüldüğünde uzun bir zaman olacaktır.
PROGRAM AÇIKLAMA
LD X #0 :Sıralı kaydediciyi dizinin ilk sırası olan “0” ile hemen (#)yükle.
Ek açıklama:
A (Accumulator) : Akümülatör.
X :Bellekteki işlem gören VERILERIN bulunduğu adresin, “0”dan başlamak suretiyle, sırasını
gösteren, SIRALI KAYDEDICI numarasıdır. Aynı zamanda sıralı kaydediciyi sembolize
etmektedir. Yukarıdaki programda ilk işlem için X=0 değerini almıştır. X=0 iken işlem gören
bellek gözlerinin adresleri: 10,50 ve 90’dır. Sıralı kaydedici “1” arttığında yani X= 1
olduğunda 11, 51 ve 91’inci adreslerdeki VERİLER işlem görmektedir. Ve X=N oluncaya
kadar işlem devam etmektedir.
LEA (Load Effective Adresse) : Yük etkin adresi. (Yukarıda açıklaması yapılmıştı).
Örnekler:
Yukarıda,
EA= Sıralı kaydedicinin 16 bit’lik adresi + komutun 8 bit’lik adresi (düşük değerli bit olarak)
Eğer bir DİZİNİN TEMEL ADRESİ olarak komutun 8 bit’lik adresi tahsis edilirse bu bir
dezavantaj olur.
Zira, bir dizinin TABAN ADRESİ sıralı adresleme yoluyla (indexed addressing) ancak 28 =
256 bellek gözüne ulaşabilecektir.
Bu sakıncayı gidermek için, Z80 üreticileri daha değişik TABAN ADRESLEME (BASED
ADDRESSING) yöntemleri geliştirmişlerdir. Bunlar KULLANMA TALİMATLARINDA
(INSTRUCTION BOOK) açıklanmıştır.
(2 byte OP-CODE)
28 Hex (40)
Örnekteki “40” sayısı Temel adresten sonra gelen 40. sıradaki adresi göstermektedir.
Verinin bulunduğu adrese, yukarıda da açıklandığı gibi ETKİN ADRES (Effective Addresse
-EA) denmektedir.
Eğer Mikroişlemci, Z80, I8080 gibi 8 bitlik ise, iki yöne doğru 28/2=128 ADRESLEME
yapılabilecektir.
Mikroişlemci 16 bit’lik ise KOMUT ADRESİNDEN iki yöne doğru 216/2 = 32768 adresleme
yapılabilir.
Bu tanımlamalardaki, iki yöne doğru ifadesi (±) olarak ta ifade edilebilir: ± 128, ± 32 768 gibi
Örnekler: