Vous êtes sur la page 1sur 16

ADRESLEME MODLARI

(ADDRESSING MODES)
ADRESLEME MODU NEDİR?
Adresleme modu, ASSEMBLY DİLLERİNDE kullanılan İŞLEM YÖNTEMLERİDİR

MOD (MODE) kelime anlamı olarak, Tarz, usul, yöntem demektir.

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.

Bu yöntemler bilgisayardan bilgisayara değiştiği gibi, aynı bilgisayarda da yine

değişik ADRESLEME YÖNTEMİ uygulanmaktadır.

27 çeşit ADRESLEME MODU vardır.

Burada, genellikle her makinada uygulanmakta olan 6 değişik MODUN açıklaması


yapılacaktır. Bu MODLAR hakkında yeterli bilgiye sahip olunması diğer MODLARIN
anlaşılmasını da kolaylaştıracaktır.

Her bilgisayar tarafından kullanılan MODLAR, KULLANIM KİTAPÇIKLARINDA

“Instraction Book” açıklanır.

NEDEN ADRESLEME MODLARINA İHTİYAÇ DUYULMUŞTUR?

Değişik adresleme modları, kullanılma amacına göre, bilgisayardan daha hızlı

ve daha randımanlı şekilde yararlanılmasını sağlamaktadır.

Aşağıda sıralanan hususlar ADRESLEME MODLARININ bilgisayar çalışmasındaki


etkinliğini daha belirgin olarak göstermektedir:

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.

Bu yaklaşım iki avantaj sağlamıştır:

•Assembly dilindeki PROGRAM YAZMA güçlükleri hafifletilmiştir.

•Assembly dilinin bugünkü diller ile birlikte kullanılması sırasında alt program hazırlığı
kolaylaşmaktadır.

Mikroişlemcilerin gelişme süreci içerisinde, komut sayısı azaltılarak, ADRESLEME


MODLARININ artırılması uygulaması şu örneklerle daha belirgin olarak
görülmektedir:

•1975’lerde uygulama alanına konulmuş olan Z80 Mikroişlemcilerinde 159 komut ve 5


ADRESLEME MODU kullanılıyordu.

•1979’larda kullanıma geçen MC6809 mikroişlemcilerinde 59 komut ve 10 ADRESLEME


MODU kullanılıyordu.

•1930 da geliştirilen MC 68000 mikroişlemcilerinde ise 56 komut ve 14 ADRESLEME


MODU kullanılıyordu.

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.

Bu arada, BİT kapasiteleri de 8, 16 şeklinde artmıştır.

2- Adresleme Modlarıyla belleğin daha ekonomik kullanılması sağlanmıştır.

3- Gelişmiş işletim sistemleri, Assembly dilinin değişik adresleme teknikleriyle birlikte


uygulandığında bellekte aynı anda bir kaç program birden işlenebildiği gibi, bir programın
belleğin değişik bölümlerinde yürütülmesi işlemi de kolaylaşmaktadır.

BAŞLICA ADRESLEME MODLARI:

• Doğal adresleme (lnherent addressing)

• Hemen adresleme (Immediate addressing)

• Direk adresleme (Direct Addressing)

• Endirek (Dolaylı) adresleme (lndirect Addressing)

• Sıralı adresleme (Indexed addressing)

• Bağımlı (izafi) adresleme (Relative addressing)

DOĞAL ADRESLEME (INHERENT veya IMPLIED ADRESSING)

Mikroişlemcilerde, özellikle KAYDEDİCİLER arasında VERİ TRANSFERİ için uygulanan


HIZLI bir adresleme türüdür.

Kaydediciler ile akümülatör ve bellek arasında da aynı uygulama yapılır.

Örneğin, iki kaydedici arasındaki VERİ transferi için:

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.

“MOV A, B’nin anlamı:

“B” kaydedicisindeki VERİ’yi “A” kaydedicisine (akümülatöre) aktar (transfer et) demektir.

MOV adresi B Kaydedicisi adresi A Kaydedicisi adresi

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:

Not:Ünite No VI ASSEMBLY DİLİ ESASLARI bölümünde, I 8080 -8085 ve MC 6502


Mikroişlemcileri işlendiğinden, bu bölümde bir fikir vermek amacıyla açıklanan
ADRESLEME MODLARI ÖRNEKLERİ Z80 ve MC 68000 mikroişlemcileri ile ilgili olarak
verilmiştir.

1)Z80 Mikroişlemcisinde DOĞAL ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makina Kod No

LD B,C C kaydedicisi (C)à B 41 Hex


içeriğini B’ye yükle

EX DE,HL DE ve HL kaydedici (HL)à Temp EB Hex


çifleri içeriklerini
değiştir. (DE)à HL

(Temp)à DE

ADD A,D D kaydedicisi (D)+(A)à (A) 82 Hex


içeriğini A
akümülatörüne ekle

INC BC BC kaydedici çifti (BC)+1à BC 03 Hex


içeriğini 1 artır.

2) MC 68000 Mikroişlemcisinde DOĞAL ADRESLEME

KOMUT AÇIKLAMASI KISA YAZILIM Makina Kod No


MOVE.W D0.D1 D0’daki kelimeyi (D0)à D1 3200 Hex
D1’e aktar.

EXG D5, A5 D5 ve A5 kaydeicileri (D5)à Temp CD80 Hex


içeriklerini değiştir.
(A5)à D5
(daima 32 bit’lik
operasyonda) (Temp)à A5

CLR. B D3 D3’tei”Byte”ı sil 0à D3 4203 Hex

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)

Hemen adresleme işlemi, BELLEĞIN, AKUMULATORUN veya bir KAYDEDICİNİN


doğrudan yüklenmesi hallerinde uygulanmaktadır.

Hemen adreslemede “OPCODE”dan sonra yüklenecek devre daha sonra da

VERİ yazılmaktadır.

HEMEN ADRESLEME YAZILIM KALIBI:

• I 8080 / 8085’lerde : MVIA “veri”

“A” yerinde, B, C, D, E, H, L, M’ de olabilir.

• Z80’de : LDA “veri”, ADD a “veri”


• MC 6800de : MOVE Q “veri”, A

Diğer örnekler aşağıda verilmektedir.

8 bit’Iik mikroişlemcili bir bilgisayarda, hemen adresleme için 2 Byte’ lık

bellek adresi kullanılır:

1.byte OPCODE için.

2.byte VERİ için.

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.

1) Z80 Mikroişlemcisinde HEMEN ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makina Kod No

LDA, 99 “A” Akümülatörünü 99à A 3E Hex


99 VERİSİ ile yükle.
(Opcode)

63 Hex (99)

ADD A, 64 “A” Akümülatörü (A)+64à A C6 Hex


içeriğine 64’ü ekle.
(Opcode)

40 Hex (64)

LD SP 4095 Yığın göstericiyi 4095à SP 31 Hex


(Stack pointer) başlat.
(Opcode)

FF Hex

0F Hex

2) MC 68000 Mikroişlemcisinde HEMEN ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makina Kod No

MOVE Q # 99, D0 D0 kaydedicisine 99à D0 7063 Hex


99’u yükle.
(Opcode+VERİ)

ADD I.B # 64, D1 D1 kaydedicisinin 1. (D1)+64à D1 0601 Hex


byte’ına 64’ü ekle.
(Opcode)

0040 Hex

(64)

MOVE A # 4094 A> Yığın göstericiyi 4094à SP 3E7C Hex


(Stack pointer) başlat.
(Opcode)
Not: A7, Kullanıcı,
éStack pointer”dır. OFFE Hex

(4094)

Yukarıdaki tabloda görülen VERİLERİN önüne “#”(diyez) işareti konmuştur. “#”işareti


işlemin “HEMEN ADRESLEME” işlemi olduğunu belirtmek için kullanılmaktadır. Bu işaretin
kullanılması mikroişlemci üreticisine, yani bir anlamda programcıya bağlı olmaktadır. Nitekim,
Z80 mikroişlecisi için yazılan programda kullanılmamıştır.

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.

Bu yöntemde, programcı programı hazırlarken, yalnızca ST (Store) veya LD (Load)


komutuyla birlikte işlenecek verinin ADRESİNİ vermektedir. Bilgisayar bu adresteki VERİ’ yi
alarak program uyarınca gereken işlemleri yürütmektedir.

Örneğin:

8 bit’ lik bir mikroişlemci olan I 8080 mikroişlemcisini örnek alalım.

Mikroişlemci ve bellek 8 bit’ e göre organize oluştur.

8080’Lİ BİLGİSAYARA ŞÖYLE BİR PROGRAM BÖLÜMÜ GİRİLSİN:

0002 STA 3A 78H

Bu yazılımın anlamı:

Akümülatörün (A) içeriğini, 3A78 numaralı bellek gözüne depola.

“ST’ komutu bir DİREK ADRESLEME komutudur.

‘3A78’deki “H’ harfi ‘3A78’in’ HEXADECIMAL bir sayı olduğunu belirtmek

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.

Yukarıdaki program satırının bellekteki yerleşimi Şekil 3.4’te verilmiştir.

Şekilde görüldüğü gibi akümülatörde “11001010” gibi bir kayıt var. Bu kayıt

belleğin 3A78 adresine aktarılacak.

Bu işlemi gerçekleştirecek olan “ST’ komutunun ‘KOMUTUN İŞLEVİ” bölümünde


açıklandığı gibi bir İŞLEM KODU (OP-CODE> bölümü, bir de işlenecek yerinin adresini
belirten bölümü vardır.

‘ST’ komutu OP-CODE’ unun 8080’lerdeki Hexodecimal kodu Tablo 3.1 ‘de de gösterilmiş
olduğu gibi ‘32”dır.

“32’nin binary karşılığı ise: 0011 0010’dur.

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.

Bu adresten sonra gelen 03 ve 04 adreslerinde de:

İş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.

3A78H, Hexodecimal bir gösterilimdir.

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,

3A78 = 0011 10100111 1000

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.

Şekil 3.4- Direk adreslemede, akümülatör içeriğinin belleğe depo edilmesinin

şematik gösterilimi.

a-işlemden önceki durum

b-işlemden sonraki durum


Yukarıda açıklanan İşlemin tersi bir durumda olabilirdi.

Yani Bellekten akümülatöre veya bir kaydediciye transfer de yapılabilirdi.

BÖYLE BİR DURUMDA ŞÖYLE BİR YAZIM ŞEKLİ UYGULANACAKTIR:

LDA 3A78H

Bunun anlamı, 3A78numaralı (adresli> bellek gözü içeriğini AKÜMÜLATÖRE yükle.

Aynı anlatım şu şekildeki parantezli halde de yazılabilmektedir:

LDA- <$ 3A 78> veya 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:

1. Z80 Mikroişlemcisinde DİREK ADRESLEME

KOMUT AÇIKLAMASI KISA YAZILIM Makina Kod No

LDA, (4095) 4095 adresi içeriğini (4095)à A 3A Hex


A akümülatörüne
yükle. (Opcode)

FF Hex addr

L0

OF Hex addr.

Hi

LD (1024), HL 16 bit’lik HL (L)à 1024 22 Hex


kaydedicisinin
içeriğini 1024 ve (H)à 1025 (Opcode)
1025 adreslerine
yükle. D0 Hex addr

L0

D4 Hex addr

Hi

2)MC 68000 Mikroişlemcisinde DİREK ADRESLEME

KOMUT AÇIKLAMASI KISA YAZILIM Makina Kod No

MOVE 65536, D0 65536 adresinin 65536à D0 3039 Hex


içeriğini D0
kaydedicisine yükle. (Opcode)

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.

Bu gibi işlemler, daha çok, VERİ listeleme ve dosya formatlamalarında görülmektedir.

Endirek adresleme prensibi:

Endirek adreslemede belirli bir adresteki VERİ alış verişi, bu adresi taşıyan

diğer bir adres veya Mikroişlemci kaydedicileri aracılığıyla sağlanmaktadır.

Şekil 3.5te çoğunlukla uygulanan, bir ara adres yoluyla ENDİREK ADRESLEME örneği
verilmiştir.

Şekilde gösterilen Bellek ve Akümülatör 8 bitlik örnektir.

Bu örnekte şu komut ile ilgili işlem yapılmaktadır:

LDA ((1050H))

Bu yazılım şeklinin anlamı şudur:

Akümülatörü, 1050 adresinde kayıtlı bulunan adresin gösterdiği bellek gözünün içeriği
ile yükle

(( )): Çift parantez endirek adresleme yapıldığını göstermektedir.


Şekil 3.5’te gösterilen hexodecimal sayılar bilindiği gibi bilgisayarda BINARY olarak makina
dilinde kayıtlıdır.

Neden 1050 ve 150 Hex sayıları ikişer bellek gözüne kaydedilmişler?

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.

Böyle bir durum nasıl gerçekleştirilecektir?

Burada şu ENDİREK ADRESLEME yöntemi uygulanacaktır:

Çö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.

Bu mantığın programlanması şöyle olacaktır:

1000 Hex adresinin kaydı BC kaydedici çifti yapsın.

Geri sayma için D kaydedicisi kullanılsın.

“0” kaydını da A akümülatörü yapacaktır.

Programın Yazımı:

KOMUT AÇIKLAMA

LD BC, 1000 H :”BC” kaydedici çiftine 1000 H adresini (1.adres)yükle.

1. adresi gösteren başlatma kaydedici çifti)

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

LOOP1:LD(BC),A :”BC” kaydedici çifti tarafından gösterilen adrese “A” akümülatörü


içeriğini yükle.
(Bu işlem Z80 Kaydedici Endirek Adresleme Moduna örnektir.)

INC BC :Her işlemde BC’de kayıtlı adresi “1”artır.

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.

Yukarıdaki MNEMONIC’ lerin açıklaması:

LD (load): Yükle

LOOP: Çevrim, döngü

INC (lncrement): Artır

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) yazımının anlamı:

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

1. MC 68000’ de bir ENDİREK ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makine Kod No

MOVE D0, (A0) D0 kaydedicisi (D0) à ((A0)) 3080 Hex


içeriğini,A0
kaydedicisi tarafından
gösterilen adrese
yükle.

DİZİNLİ (SIRALI) ADRESLEME

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

SIRALI ADRESLEME yöntemi, ENDİREK ADRESLEMEYE benzemektedir. Farkı, orada


tek bir dizinin elemanlarıyla ilgilendiği halde, burada birkaç dizi ile birden ilgilenmekte ve
orada değişik KATDEDİCİLERDEN yararlanırken, burada SIRALI KAYDEDİCİ (INDEX
REGISTER) den yararlanmaktadır.

SIRALI ADRESLEME İŞLEMİ:


Endirek adreslemede olduğu gibi, içerisindeki dizi sayısı ile işlem yapılacak “adrese”
ulaşabilmek için:

Programda belirtilen ve hem BELLEKTE hem de SIRALI KAYDEDİCİDE kayıtlı bulunan,


“DİZİNİN İLK SAYISININ BULUNDĞU ADRESE” işlem yapılacak sayının bulunduğu
adresin SIRA NUMARASI eklenir.

İşlem yapılacak sayının bulunduğu adrese ETKİN ADRES (EFFECTIVE ADRES-EA),


dizisinin ilk sayısının bulunduğu adrese de TABAN ADRES (BASE ADRES-BA)
denilmektedir.

Sıra numarasına da X diyelim.

Yukarıda açıklanan bağıntı kısaca şöyle yazılacaktır:

Etkin Adres (EA)= Taban Adres (BA)+(X)

X’ i çevreleyen parantez X’ in SIRA NUMARASI olduğunu belirtmektedir.

Bu bağıntıyı kısaca örnekleyelim:

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.

Bu program gereğince yapılan işlem Şekil 3.6’ da şematik olarak gösterilmiştir.

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

SIRALI ADRESLEME YÖNTEMİNİN YARARI NEDİR?

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:

A dizisi B dizisi TOPLAM

Adres eleman adres eleman adres Eleman

10 A1 50 B1 90 A1+A1

11 A2 51 B2 91 A2+B2

12 A3 52 B3 92 A3+B3

Buradaki toplama işleminin DİREK ADRESLEME yöntemindeki PROGRAMLANMASI


şöyle olacaktır:

LDA 10

ADDA5O

STA 90

LDA 11

ADD A 51

STA 91

Bu işlem dizideki N eleman sayısı kadar tekrarlanacaktır.

Programdaki “A” Akümülatör anlamındadır. Yukarıdaki yazılımların anlamı “DİREK


ADRESLEME” bölümünden bilinmektedir.

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ı bu kere de SIRALI ADRESLEME yöntemine göre yazalım.

1-Sıralı kaydediciye ilk sıra numarası olan sıfırı (X=0) yükle.

2-Dizi elemanları işlemini yürüt.

3-Sıralı kaydediciyi “1” artır.

4-Sıralı kaydediciyi dizi eleman sayısı “N” ile karşılaştır.


5-Eğer dizinin sonuna gelinmemişse 2. sıraya dön.

Yukarıdaki işlem sıralamasına göre hazırlanacak program da şöyle yazılacaktır:

PROGRAM AÇIKLAMA

LD X #0 :Sıralı kaydediciyi dizinin ilk sırası olan “0” ile hemen (#)yükle.

LD A 10, X :Dizinin 10 numaralı adresteki elemanını Akümülatöre yükle.

ADD A 50, X :Dizinin 50. adresteki elemanını akümülatöre ekle.

ST A 09, X :Akümülatördeki sayıyı bellek gözüne depola.

LEAX 1, X :Sıralı kaydediciyi 1 artır.

MP X #N : Dizi eleman sayısı kadar say.


BNE LOOP : Son dizi eleman, işlemi yapılmamışsa başa dön.

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ı).

MP (Memory Phase) : Bellek fazı. Bellekteki işlem süreci

Örnekler:

1) Z80 Mikroişlemcisinde sıralı adresleme:

Z80’lerde 1X ve 1Y olmak üzere iki adet 16 bit’lik SIRALI KAYDEDİCİ (INDEX


REGISTER) vardır.

Sıralı adres komutları 2 byte OP-CODE ve 1 byte’lık adresten oluşur.

Yukarıda,

Etkin adres (EA)= Taban adres (BA) + (X) olarak verilmişti.

Z80’lerde ise durum şöyledir:

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.

Burada yalnızca bir “SIRALI ADRESLEME” Modu verilecektir.


Örnekler:

1) Z80 Mikroişlemcisinde SIRALI ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makine Kod No

LD(IX+40).A A akümülatörünün (A)à ((IX)+40) DD Hex


içeriğini “IX+40”
adresine yükle. 77 Hex

(2 byte OP-CODE)

28 Hex (40)

Örnekteki “40” sayısı Temel adresten sonra gelen 40. sıradaki adresi göstermektedir.

2) MC 68000 Mikroişlemcisinde SIRALI ADRESLEME:

MC 68000 mikroişlemcileri, KOMUT içinde tanımlanmış (specified) 32 bit’ lik

SIRALI ADRES moduna ve dolayısıyla da TABAN ADRESE (BASE ADDRESS) sahip


değildir.

TABAN ADRESİ 16 bit’ liktir. Z80’lerde bu 8 bit idi.

Bu demektir ki MC 68000 mikroişlemcisi, 216 = 64000 byte’ lık SIRALI ADRESLEME


yapabilecektir.

MC 68000 Mikroişlemcisinde SIRALI ADRESLEME:

KOMUT AÇIKLAMA KISA YAZILIM Makina Kod No

MOVE 1022 (A2) D2 D2 kaydedicisini 1022+a2 (1022+(A2))à D2 342 A Hex (Opcode)


adresindeki VERİ (DATA)
ile yükle. 03 FE Hex (1022)

3.B.6- BAĞIMLI ADRESLEME (RELATIVE ADDRESSING)


Bağımlı adreslemede, üzerinde işlem yapılacak VERİNİN adresi, program sayıcıda (program
counter) bulunan adrese göre tanımlanır.

Bu adres, aynı zamanda bellekte KOMUTUN kayıtlı bulunduğu adrestir.

Verinin bulunduğu adrese, yukarıda da açıklandığı gibi ETKİN ADRES (Effective Addresse
-EA) denmektedir.

Buna göre, BAĞIMLI ADRESLEMEDE, Verinin bulunduğu adres şöyle


tanımlanmaktadır:

EA: (PC) + 2s complement.

Yukarıdaki bağıntıda bulunan 2’ye tamamlama ilavesi, ADRESLEMENİN, Komut adresinin


İKİ YÖNÜNE doğru da yapılabileceğini göstermektedir.

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:

1) Z80 Mikroişlemcisinde BAĞIMLI ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makine Kod no

JR-2 Geriye doğru, Rölatif (PC)-2à PC 18 Hex(Opcode)


olarak 2 byte atla
FE Hex (25 comp-2)

JR (Jump Relative): Bağımlı (Rölatif) olarak atla.

KOMUT AÇIKLAMASI KISA YAZILIM Makine Kod No

JR NZ, 40 Eğer sıfır bayrağı (PC)+40 à PC 20 Hex (Opcode)


henüz SET
edilmemişse, ileri 28 Hex (25 comp.40)
doğru 40 byte atla

2) MC 68000 Mikroişlemcisinde BAĞIMLI ADRESLEME:

KOMUT AÇIKLAMASI KISA YAZILIM Makine Kod No

BRA-2 Geriye 2 byte dallan (PC)-2à PC 60 FE Hex


(Opcode)+8 bit
(Branch Back 2 offset)
bytes)
BNE 255 (AC)+255à PC 6600 Hex (Opcode)
Eğer “0” bayrağı 00 FF Hex (Offset)
(zero flag) henüz SET
edilmemişse ileriye
doğru 255 byte dallan

Vous aimerez peut-être aussi