bölüm 4. 8 bit mikroişlemcilerde adresleme modları

advertisement
BÖLÜM 1. MİKROİŞLEMCİ NEDİR?
1.1. İŞLEMCİ NEDİR?
•
İşlemci:
bellekteki program yardımıyla işlemlerin yapılma düzenini ve sırasını belirleyen;
•
üç kısımdan (aritmetik-mantık birimi, kaydedici bellek ve kontrol) oluşan;
•
aritmetik, mantık ve diğer işlemleri yapan temel bilgisayar birimidir.
1.2. MİKROİŞLEMCİ NEDİR?
Mikroişlemci (Mİ) nedir?
Mİ, büyük entegre devresi teknolojisi ile hazırlanmış ve tek bir entegre devresinde
(yongada) toplanmış olan işlemcidir. Mİ’nin özelliği; onun tek bir entegre devresinde
toplanmış olmasıdır. Mİ’ler genel amaçlı ve özel amaçlı olarak tasarlanırlar.
Bir genel amaçlı Mİ, bellek yongaları, giriş ve çıkış birimleri ve diğer yardımcı
birimlerle birleştirilerek mikrobilgisayar oluştura bilmektedir. Kişisel bilgisayarlar
mikrobilgisayarlara örnek olabilirler.
Özel amaçla tasarlanmış olan Mİ’lere örneklerden biri mikrokontrollerlerdir.
Mikrokontrollerler daha çok kontrol ve otomasyon işlerinde kullanılmak için tasarlanmış
Mİ’lerdir.
1.3. Mİ PARAMETRELERİ
Mikroişlemcileri bir birini ile kıyaslaya bilmek için belirli parametreler kullanılır. Bu
parametreler:
(1)
(2)
(3)
(4)
(5)
veri uzunluğu;
adres uzunluğu;
saat frekansı;
iç bellek kapasiteleri;
ve diğerleridir.
Ayrıca programcının kullanabileceği komut sayıları ve tipleri, adresleme modları,
değişik tipteki destek devreleri vb. özellikler de Mİ’nin önemli unsurlarından sayılmaktadır.
1.3.1. Veri Uzunluğu
Veri uzunluğu işlemcide kaç bitin aynı anda (paralel olarak) işlenebildiğini gösterir;
Tarihsel olarak n=4; 8; 16; 32 ve şimdi 64 bit veri uzunluklu Mİ-ler üretilmekte ve
kullanılmaktadır. Veri uzunluğu hesaplama hassasiyetini göstermektedir. Veri bitleri sayısı
arttıkça hassasiyet de artmaktadır.
Sayfa 1 / 51
Örneğin, n=32 bit bir Mİ 16 bit bir Mİ-den daha hassas hesaplamalar
yapabilmektedir.
Hatırlatma: 1 bit ={0;1}
Diğer taraftan veri uzunluğunun artması hesaplama hızını da artırmaktadır, çünkü
bazen çok sayıda bitler üzerinde işlemler yapmak gerektiğinden daha uzun veriye sahip olan
Mİ bunu birkaç kere yerine bir kereye yapar.
Örneğin, n=64 bit iki sayıyı toplamak için 16 bit Mİ kullanılırsa, bu Mİ sırası ile 4
kere toplama yapacaktır (16x4=64); fakat 64 bit Mİ-de ise bu toplamayı bir kerede
yapacaktır.
İç veri yolları Mİ-nin içerisindeki birimler arasında veri iletişimini sağlar.
Dış veri yolu Mİ ile dışarıda olan birimler (bellekler, giriş ve çıkış birimleri v.s.)
arasındaki veri iletişimini sağlar.
İç veri yolu ile dış veri yolunun uzunlukları aynı olamayabilir.
Veri yollarında veri iki yönde iletilebilmektedir. Bunun için üç durumlu devreler
kullanılmaktadır.
Ödev 1.1: Bunun nedenini ve nasıl yapıldığını araştırın.
Not: Adres Yolu tek yönlüdür!
1.3.2. Adres Uzunluğu
Adres – komutları, verileri, kodları vs. gibi enformasyonun bellekte yerleştiği yeri
gösteren bir koddur. Bu kod ikili sayı sisteminde gösterildiğinde, bundaki bitlerin sayısı
adres uzunluğunu vermektedir.
Adres uzunluğu, Mİ-nin bağlı olduğu ana bellek kapasitesini belirler. Adres
uzunluğu m (bit) olsun. Maksimum Bellek Kapasitesini V ile işaretleyelim. Bu durumda:
V = 2m
Örnek: m=16 olsun. Bu durumda:
V=216 = 65 536 = 64 K
(K= 210=1024), yani ana belleğin maksimum kapasitesi 64 K (Byte) olur (1Byte=8
bit).
1.3.3. Saat Frekansı
Her bir Mİ-nin içinde mutlaka senkrosinyaller (puls) üreten bir saat vardır
(Senkrosinyaller
bir
komutun
yürütülmesini
tetiklemek
için
gereklidir).
İlk
mikroişlemcilerde saat bir entegre devresi olarak ayrıca üretilerek sisteme bağlanılırdı.
Sayfa 2 / 51
Günümüzde saatler (kristal hariç) artık Mİ yongasının içerisinde yerleştirilmiştir. Bir saatin
ürettiği senkrosinyallerin ideal biçimi Şekil 1.1’de verilmiştir.
S
t
T
Peryot
Bazen saatler biri birinin tam tersi olan iki senkrosinyal serisi üretirler.
S1
t
S2
t
Şekil 1.1. Saat frekansları
Frekansın Hz, MHz vs. ile ölçüldüğü bellidir (1 Hz saat frekansı onun 1 saniyede 1
sinyal ürettiğini göstermektedir). Mi-lerde olan saatlerin da frekansları aynen MHz veya en
son zamanlar artık GHz-lerle ölçülmeye başlamıştır.
Peki, bu ne demektir?
Sadelik için Mİ saatinin 1 MHz frekansı ile senkrosinyal ürettiğini varsayalım. Bu
durumda saatin ürettiği senkrosinyallerin periyodu 1 mikro saniyedir. Neden ve Nasıl?
Çoğu zaman Mİ-lerin hızı hakkında konuşurken hız birimi olarak MHz ele alınır. Bu
doğru değildir.
Saat frekansı Mİ-nin hızını etkilemektedir, ama direk hızı vermemektedir. Çünkü
Mİ-nin hızı dedikte onun 1 saniyede yaptığı işlemlerin sayısı düşünülmektedir
(işlem/saniye). Oysa kaba söylemek gerekirse, bir işlemin yürütülmesine her zaman birden
fazla senkrosinyal gerekmektedir. Ve hem de çeşitli işlemler için çeşitli sayıda senkrosinyal
gerekir. Bu yüzden 1000 MHz-lik bir saati olan Mİ-nin hızı 1000 milyon işlem/saniye (yani
1 milyar işlem/s) değildir.
Son zamanlarda Mİ hızları büyüdükleri için onları işlem/s ile değil, milyon işlem/s
(MIPS – Millions of Instructions Per Second) veya milyon kayan noktalı işlem/s (MFLOPS
– Millions of Floating-Point Operations Per Second) ile ölçmektedirler. Fakat
mikrobilgisayar (veya bilgisayar) hızını belirlemek daha zor bir iş olmaktadır, çünkü
devreye ana bellekle birlikte dış bellek ve çevre birimleri de girmektedirler. Bu durumda
Sayfa 3 / 51
“benchmark” adlanan ve özel olarak tasarlanmış çeşitli standart performans programları
kullanılır. Bu testlerden yaygın olarak kullanılanlar SPEC (System Performance Evolution
Cooperative) yıllara göre ve tam sayı veya kayan noktalı sayı işlemlerine göre
değişmektedir.
1.3.4. İç Bellek Kapasitesi
Mİ-lerin iç belleklerinin toplam kapasitesinin büyük olması çok önemlidir, çünkü bu
Mİ-den dışarıda olan ana belleğe (RAM ve ROM) müracaat etmeden çalışma olanağı
vermekte ve böylece çalışma hızını artırmaktadır (ana belleğe müracaat Mİ-nin hızını
yavaşlatmaktadır).
İlk Mi’lerde iç bellek olarak yalnızca kaydediciler (register) kullanılırdı. Bu yüzden
iç bellek kapasitesini kaydedicilerin sayısı belirlemektedir. Bunların sayısı kısıtlıydı (1 ile 8
arası). Bu kısıtlılık Mİ’nin veri ve program için devamlı ana belleğe baş vurmasına götürür
ki bu da Mİ’nin işlem hızını yavaşlatır. Fakat şimdiki Mİ’lerin içeriğine hem kaydediciler
üzerinde bellek (32+32 kaydedici), hem de ön-bellek (cache) (veri ve program için) bellek
yerleştirilebilmiştir (bu, büyük entegre devreleri teknolojilerinin gelişmesi ile elde
edilmiştir). Saat frekansının artması ile birlikte bu da Mİ’lerin hesaplama hızını
artırmaktadır.
1.4. Mİ GELİŞME AŞAMALARI
Intel firması örneğinde mikroişlemcilerin gelişmesi aşamalarını izlemek mümkündür
(Tablo 1.1).
Tablo 1.1. Intel firması Mİ’lerinin geliştirilme aşamaları
Yıl
Ürün
Veri
1971
4004
4
1973
8008
8
1975
8080
8
1978
8086
16
1983
80286
16
1985
80386
32
1989
80486
32
1993
Pentium 1
32
1995
Pentium 2
32
1998
Pentium-3
32
2001
Pentium-4
64
2005
?
?
*- Pentium serisinin hepsine ait
Adres
16
16
16
20
24
32
32
32
32
32
32
?
Özellikler
Hesap makinelerinde kullanıldı
Hesap makineleri ve kontrolde kullanıldı
Kontrol uygulamalarında kullanıldı
8008 (8 bit ); co-processorlar üretildi
Kişisel bilgisayarlarda kullanıldı
Ön bellek kullanıldı
Daha büyük frekanslı saat
3 milyondan fazla transistor*
64 bit veri yolu da kullanabilir*
Birkaç aritmetik-mantık birimi*
Yaklaşık 1,5-2,4 GHz saat frekansı*
20 GHz ve 1 Milyar transistor
Sayfa 4 / 51
Genelde söylemek gerekirse Intel, mikroişlemci ve diğer uygun birimleri birkaç
yönde geliştirmiş ve geliştirmektedir. Bunlardan biri genel amaçlar için kullanılan
mikroişlemci (80x86 serisi, Pentium serisi), diğeri mikrokontroller (8048, 8051, 8096, i960)
ve bir diğeri de paralel veya süper işlemciler (i860, iPSC serisi) sınıflarıdır. Bazı firmalar ise
komutların geliştirilmesini sistem tasarımcılarına bırakan “bit-slice” adlanan Mİ’ler
tasarlamışlardır. Böyle Mİ’lerde uygun serinin birkaç işlemcisini kullanarak istenilen veri
uzunluğuna ulaşılabilir. Tasarımcı sadece ona gereken komutları oluşturarak daha verimli
bir sistem elde edebilir. Bunun için seride mikroprogram kontrol kullanılır ve komutların
gerçekleştirilmesi için gereken mikrokomutlar sabit bir bellekte tutulur. Intel firmasının
böyle Mİ’si Intel 3000’dir.
Motorola; Intel’e paralel olarak uygun Mİ’ler geliştirilmiştir. Motorola’nın
geliştirdiği Mİ’ler ve onların özellikleri Tablo 1.2’de gösterilmektedir.
Tablo 1.2. Motorola firması Mİ’lerinin geliştirme aşamaları
Yıl
1975
1979
1983
1984
1987
1989
1993
1994
Ürün
Veri
6800
16
68000
16
68010
16
68020
32
68030
32
68040
32
Power PC 601* 32
Power PC 603* 32
Özellikler
İki Akü
Kaydediciler 32 bit’tir
Sanal bellek kullanıldı
Gerçek 32 bit işlemci
Bellek kontrol birimi
Daha hızlı
2.8 milyon transistor
32 genel amaçlı ve 32 kayan
noktalı işlemler için kaydedici
1995 Power PC 604* 32
32
Tam sayılarla 4, kayan noktalı
sayılarla 6 boru hattı aşaması
1995 Power PC 620* 64
32
Yonga içinde 32 KB veri ve 32
KB komut ön belleği
* Power PC serisinin tasarımına Motorola’dan başka IBM ve Apple firmaları da katkı sağlamıştır.
Adres
16
24
24
32
32
32
32
32
Mİ’ler de komutların sayısının az veya çok olması bellek kullanımı ile sıkı ilişkilidir.
Bazı Mİ tasarımcıları kullanılan bellek kapasitesini ekonomik olarak kullanmayı
hedefleyerek komut sayısını artırmışlar. Bu, bir taraftan işlemcinin iç yapısını karmaşık
yapsa da, diğer taraftan belleğe mümkün kadarı ile az müracaat etmesine ve bununla hızın
artmasının temel unsurunu oluşturmaktadır. Böyle tasarım prensibine Karmaşık Komut Setli
Bilgisayar (Complex Instuction Set Computer – CISC) denmektedir. Diğer bir yaklaşım ise
komutların sayısını azaltarak ve onları basitleştirerek onarın daha hızlı yürütülmesini
sağlamaktan oluşmaktadır. Böyle tasarlama prensibi Kısaltılmış Komut Setli Bilgisayar
(Reduced Instruction Set Computers – RISC) adlanır. Genelde tarihsel olarak Motorola
firması kendi Mİ tasarımlarında daha az komutla geçinmeye çalışırken Intel firması
Sayfa 5 / 51
komutların sayısını her sonraki serisinde artırmıştır. Bundan dolayı Motorola’nın bir çok
Mİ’si RISC yapısına, Intel’inkilerin ise CISC yapısına sahip olduğu söylenebilir.
Mİ tasarlayan ve üreten firmalar sadece Intel ve Motorola ile kısıtlı değildir. Zilog,
AMD, TMS, Rockwell, Mostek ve diğer firmalar çeşitli yıllarda çeşitli Mİ’ler tasarlamış ve
üretmişler. Bunlardan bazıları günümüzde Intel gibi önder firmalarla rekabet eder durumu
gelmişler.
Sayfa 6 / 51
BÖLÜM 2. MİKROİŞEMCİLERİN TEMEL ÖĞELERİ
2.1. Temel Öğeler
Genelde bütün Mİ-lerde en az bir tane aşağıdaki öğeler bulunmaktadır:
-1-Akümülatör;
-2-Bayrak (Durum) Kaydedicisi;
-3-Aritmetik-Mantık Birimi;
-4-Genel Amaçlı Kaydedici (veya Kaydediciler);
-5-Program (Komut) Sayacı;
-6- İndis Kaydedicisi (veya Kaydedicileri);
2.1.1. Akümülatör
Akümülatör (Accumulator) her şeyden önce bir kaydedicidir. Onu diğer
kaydedicilerden farklılaştıran özellik onun çıkış ve girişlerinin Aritmetik-Mantık Birimine
(AMB) bağlı olmasıdır. Bundan dolayı Akü AMB-de elde edilmiş sonuçları tutmaktadır.
Yani bir işlem öncesi tuttuğu veri ile sonraki veri aynı olmamaktadır. Bütün Mİ’lerde en
azından 1 tane Akü vardır. Bazı Mİ’lerde 2 Akü vardır (Örn. Motorola 6800).
Örnek: Toplama işleminde Akü önce toplananlardan birini tutmakta, işlem sonunda
ise toplamı depolamaktadır.
Şekil 2.1’de bir Akünün AMB ile nasıl bağlandığı gösterilmektedir. Bu şekilde
Akünün çıkışı AMB’nin Giriş 1’ne bağlanmıştır. AMB’nin diğer girişine ise ikinci veri
iletilmektedir. AMB öngörülen işlemi (Örn. Toplama) yaptıktan sonra sonucu çıkışına
bağlanmış olan Aküye iletmektedir.
Akü
Giriş 1
Giriş 2
AMB
Çıkış
Şekil 2.1: Akümülatörün AMB’ye bağlanması şeması
Akünün
bitleri
her
bir
kaydedici
gibi
sağdan
sola
doğru
0,1,2,...
numaralandırılmaktadır ve bu bitlerin sayısı genelde veri bitleri sayısı kadardır. Şekil 2.2’de
böyle numaralandırma gösterilmektedir.
Sayfa 7 / 51
n
....
2
1 0
Akü
Şekil 2.2: Akünün bitlerinin numaralandırılması
2.1.2. Bayraklar
Her bir Mİ’de mutlaka bir Bayrak Kaydedicisi mevcuttur. Bu Kaydedicinin ayrı ayrı
bitleri Mİ’nin o andaki durumunu bildirmektedir. Bu yüzden ona bazen Durum Kaydedicisi
de denmektedir. Burada en çok kullanılan Bayrakların bir kaçına bakılacaktır:
(a) Sıfır (Zero) Bayrağı. Bu Bayrak yapılmış işlem sonucunun sıfır olup olmadığını
göstermektedir. Eğer yapılmış işlem sonucu sıfır ise bu Bayrak (ZF)=1 olmakta, sıfırdan
farklı oldukta ise (ZF)=0 olmaktadır.
Not: İşlem sonucu ile Bayrağın durumlarının ters olduğuna dikkat edin!
Ödev 2.1: Bunun nasıl yapılabileceğini düşünün ve şemasını çizin.
(b) Elde (Carry) Bayrağı. Bu Bayrak toplama zamanı eldenin olup olmadığını
göstermektedir. Eğer Elde varsa (CF)=1, tersi durumda ise (CF)=0 olmaktadır.
Ödev 2.2: Elde bitinin toplamadan nasıl etkilendiğini bulun ve şemasını çizin.
(c) İşaret Bayrağı. Bu Bayrak işlem sonucunun işaretinin eksi veya artı olduğunu
göstermektedir. Eğer sonuç artı ise (SF)=0, aksi durumda (SF)=1 olmaktadır.
(d) Taşma (Overflow) Bayrağı. Bu bayrak sonucun doğru olmadığını gösterir. Örn.
İki artı sayının toplandığında sonucun eksi veya iki eksi sayının toplandığında sonucun artı
alındığı durumlarda (Böyle durumların olabileceğini örnekler göstererek inceleyin). (OF)=1
taşmanın varlığını, (OF)=0 ise taşmanın olmadığını göstermektedir.
Ödev 2.3: Taşma Bayrağının etkilenmesi algoritmasını tasarlayın ve şemasını çizin.
(e) Onlu Elde Bayrağı. Bu bayrak ikili-onlu sayılarla aritmetik işlemler yapıldığında
kullanılır. Özellikle, bu bayrak toplama işleminde bir byte olarak gösterilen iki onlu rakamlar
toplandığında 3. bit’ten 4. bite olan eldeden etkilenmektedir. Eğer bu elde var ise (AC)=1,
yoksa (AC)=0 oluyor.
(f) Eşlik (Parity) Bayrağı. Bu bayrak bir işlem sonucu Aküde alınan sonuçtaki
“1”lerin sayısının çift veya tek olduğunu gösterir. Eğer bu sayı çift ise (PF)=1 ve tersi
durumda (PF)=0 olur. Sayının değeri “0” ise bu, çift sayı olarak kabul edilmektedir.
Sayfa 8 / 51
(g) Diğer Bayraklar: Bayrakların sayısı ve tipleri mikroişlemciden mikroişlemciye
değişiklik göstermektedir.
2.1.3. Aritmetik-Mantık Birimi
AMB: 2 girişi ve 1 çıkışı olan toplama ve bir dizi diğer işlemler yapmak için
kullanılan kombinasyonel bir devredir. Kombinasyonel olduğundan dolayı onun kendi
belleği yoktur ve bu görevi devamlı onun çıkışına bağlı Akü üstlenmektedir. AMB hakkında
ön bilgi 2.1.1 alt bölümünde de verilmiştir. AMB’nin Bayrak Kaydedicisi ile de bağlılığı
vardır, çünkü AMB’de elde edilen sonuç bu veya diğer bayrağı etkilemektedir.
Modern Mİ’lerde birden fazla AMB mevcuttur. Bunlardan bir kısmı tam sayılar
üzerinde işlemler yaparken, diğerleri kayan noktalı sayılar üzerinde işlem yaparlar.
Ödev 2.4. Bir AMB’nin nasıl tasarlandığını inceleyin ve 4 bit bir AMB şeması
tasarlayın.
2.1.4. Genel Kaydediciler
Her bir Mİ’de birden fazla Genel Amaçlı Kaydedici mevcuttur. Bu kaydediciler
geçici olarak verileri, sonuçları vs. tutmak, bazen adres kaydedicisi olarak kullanmak, bazen
de indis kaydedicisi vs. olarak kullanmak üzere tasarlanmışlar. Genel kaydedici sayılarının
fazlalılığı az sayıda komutla (CISC mimarisi) işlemler yapmaya yardımcı olmaktadır.
Örneğin, Power PC 601 ve üst modellerde 32 tane kaydedici tam sayılar üzerinde işlemler
yapmak için, 32 tanesi de kayan noktalı sayılar üzerinde işlemler yapmak için
kullanılmaktadır.
2.1.5. İndis Kaydedicileri
İndis kaydedicileri verilenlerin indisli olması ve bazı diğer durumlarda kullanılır.
Özellikle dizi, matris vb. tür veriler üzerinde çeşitli işlemler yapılırken indis kaydedicilerinin
kullanılması çok efektli olmaktadır. Bu kaydediciler, veri dizisinin başlangıç adresi sabit
tutularak, dizinin diğer elemanlarının adresini sırası ile kolayca hesaplamağa olanak tanırlar.
Örneğin, Intel 8086/8088 Mİ’de iki tane indis kaydedicisi bulunmaktadır. Bunlardan biri
kaynak, diğeri de hedef indis kaydedicileridir.
2.1.5. Segman Kaydedicileri
Segman kaydedicileri belleğin belirli segmanlara (kodlar, veriler, yığıt vs. için)
bölünmesi ile 16 bit Mİ’lerden bu yana kullanılmağa başlanmıştır. Her bir segmanın kendi
Sayfa 9 / 51
kaydedicisi bu segmandaki enformasyona ulaşmayı organize etmekte kullanılır. Örn. Kod
Segman Kaydedicisi (Code Segment Register) programın komutlarını; Veri Segman
Kaydedicisi
(Data
Segment
Register)
ise
programın
verilerini
adreslemek
için
kullanılmaktadır.
2.1.6. Program Sayacı
Genelde program ana bellekte tutulmaktadır. Bu programın komutlarını oradan
işlemciye getirip işleme koyabilmek için bu programın ilk komutunun adresini bilmek
gerekmektedir. Program sayacının bir görevi bu ilk adresi tutmaktır. Fakat o, hem de bir
sonra getirilecek olan komutun da adresini biçimlendirmelidir. Bunun için bu sayaç o anda
işlenen komutun uzunluğuna göre artırılarak bir sonraki adresi oluşturmaktadır. Dolayısı ile
program sayacının ikinci görevi de bir sonraki komutun adresini oluşturmaktır.
2.1.7. Adres Kaydedicisi
Mİ’nin temel görevlerinden biri de bellekteki enformasyonu alıp getirmek, üzerinde
komutun ön gördüğü işlemi yapmak, gerektiğinde sonuçları (veya ara sonuçları) belleğe
göndermektir. Bellekteki enformasyona ulaşmak için gereken adresi tutan birim Adres
Kaydedicisidir. Genelde Adres Kaydedicisindeki bitlerin sayısı Adres Yolu bitlerinin
sayısına eşittir (Adres uzunluğu ile ilgili bilgi için 1.3.2. ADRES UZUNLUĞU alt bölümüne
bkz). Adres Kaydedicisi bitleri sayısı Ana bellek kapasitesini belirler.
2.1.8. Yığıt Kaydedicisi
Bazen işlem sürecinde işlemci o anda yürüttüğü komuttan farklı bir yerdeki komuta
gitmek, sona yeniden bu komuta geri gelerek programı işemeye oradan devam etmek gibi bir
görev yapmak zorunda kalabilir. Bu, özellikle alt programlara müracaat işlemlerinde sık rast
gelinen bir durumdur. Böyle bir işlemin özelliği, ana programdan alt programa gidildiğinde
ve alt program çalıştırılıp geri dönüldüğünde işlemcinin hem kaydedicilerinin, hem de
bayraklarının durumunun değişmiş olmasıdır. Oysa program bir önceki, yani alt programa
gidilmeden önceki durumdan devam etmelidir, yoksa işlem sonuçları yanlış olacaktır. Bu
durumların üstesinden gelebilmek için yiğit organizasyonu kullanılır. Yığıt, özel olarak
bellekte ayrılmış bir yere denmektedir. Bu yere işlemcinin iç durumu geçici olarak kayıt
edilir ve sonra gerektiğinde işlemcideki uygun birimlere geri yüklenir. Bu işlemlerin
yapılması yığıt kaydedicisinin yardımı ile yapılmaktadır. Bu kaydedici yığıtın adres sayacı
rolünü oynayarak programcının istediği iç birimlerim içeriğini yığıtın o anda gösterdiği
Sayfa 10 / 51
adrese yazmak ve gerektiğinde de geri çekerek uygun birime yüklemek için kullanılır. Bunun
için o, hem artan, hem de azalan bir sayaç gibi çalışma özelliğine sahiptir.
2.1.9. Kontrol Birimi
Kontrol birimi Mİ içeriğindeki birimlerdeki ve/veya Mİ’den dışarıdaki enformasyonu
kullanarak yürütülen işlemleri organize eden kontrol sinyalleri üretmek içindir. Bu kontrol
sinyalleri Mİ çeşitli birimlerinin giriş ve çıkışına bağlı olan elektronik kapıları açmakla veya
kapatmakla verinin gerektiği zamanda gerektiği yere iletilmesini ve gereken işlemin
yapılmasını sağlamaktadırlar. Hangi işlemin yapılacağını ise komutun kodu, ve dolayısı ile
bu komutun işlem kodunun yerleştirildiği komut kaydedicisinin çıkışına bağı dekoderin
çıkışı belirlemektedir. Bu çıkışlar kontrol biriminin hangi işlemi yapacağını belirliyor ve
kontrol birimi her işleme uygun kontrol sinyalleri ardışıklığı üretir. Kontrol birimi programcı
için görünmezdir. Kontrol (veya yönetim) birimlerinin tasarlanması yöntemleri [Sentez]
literatüründe ayrıntılı olarak ele alınmıştır.
2.2. Mİ’NİN TAŞIT ORGANİZASYONU
Mİ veri, adres ve komut gibi enformasyonu bir birimden diğerine iletmek için belirli
taşıt sistemine sahip olmalıdır. Genelde taşıt sistemi iki yere ayrılmaktadır: iç taşıt sistemi ve
dış taşıt sistemi.
İç taşıt sistemi veri, adres ve kontrol yolları olmakla üç çeşittir.
Mİ yapısına göre değişik türde organize edilen veri yollarının aynı anda iletebildiği
bitlerin sayısı veri uzunluğuna eşit olmaktadır. Örneğin, 8 bit bir Mİ’nin iç veri yolu
uzunluğu8 bit (8085), 16 bit bir Mİ’nin iç veri yolu uzunluğu 16 bit olmaktadır. Veri yolları,
veriyi iki yönde taşıya bilmektedir. Bu yüzden onlar iki yönlü olmak zorundadırlar. Bundan
dolayı veri kaynağı ve veri hedefi aynı birimler olabilmektedir. Genelde bu, kaynak ve hedef
genel amaçlı kaydediciler, ana bellek ve diğer birimler olabilir.
Bu günkü Mİ’lerde veri yollarının sayısı birden çok olmaktadır. Bunun temeli Intel
8086 Mİ’de konulmuştur. Bu Mİ’de her biri 16 bit olan üç çeşit veri yolu vardır: A, B ve C
taşıtları. Mİ’deki çok taşıtlılık çeşitli verilerin aynı zaman süresinde işlemlere
sokulabilmesine olanak tanıyarak genelde işlem hızını arttırır.
Adres yolu uzunluğu da Mİ’nin adres uzunluğu kadardır. Program sayacı ve adres
kaydedicisi bir adresi biçimlendirdikleri için adresin kaynağı genelde bu birimler
olmaktadırlar. Adresin hedefini ise genelde ana bellek ve diğer dış birimler oluşturmaktadır.
Sayfa 11 / 51
Kontrol yolları uzunluğu çok çeşitlilik arz etmekte ve Mİ’den Mİ’ye değişmektedir.
Genelde bu yollar tek yönlü olmakta ve kontrol birimi ile diğer birimler arasında ilişki
oluşturmaktadır. Bu yol da iç ve dış olmakla iki yere bölünmektedir. İç kontrol yolları ile
kontrol biriminden çeşitli birimlere iletilen kontrol sinyalleri ve bu birimlerden kontrol
sinyallerine iletilen uyarıcı sinyaller, dış kontrol yolları ile çeşitli birimlere gönderilen ve bu
birimlerden alınan sinyaller iletilmektedir. Örneğin, R / W sinyali ana belleğe yazma
( R / W =0 olduğunda) veya ana bellekten okuma ( R / W =1 olduğunda) işlevini yapmaktadır.
Sayfa 12 / 51
BÖLÜM 3. 8 BİT MİKROİŞLEMCİLER
Bu Mİ’ler 1973 yıllarından başlayarak piyasaya sürülmüştür. 8 bit veri yolu ve 16 bit
adres yolu olan bu Mİ’ler ayrıca dışarısı ile 10-12 dolayında kontrol hatları ile de
bağlanmaktadırlar. Bunların yerleştiği entegre devreleri 40 bacaklıdır. Saat frekansları 1
MHz dolayındadır.
3.1. 8085 Mikroişlemcisi
8085 (8080) Mİ’nin programcı açısından yapısı Şekil 3.1’de görülmektedir:
7
.
.
Genel Amaçlı
Kaydediciler
(6 tane)
(Yerel Bellek)
15
.
.
.
.
.
0 7 .
.
.
.
B (8)
C (8)
D (8)
E (8)
H (8)
L (8)
.
.
.
.
.
.
.
.
.
.
.
. 0
.
. 0
Program Sayacı (16)
Yığın Göstergesi (16)
7
.
. . . .
Akü (8)
0
7 . . . . . 0
Bayraklar (8)
Şekil 3.1: 8085 (8080) mikroişlemcisinin programcı açısından iç yapısı
Bu Mİ’ler 1973 yıllarından başlayarak piyasaya sürülmüştür. 8 bit veri yolu ve 16 bit
adres yolu olan bu Mİ’ler ayrıca dışarısı ile 10-12 dolayında kontrol hatları ile de
bağlanmaktadırlar. Bunların yerleştiği entegre devreleri 40 bacaklıdır. Saat frekansları 1
MHz dolayındadır.
Genel Amaçlı Kaydediciler 6 tane 8 bitlik genel amaçlı kaydediciler (B, C, D, E, H,
L), kapasitesi 6 byte olan yerel bellek oluştururlar. Bu kaydedicilerin bir özelliği, onların
hem tek tek hem de çift olarak (B ve C, D ve E, H ve L) kullanılabilmesidir.
Kaydediciler çift olarak kullanıldıklarında oluşturulan 16 bitlik kaydedici, birinci
kaydedicinin (B, D, H) adını alır. Kaydedicilerin çift olarak kullanılması 8085’in 8 bit bir
Mİ olmasına rağmen bir dizi 16 bit işlemleri yürütmesini de sağlayarak onu zamanının en
kullanışlı cihazı yapmıştır.
Sayfa 13 / 51
HL kaydedicisi çiftinin bir dizi farklı görevleri de vardır. Bunlardan biri bellekle
ilgili işlemlerde bu kaydedici çiftinin adres kaydedicisi rolünü üstlenmesi, diğeri ise 16 bit
işlemlerde akümülatör yerine kullanılmasıdır.
Akümülatör (A) hem genel amaçlı kaydedici olarak kullanılmakta, hem de
AMB’nin giriş ve çıkışına bağlı olduğu için bir çok işlemde varsayılan bir kaydedici olarak
yaygınca kullanılmaktadır.
Program Sayacı (PC) (16 bit) bellekten alınacak bir sonraki byte için adresi
içermekte ve bir sonraki adresi oluşturmaktadır. Yani, PC programın sırası ile çalışmasını
sağlamak için kullanılır.
Yığın Göstergesi (SP) belli durumlarda Mİ’nin kaydedicilerinin durumlarının geçici
olarak depolanacağı bellek kısmının adresini içeren 16 bit’lik bir kaydedicidir.
8085’in bayrak (flag) kaydedicisinin bitlerinin nasıl kullanıldığı aşağıdaki şekilde
gösterilmektedir (Şekil 3.2):
7
6
5
4
3
2
1
0
S
Z
-
AC
-
P
-
C
Şekil 3.2: 8085 (8080) Mİ’nin bayrak kaydedicisi bitleri
7. bit  S (Sign) İşaret Bayrağı: İşlem sonucu negatif olduğunda SF=1, pozitif
olduğunda ise SF=0 olarak düzenlenmektedir.
8085’de çoğu Mİ’lerde olduğu gibi veri bitleri sağdan sola doğru numaralanmaktadır
(Şekil 3.3). İşaretli sayılar için 7. bit işaret biti olarak kullanılır. Eğer sayı pozitifse bu bit
“0”, negatifse “1” değeri yer almaktadır.
7
6
5
4
3
2
1
0
+
-
d6
d5
d4
d3
d2
d1
d0
Şekil 3.3: İşaretli sayıların bitlerinin bir kaydedicide yerleştirilmesi biçimi
6. bit  Z (Zero) Sıfır Bayrağı: Bir işlem sonucu sıfır çıktığı durumda ZF=1, aksi
halde ZF=0 olur.
5. bit  boş (kullanılmıyor).
4. bit  AC (Auxiliary Carry) Ek (Onlu) Elde Bayrağı: Bu bayrak onlu (decimal)
toplama komutunda (DAA) kullanılır. Toplamanın sonucunda 3. bit’ten 4. bit’e elde (onlu
elde) varsa AC bayrağı “1” olur. Aksi halde “0” olur.
3. bit boş (kullanılmıyor).
Sayfa 14 / 51
2. bit P (Parity) Eşlik Bayrağı: Bu bayrak akümülatördeki “1” lerin sayısını
gösterir. Eğer 1’lerin sayısı çift (even) ise PF=1, aksi halde (tek - odd) PF=0 olur.
1. bit boş (kullanılmıyor).
bit C (Carry) Elde Bayrağı: Toplama esnasında elde oluşmuşsa CF=1,
0.
olmadığında ise CF=0 olur.
Ödev 3.1. 8085 bayraklarını inceleyerek geniş bir rapor yazın.
8085 ve ondan çok az farkı olan bir önceki versiyonu 8080 Mİ’leri zamanında çok
popüler oldular ve özellikle kontrol ve otomasyon işlerinde geniş kullanım alanları buldular.
Bundan dolayı Intel bir sonraki versiyon olan 16 bit 8086 Mİ’de bu Mİ’lerin bir çok
özelliklerini korumuştur. Şimdilerde bile daha ucuz ve verimli bir uygulama için halen
Intel’in 8 bit Mİ’leri kullanılmaktadır.
3.2. 6502 Mikroişlemcisi
Bu Mİ’nin programcı açısından yapısı Şekil 3.4’te görülmektedir:
7
.
.
.
.
.
.
0
Bayraklar (8)
Akü (8)
X (8)
Y (8)
15
.
.
.
.
.
.
8
Yığın Göstergesi (8)
ProgramSayacı (16)
Şekil 3.4: 6502 mikroişlemcisi iç yapısı
Sayfa 15 / 51
X ve Y indeks kaydedicileri genel amaçlar (üzerinde işlem yapılacak verileri
tutmak) için kullanılırlar. Fakat bu kaydediciler bir program tarafından denetlenebilen sayaç
gibi de kullanılabilirler. Bu, özellikle dizi, matris vb. veriler üzerinde işlem yaparken gerekli
olmaktadır.
6502 Mİ’nin Bayrak (flag) kaydedicisinin bitlerinin nasıl kullanıldığı aşağıdaki
şekilde gösterilmektedir (Şekil 3.5):
7
6
5
4
3
2
1
0
N
V
1
B
D
I
Z
C
Şekil 3.5: 6502 mikroişlemcisinin bayrak kaydedicisinin bitleri
7. Bit  N (Negative) Negatif bayrağı:
Verinin işlenmesi sonunda sonucun işaretini belirtmek için Mİ bu bayrağı ya “1”
(NF=1, eğer sonucun işareti negatifse) veya “0” (NF=0, eğer sonucun işareti pozitifse)
yapar. Diğer bir deyişle N her zaman sonucun işaret bitiyle, yani en büyük basamak bitiyle
aynıdır.
6. Bit  V (oVerflow) Taşma bayrağı:
İşaretli sayılar Mİ tarafından toplanıldığında veya çıkartıldığında bir taşma olup
olmadığını V bayrağı gösterir.
Taşma olayı genelde işaretli sayılar üzerinde işlemler yapılırken rastlanır. İki pozitif
sayının toplanmasıyla negatif sonuç veya iki negatif sayının toplanmasıyla pozitif sonuç
alınması taşma olayına örnektir. Burada problem, toplama sonucunun taşarak işaret bitini
yanlış bir şekilde etkilemesidir.
Taşma baş verdiğinde sonucun doğru olmadığını gösteren V bayrağıdır.
Ödev 3.2: Örneklerle taşma olayını anlatın.
Ödev 3.2: Çıkarma işleminde taşma ne zaman olur?
5. Bit boş (kullanılmıyor), fakat bir komut çalıştırıldıktan sonra bu bit “1”lenir.
Sayfa 16 / 51
4. Bit B (Break) Dur:
B bayrağı bir “Dur” komutunun işletildiğini belirtmek için kullanılır. Bu komut
olduğunda BF=1, olmadığında ise BF=0’dır.
3. Bit  D (Decimal mode) (Ondalık mod):
2.
Bit I (Interrupt) Kesme bayrağı:
Bu bayrak kesme komutlarında kullanılır. SEI komutu bu bayrağı “1” yapar ve bu,
işlemciyi dışarıdan gelen bir kesme sinyaline duyarsız yapar. CLI komutu ise bayrağı “0”
yaparak bu engeli aradan kaldırır.
1.
Bit  Z (Zero) Sıfır bayrağı:
Bir aritmetik, mantık veya kaydırma işlemi yaptıran komut çalıştırıldığında işlem
sonucunun sıfır olup olmamasına göre Z bayrağı “1” veya “0” olur. Sonuç sıfır ise Mİ Z’yi
“1” durumuna (ZF=1), aksi durumda ise Z’yi “0” durumuna (ZF=0) geçirir.
0. Bit  C (Carry) Elde bayrağı:
Bu bayrağı Mİ birkaç değişik amaç için farklı biçimlerde kullanır:
a) 8 bitlik iki sayı toplandığında MSB’den (en büyük basamaktan) sonra bir elde
olup olmadığını kontrol edebilmek için;
b) işaretsiz sayıların çıkarma işleminde, borç (borrow) olup olmadığını izlemek için.
3.3. 6800 Mikroişlemcisi
Bu Mİ’nin programcı açısından yapısı Şekil 3.5’te görülmektedir:
7
0
.
.
.
. .
.
Bayraklar (8)
Akü A (8)
15
. .
. .
.
8
Akü B (8)
İndis Kaydedicisi (16)
XH (8)
XL (8)
Program Sayacı (16)
PCH (8)
PCL (8)
Yığıt Göstergesi (16)
SPH (8)
SPL (8)
Şekil 3.5: 6800 mikroişlemcisinin iç yapısı
Bu Mİ’de 2 tane Akü mevcuttur: A ve B. Buna göre komutlarda onların hangisinin
kullanılacağı gösterilmelidir.
Sayfa 17 / 51
İndis kaydedicisi 16 bit’lik olup, 2 tane ayrı ayrı kaydedici gibi genel amaçlar için de
kullanılabilir. Adresleri biçimlendirmede ise 16 bit olarak kullanılır.
Program Sayacı (PC) (16 bit) bellekten alınacak bir sonraki byte için adresi
içermekte ve bir sonraki adresi oluşturmaktadır. Yani, PC programın sırası ile çalışmasını
sağlamak için kullanılır.
Yığın Göstergesi (SP) belli durumlarda Mİ’nin kaydedicilerinin durumlarının geçici
olarak depolanacağı bellek kısmının adresini içeren 16 bit’lik bir kaydedicidir.
6800’In bayrak (flag) kaydedicisinin bitlerinin nasıl kullanıldığı aşağıdaki şekilde
gösterilmektedir (Şekil 3.6)
7
6
5
4
3
2
1
0
1
1
H
I
N
Z
V
C
Şekil 3.6: 6800 mikroişlemcisinin bayrak kaydedicisi bitleri
7. Bit  kullanılmıyor (1).
6. Bit kullanılmıyor (1).
5. Bit H (Half Carry)Yarım Elde Bayrağı:
ABA, ADC ve ADD komutları çalıştırıldığında bit 3’ten bit 4’e bir elde olduğu
zaman H bit’i “1” durumuna geçer. Eğer bit 4’e elde oluşmazsa H biti “0” durumunda olur.
4. Bit I (Interrupt) Kesme bayrağı:
Bu bayrak kesme komutlarında kullanılır. SEI komutu bu bayrağı “1” yapar ve bu,
işlemciyi dışarıdan gelen bir kesme sinyaline duyarsız yapar. CLI komutu ise bayrağı “0”
yaparak bu engeli aradan kaldırır.
3. Bit  N (Negative) Eski Sonuç Bayrağı:
Sonucun işaretinin eski veya artı olduğunu göstermek için kullanılır. Eğer sonuç eski
ise NF=1, aksi durumda NF=0.
2. Bit  Z (Zero) Sıfır Bayrağı:
Sonuç sıfır ise ZF=1, aksi durumda ZF=0.
1. Bit V (oVerflow) Taşma Bayrağı:
Taşmanın olup olmadığını göstermektedir.
0. Bit C (Carry) Elde Bayrağı:
Bir toplama esnasında eldenin olup olmadığını göstermektedir.
Sayfa 18 / 51
BÖLÜM 4. 8 BİT MİKROİŞLEMCİLERDE ADRESLEME
MODLARI
4.1. Adresleme Modu Nedir?
Adresleme türleri veya modları, bir komutun veya bir verinin bellekten alınıp
getirilmesi veya oraya bir verinin depolanması için bu verinin adresinin belirlenmesi
yöntemleridir. Genelde veri, kaydedicide veya bellekte bulunur. Bu verinin adresi komuta
direkt olarak dahil edilmiş olabilir veya bu komutun işlem koduna göre belirli kurallara göre
hesaplanabilir. Böylece verinin yerinin tespiti için değişik modlar kullanılmaktadır.
Adresleme yöntemlerini iyi anlamak için işlemciler için temel kavramlardan olan
komut ve işlem kodu kavramlarını iyi bilmek gerekir.
Komut (instruction): Mikroişlemcide bir işlemi tanımlayan, bir veya birkaç adresle
birlikte yada adres olmaksızın verilen karakter takımıdır.
İşlem Kodu (operation code): Bilgisayarın belli bir işlem yapmasını sağlayan ve
komutun birinci baytını oluşturan, makine düzeyli koddur.
Örneğin, 6502 Mİ’nin 11 farklı adresleme modu vardır. 6502 komutlarının bazıları
bu adresleme modlarının birkaçını kullanırlar. Örneğin, STA (Store Accumulator –
akümülatöre depola) komutu 7 değişik adresleme modundan birini alabilir, kullanabilir.
Yani 7 farklı STA komutu için 7 farklı işlem kodu (op-code) gereklidir.
Şekil 4.1’de bir komutun genel yapısı gösterilmektedir. Operand 1 byte’lık bir
işlenenin (verinin) genel adıdır.
1, 2 veya 3 byte
İşlem Kodu
1. byte
Operand veya Adres
2. ve/veya 3.byte
Şekil 4.1:Bir komutun genel yapısı
Komutların uzunluğu 1, 2 veya 3 byte olabilirler.
Örnekler:
6502 Mİ için:
İşlem Operand
Komut 1:
Komut 2:
Komut 3:
Kodu veya Adres Açıklama
Uzunluk
TXA
;
(A) ← (X)
1 byte
LDY # $ 5F;
(Y) ← 5F
2 byte
STA $ 0200;
(0200) ← (A) 3 byte
Sayfa 19 / 51
Not: Bu örnekte İşlem kodu kısmı Mnemonik adlanan kısaltmalarla yazılmıştır. Bu,
komutun daha kolay hatırlanmasını sağlamaktadır.
4.2. İmalı Veya Doğal Adresleme
İmalı adresleme modunda açık şekilde herhangi bir hafıza adresi belirtilmemektedir.
Bu adreslemede yalnızca bir byte gereklidir ve bu da yalnızca işlem kodunu içerir. Bu
komutlarda bir operandı veya adresini göstermek gerekmez. Çünkü ya yoktur veya MİB’nin
iç kaydedicilerinden biridir. Buna göre bu adresleme usulüne kaydedici veya doğal
adresleme usulü de denir.
Örnekler:
6502 için:
8085 için:
6800 için:
TAX
MOV A,B
TAB
; (X) ← (A)
; (A) ← (B)
; (B) ← (A)
1 byte
1 byte
1 byte
İmalı adresleme modunun özel bir durumu da akümülatörü adresleme modudur. Bu
durumda operand, akümülatörün içeriğidir. 6502 MİB komut listesinde akümülatördeki
veriyi kaydırma komutları vardır (ASL). MİB bu komutu yürüttüğünde akümülatörün
içeriğini bir bit sola kaydırır. Görüldüğü gibi bu adreslemede akümülatör veya onun içeriği
gösterilmemekte, otomatik olarak ima edilmektedir.
4.3. Hemen Adresleme
Bazen Mİ kaydedicisine veya AMB-ye, bilinen sabit bir değer verilmek istenirse bir
operand adresi belirlemek gibi uzun işlemler gerekmez. Komutta işlem kodundan hemen
sonra operandın kendisi, yani bilinen sabit sayı koyulur. Bu adresleme biçimine hemen,
öncel, ivedi veya hazır adresleme modu denir (İmmediate).
Örnekler:
6502 için:
8985 için:
6800 için:
LDA #$ 7E; (A) ← 7E16
MVI A,7E; (A) ← 7E16
LDAA #$ 7E; (A) ← 7E16
2 byte
2 byte
2 byte
Aşağıda bu modun formatı ve 6502 MİB’ne uygun bir örnek daha verilmiştir. 2
byte’lık bu komutun birinci byte’ı A9 işlem kodu yardımıyla hemen adresleme usulü ile
komutun ikinci byte’ı olan 24 onaltılık sayısının akü’ye iletilmesini organize eder. Örnekteki
birinci bayt işlem kodu, ikinci bayt ise operandın kendisidir, operandın adresi değildir. LDA
komutunu çalıştırmakla Mİ 24 sayısını A akümülatörüne yükler. Komutun Assembly diliyle
gösteriliş biçimindeki # işareti hemen (öncel) adresleme kullanıldığını göstermektedir.
Operandın adresi işlem kodun adresinden hemen bir sonraki hafıza bölümüdür. # işaretinden
Sayfa 20 / 51
sonra gelen sayı her zaman veridir. $ işaretinin verinin onaltılık cinsinde olduğunu
belirttiğini not edelim.
Bayt 1  işlem kodu
Bayt 2  operand
A9
24
LDA #$ 24
4.4. Mutlak Adresleme
Bu adresleme modunda, komutta operandın kendisi değil, bulunduğu adres direkt
olarak iki bayt şeklinde verilmektedir. Yani komutta işlem kodundan sonra iki bayt adres
yazılır.
Örnek olarak LDA (Load Accumulator) komutuyla 021A adresli hafıza bölümünün içeriği
akümülatöre yazmak istersek format şöyle olur (6502):
LDA $021A  AD 1A 02
Bu komut AD işlem koduyla mutlak adresleme moduna göre Mİ 021A adresindeki
veriyi alıp akümülatöre yükler. Adres bölümündeki ilk bayt adresin küçük baytıdır (ADL)
(0A). İkinci bayt ise adresin yüksek baytını (ADH) (02) gösterir. Assembly dili
bölümündeki LDA komutun mnemonic biçimini, $ işareti adresin (021A) onaltılı tabanlı
(hexadecimal) cinsinden olduğunu gösterir.
Mutlak adresleme modunda bir komut için 3 bayt gereklidir. Bu üç baytlık komutun
çalıştırılması için de çoğunlukla 4 saat darbesi gereklidir. Birinci saat darbesi işlem kodunu
getirir (Getir evresi), ikinci ve üçüncü saat darbeleri adresi getirirler, dördüncü saat darbesi
ise operanddaki işlemi gerçekleştirir (Yürüt evresi).
Örnekler:
8085 için:
LDA 021Ah*;(A) ← (021A16)
3 byte
6800 için:
LDAB #$021A;(B) ← (021A16)
3 byte
* h - sayının onaltılı (hexadecimal) olduğunu göstermektedir.
4.5. Sıfır Sayfa Adresleme
Bazen bellek, sayfalara ayrılarak kullanılmaktadır. Adres hatlarının sayısı 16 olan
mikroişlemciler için adres uzayı 0000 – FFFF’e kadar olur. Bu adres uzayı her biri 255
(FF16) artı 0000 içinde bir bayt ile 256 bayt olan sayfalara bölünür. Bu bölümlemeye
sayfalama denir. Bu sayfalardan 0000 ile başlayıp 00FF e kadar olan sayfaya sıfır sayfa
(zero-page) denir.
Sıfır sayfa adreslemede iki bayt kullanılır. Bir bayt işlem kodu için, bir bayt ADL
(adres küçük baytı) için gereklidir. ADH her zaman 00’dır. Bu modu kullanan komutlar
çoğunlukla üç saat darbesinde yürütülürler.
Sayfa 21 / 51
6800 MİB’deki “Direct Addressing – Doğrudan Adresleme” modu bu adreslemeye
benzemektedir. 8085’de bu mod yoktur.
Sıfır sayfa adreslemede mutlak adreslemeye göre daha az baytlık yer gerektiği ve
daha kısa zamanda çalıştırıldığı için programcılar mümkün oldukça bu adresleme modunu
kullanırlar. Tipik olarak sıfır sayfadaki adreslere programın kullandığı veri depolanır. Yani
00XX
adresleri
genellikle
RAM
adresleri
olurlar.
Bu
adresleme
modu
6502
mikroişlemcisinde çok kullanılmaktadır.
Örnek:
LDA $2A
;(A) ← (002A16)
2 byte
Görüldüğü gibi komutun adres kısmındaki adres bir byte olup (2A), komut
yürüdüğünde önüne iki sıfır getirilmekte ve böylece belleğin 002A adresindeki veri
akümülatöre iletilmektedir.
4.6. Dolaylı Adresleme
Bu adresleme modu normalde deneyimli programcılar içindir. Dolaylı adreslemede
komutun adres bölümü operandın bulunduğu adresi değil, adresin adresini gösterir. Bu
yüzden diğer adresleme modlarından daha fazla zaman harcar. Sadece gerekli olduğu zaman
bu adresleme modu kullanılır. 6502 MİB de yalnız bir tane dolaylı adresleme komutu vardır.
Bu JMP (6C)dir.
4.7. İndeks Adresleme
İndeksli adresleme modu hafızadaki veri dizinlerini, tablolarını veya bloklarını
işlemeyi kolaylaştıran çok güçlü bir adresleme modudur. Bu adreslemede operandın gerçek
(fiziksel) veya efektif denen adresi, komuttan sonra gelen operand adres kısmıyla indeks
kaydedicisinin içeriğini toplamakla bulunur.
Efektif (etkin) operandın adresi = operand adresi + İndeks kaydedicisinin içeriği.
İndeks adresleme, mutlak adreslemeyle, sıfır-sayfa adresleme ile ve dolaylı
adresleme ile beraber kullanılarak etkili görevler yapar.
6800 MİB de indeksli adresleme biraz farklıdır. Bu Mİ’de “İndeksli Adresleme
Modu” 2 byte bilgi kullanır. İşlem kodundan hemen sonraki hafıza bölümünde bir adres
meydana getirmek için indeks kaydedicisinin içeriğine eklenen sayı (bazen buna “offset” de
denir) bulunur. Burada indeks kaydedicisinin içeriğindeki iki baytlık adresle işlem kodundan
Sayfa 22 / 51
hemen sonraki veri toplanarak yeni bir adres oluşturulur. Bulunan yeni adres veriyi taşıyan
adrestir.
Örnek: Belleğin 2061 adresinden başlayarak 2069 adresine kadar olan 9 tane veriyi
toplayıp sonucu 0500 adresine kaydetmeli (6502 için).
Adres
Açıklama
Komut Etiket Mnem. Operand
veya Adres
0200
A9 00
LDA
#$ 00
(A)←00
0202
A2 09
LDX
#$ 09
(X) ←09
0204
7D 60 20 LOOP
ADC
$2060, X
(A) ←(A)+(2060+(X))
0207
CA
DEX
0208
D0 FA
BNE
LOOP
9 kere LOOP’a git
020A
8D 00 05
STA
$0500
(0500) ← (A)
020D
4C 0D 02 END
JMP
END
Son
(X) ← (X) - 1
4.8. Göreli Adresleme
Bazen bu adresleme moduna “bağıl” veya “izafi” adresleme modu da denir. Bu
adresleme modunda bir sonraki çalıştırılacak komut hemen takip eden bölümde değil, başka
bir bölümde bulunur. Bu adresleme usulüne
sapma, dallanma (branch) komutlarında
rastlanır.
Sapmanın yapılması için gereken komutlar iki bayt uzunluğundadır. Sapma
komutundan bir sonraki bölümde Mİ’nin bir sonraki komutunu nereden alacağı belirlenir.
MİB ileriye ve geriye doğru sapma yapabildiğine göre bunları ayrı ayrı inceleyelim:
(1) İleriye Doğru Sapma: Bu adresleme modu kullanan komutun 2. baytının işaret
biti pozitif (“0”) olduğunda ileriye doğru sapma oluşur. Bunun için 2. byte 16’lı 00 ile 7F
arasında bir değer almalıdır.Bu durumda 2. bayt Program sayacının o andaki değerinin
üzerine eklenir ve elde edilmiş yeni adrese sapma yapılır. 2. bayt pozitif olduğundan dolayı
yeni adres o andaki adresten büyük olacak ve böylece sapma daha ilerideki bir adrese
yapılacaktır.
Örnek: (6502)
0200 18
0201 90
1A
CLC
;
BCC $1A;
1 bayt
2 bayt
Burada 90, BCC (Branch if CF=0 - eğer CF=0 ise sap) komutunun işlem kodu, 1A
ise sapılacak adreslerin sayısını göstermektedir. Sapılacak adres böyle hesaplanılır:
Sayfa 23 / 51
Sapılacak Adres = (PC) +2 + 1A = 0201 + 2 + 1A = 021D16.
Burada 2 eklenmesi Program Sayacının içeriğinin bir sonraki adımda 0201 değil de,
0203 olacağı için yapılmaktadır.
(2) Geriye Doğru Sapma: Bu adresleme modu kullanan komutun 2. baytının işaret
biti negatif (“1”) olduğunda geriye doğru sapma oluşur. Bunun için 2. byte 16’lı 80 ile FF
arasında bir değer almalıdır.Bu durumda 2. bayt Program Sayacının o andaki değerinden
çıkarılır ve elde edilmiş yeni adrese sapma yapılır. 2. bayt negatif olduğundan dolayı yeni
adres o andaki adresten küçük olacak ve böylece sapma gerideki bir adrese yapılacaktır.
Örnek: (6502)
0200 18
0201 90
FA
CLC
1 bayt
BCC $FA;
2 bayt
Burada 90, BCC (Branch if CF=0 - eğer CF=0 ise sap) komutunun işlem kodu, FA
ise sapılacak adreslerin sayısının 2’ye tümleyenidir. Sapılacak adres böyle hesaplanılır:
Sapılacak Adres = (PC) +2 - FA = 0201 + 2 + FFFA = 01FD16.
Görüldüğü gibi 01FD16 adresi 020216 adresinden küçüktür ve dolayısı ile bu adres
020216 adresinin gerisindedir.
Not: Çıkarma yerine toplama kullanıldığına dikkat edin.
Sayfa 24 / 51
BÖLÜM 5. 8 BİT MİKROİŞLEMCİLERDE KOMUTLAR
5.1. Genel Bilgiler
Genelde komutlar aşağıdaki guruplara ayrılırlar:
(1) Veri iletme komutları;
(2) Artırma ve azaltma komutları;
(3) Aritmetik komutlar;
(4) Mantık komutları;
(5) Kontrol komutları;
(6) Giriş-çıkış komutları;
(7) Kaydırma ve döndürme komutları;
(8) Diğer komutlar.
Bu komutlar 8 bit uzunluklu verileri:
(a) Mİ içeriğindeki kaydediciler;
(b) Mİ içeriğindeki kaydediciler ve ana bellek (RAM);
arasında transfer etmek amacıyla kullanılırlar.
Not: Bu bölümde veri iletme komutlarının hepsi verilmemektedir. Bu komutları
uygun Mİ’nin komut listesinde görebilirisiniz.
5.2. Veri İletme Komutları
5.2.1. 8085 Mİ Veri Aktarma Komutları:
Mİ içeriğindeki kaydediciler arasında 1 bayt veri iletişimini sağlamak için kullanılan
komutlar:
MOV R1,R2;
(R1)  (R2) R2’nin içeriği R1’e iletilir (kopyalanır)
şeklindedir. Burada R1 ve R2 olarak Mİ’nin 7 kaydedicisinden biri ele alınabilir (A, B, C, D,
E, H ve L).
Örnekler:
MOV A,B;
MOV C,D;
MOV H,L;
(A)  (B)
(C)  (D)
(H)  (L)
Bu komutlar 1 bayt uzunluğunda olup imalı adresleme modu kullanmaktadırlar. Çoğu
zaman bu adresleme modu kaydedici-kaydedici (R-R) olarak da adlandırılır.
Genelde 8085 Mİ’nin tüm veri iletme komutları bayrakları etkilememektedirler
Bellekle kaydedici arasında 1 bayt veri iletme komutları aşağıdakilerdir:
Sayfa 25 / 51
MOV
R,M;
(R)  (M)
Bellekteki bir hanenin içeriği kaydediciye
iletilir.
Burada bellek hanesinin adresi, 16 bit olarak HL kaydedici çiftinden götürülür (bu
adres önceden ora yazılmış olmalıdır). R olarak 7 kaydediciden biri götürülebilir. Örneğin, D
kaydedicisinin içeriğini belleğe aktarmak (kopyalamak) için:
MOV D,M; (D)  ((HL))
komutu kullanılabilir. Burada iki kat parantez H-L kaydedici çiftinin içeriğine göre
bulunmuş bellek hanesinin içeriği anlamında kullanılmaktadır (içeriğin içeriği).
Bu komutun tersi kaydedicideki veriyi bir bellek hanesine iletmektedir:
MOV M,R; (M)  (R)
Akü’deki veriyi bellekte bir haneye ilet;
Yani:
MOV M,R; ((HL))  (R) R kaydedicisindeki veriyi adresi HL kaydedici çiftinde
yazılmış olan bellek hanesine ilet.
Örnek:
MOV M,B; ((HL))  (B) ; B kaydedicisinin içeriğini adresi H-L kaydedici
çiftinde olan bellek hanesine ilet.
Şimdiye kadar baktığımız 8085 komutları imalı adresleme yöntemi kullanmakta ve
uzunlukları 1 bayt olmaktadırlar.
Hatırlatma: İmalı adresleme nedir?
Bazen elimizde sabit veriler olmaktadır. Biz bu verileri hemen kullanabilmemiz için
8085’te uygun komutlar mevcuttur:
MVI
R,veri; (R)  veri;
Komutta 2. bayt olarak yerleştirilmiş olan veri gösterilen kaydediciye aktarılır. Bu
komutun uzunluğu 2 bayttır ve hemen adresleme yöntemi kullanmaktadır.
Hatırlatma: Hemen adresleme modu nedir?
Örnekler:
MVI A,23H; (A)  2316 23 onaltılık sayısını A’ya aktar;
MVI H,02H; (H)  0216 02 onaltılık sayısını H’ye aktar;
MVI L,00H; (L)  0016 00 sayısını L’ye aktar;
Ödev 5.1: Aşağıdaki programın her bir komutu çalıştıktan sonra kaydedicilerin
durumu ne olur? İlk durumlar belirsizdir (xx ile işaretleyin):
Sayfa 26 / 51
(A)
(B)
(C)
(D)
(E)
(H)
(L)
MVI A,ABH
MOV B,A
MOV D,B
MOV E,D
MOV H,E
MOV L,H
Ödev 5.2: Aşağıdaki programın her bir komutu çalıştıktan sonra kaydedicilerin
durumu ne olur? İlk durumlar belirsizdir (xx ile işaretleyin). Belleğin 0200 adresinde 3A
verisinin olduğunu varsayalım :
(H)
(L)
(A) (B) Bellek (0200) Bellek (0301)
MVI H,02H
MVI L,00H
MOV A,M
MOV B,A
MVI H, 03
MVI L,01H
MOV M,A
8085 Mİ’de kaydedicilerin çift olarak 2 bayt veri depolamak için kullanıldığını
biliyoruz. Peki 16 bit veriyi bu çift kaydedicilere iletme komutu var mı?
Evet.
Bu komutlar aşağıdakilerdir:
LXI
rp,16 bit veri; (rp)  16 bit veri.
Burada rp çift kaydedicilerden biri, 16 bit veri ise genelde adrestir. rp (register pair)
olarak B (BC), D (DE) ve H (HL) götürüldüğünü hatırlatalım.
Örnek:
LXI
H, 0200H; (HL)  020016
Bu komut 020016 verisini (bu 2 bayt uzunluğu sahip olan bir adrestir) hemen HL
kaydedici çiftine iletir. Bu durumda 0216 H, 0016 ise L kaydedicisinde yerleşecektir.
Görüldüğü gibi komutun uzunluğu 3 bayt, adresleme modu hemendir
2 bayt veriyi çift kaydediciler arasında karşılıklı ileten komut:
XCHG rp ; (HL) ↔ (rp)
Sayfa 27 / 51
Örnek:
XCHG D ; (HL)↔(DE)
Bu komut HL kaydedici çiftinin içeriğindeki 16 bit veriyi DE’ye iletir, kendisi ise
DE’nin içeriğindeki 16 bit veriyi alır (karşılıklı mübadele). Uzunluğu 1 bayt, adresleme
modu imalıdır.
En çok kullanılan kaydedici olan Akü’yü direk bellekten veri ile yükleyen veya
ondaki veriyi belleğe ileten komutlar aşağıdakilerdir:
LDA adres; (A)  (adres)
STA adres; (adres)  (A)
Burada komutta mutlak adres gösterilmekte ve veri iletme işlemi bellekteki bu
adresle yapılmaktadır. Bundan dolayı komutun uzunluğu 3 bayt ve adresleme modu
mutlaktır.
Ödev 5.3: Aşağıda 3 program parçası verilmiştir. Programların ne iş yaptığını ve
uzunluklarını (kaç bayt tuttuğunu) belirleyin. Hangisi daha iyi program olarak görülebilir
(Bellekte tuttuğu yer ve yürütülme hızı açısından)?
Program 1
Program 2
Program 3
MVI H,02H
MVI L,01H
MOV A,M
MOV B,A
LXI H,0201H
MOV A,M
MOV B,A
LDA 0201H
MOV B,A
Uzunluk =
bayt;
=bayt;
=bayt.
Bazen bellekten akü’ye veri iletirken (veya tersine) HL çifti değil, diğer kaydedici
çiftleri kullanılır. Bu, aşağıdaki komutların yardımıyla yapılabilir:
LDAX rp; (A)  ((rp))
STAX rp; ((rp))  (A)
Bu komutların uzunluğu 1 bayt ve adresleme modu imalıdır
Örnek:
MVI A, 23H;
LXI D, 0205H
STAX D
(A)  2316
; (DE)  020516
; ((DE))  (A)
Soru: Bu program parçası kaç bayttır? Her komutun kullandığı adresleme modu
hangisidir?
Ödev 5.4: Aşağıdaki program parçasının her bir komutu yürütülürken kaydedicilerin
durumunu yazın:
Sayfa 28 / 51
(A) (H)
(L)
(B)
(E) Bellek (080A) Bellek (0223)
MVI A, 23H
LXI H, 080AH
MOV M,A
MVI B,02H
MOV E,A
XCHG D
STAX D
5.2.2. 6502 Mİ Veri Aktarma Komutları:
6502 Mİ’nde Akü’den başka, adları X ve Y olmakla 2 tane kaydedici olduğunu
hatırlatalım.
Bu
Mİ’de
kaydediciler
ve
bellek
arasında
yalnızca
1
bayt
veri
aktarılabilmektedir. X ve Y kaydedicileri ile Akü arasında veri iletme komutları aşağıda
gösterilmektedir:
TAX; (X)  (A)
TAY; (Y)  (A)
TXA; (A)  (X)
TYA; (A)  (Y)
Bu komutlarda imalı adresleme modu kullanılmaktadır. Uzunlukları 1 bayttır. Bu
komutlar N ve Z bayraklarını etkilerler. Ayrıca, Akü ile bellek arasında veri iletimi komutları
mevcuttur:
LDA adres; (A)  (adres)
STA adres; (adres)  (A)
Bu komutlar kullanıldığında eğer veriler 0. sayfada ise adresin büyük baytını
göstermeye gerek kalmamaktadır ve böylece adres kısmında 2 bayt değil, 1 bayt
yazılmaktadır.
Örnek:
LDA
LDA
STA
STA
$ 02;
$ 0200;
$ 0A;
$ 0203;
(A)  (000216)
(A)  (020016)
(000A16)  (A)
(020316)  (A)
Bu komutlardan LDA komutu hemen adresleme modu kullanılmakla da yürütülebilir.
Bu durumda # işareti kullanılır:
LDA # $ 23; (A)  2316
Not: STA komutunun hemen adresleme modunda kullanılamayacağı açıktır.
Aynı prensiple LDX, LDY ve STX ve STY komutları da kullanılabilir. Bunlar uygun
olarak LDA ve STA komutları gibi hemen (yalnızca LDX ve LDY komutlarında), sıfır sayfa
ve mutlak adresleme kullanabilirler.
Sayfa 29 / 51
Örnekler:
LDX #$ 23 ;(X)  2316
LDY $ 23 ;(Y)  (002316)
STX $ 0203 ;(020316)  (X)
Ödev 5.5. Aşağıdaki tablodaki komutlar yürütüldükten sonra kaydedicilerin
durumlarını yazın (ilk durumlar belirsizdir: xx).
(A) (X) (Y) Bell.(0205) Bell.(0206) Bell.(0207)
LDA # $ 4A
LDX # $ 5B
TAY
STA $ 0205
STX $ 0206
STY $ 0207
LDX $ 0205
5.2.3. 6800 Mİ Veri Aktarma Komutları:
Bu Mİ’de 2 Akü ve 2 tane 8 bit kaydedici olarak ta kullanılabilen bir tane X
kaydedicisinin olduğunu hatırlayalım. Bu Akü’ler (A ve B) arasındaki veri iletme komutları
(uzunlukları 1 bayt) aşağıda gösterilmektedir:
TAB ; (B)  (A)
TBA ; (A) (B)
Soru: Bu komutların adresleme modu nedir?
Akü’lerle bellek arasında veri iletimi komutları 3 bayt uzunlukta olup mutlak
adresleme modu kullanırlar:
LDAA adres; (A)  (adres)
LDAB adres; (B)  (adres)
STAA adres; (adres)  (A)
STAB adres; (adres)  (B)
6800’ın veri iletme komutları N ve Z bayraklarını etkilerler. Ayrıca V bayrağını
sıfırlarlar.
6800 Mİ’nde de baktığımız LDAA ve LDAB komutları hemen adresleme modu
kullanılmakla uygun Akü’ye veriyi hemen iletebilme olanakları mevcuttur:
LDAA # $ 23; (A)  2316
LDAB # $ 23; (B)  2316
Sayfa 30 / 51
Ödev 5.6: Her 3 Mİ’nin veri iletme komutlarını analiz edin. Hangi adresleme modları
kullandıklarını, uzunluklarının kaç bayt olduğunu ve hangi bayrakları ve nasıl etkilediklerini
literatür kullanarak bir tablo şeklinde hazırlayın. Bu tabloyu ileride devam ettirilecek şekilde
biçimlendirin.
5.3. Artırma ve Azaltma Komutları
Bir program yazıldığında çoğu zaman bir veya birden fazla sayaca ihtiyaç duyulur.
Bu ihtiyaçları karşılamak için, yani program yardımı ile sayaç oluşturabilmek için tüm
Mİ’lerde Artırma ve Azaltma komutları kullanılmaktadır. Bu komutlar genelde bir
kaydedicinin (bazen bir bellek hanesinin) içeriğini 1 artırmakla veya 1 azaltmakla sayaç
görevini yapmağa yardımcı olurlar.
5.3.1. 8085’in Artırma ve Azaltma Komutları
Bu Mİ’de kaydedicinin içeriğini 1 artıran komut:
INC
; (R)  (R)+1
R
ve 1 azaltan komut:
; (R)  (R)-1
DCR R
şeklindedirler.
Bellekteki bir hanenin içeriğini artıran ve azaltan komutlar aşağıda verilmiştir:
M
; ((HL))  ((HL))+1
DCR M
; ((HL))  ((HL))-1
INC
Görüldüğü gibi bu komutların uzunluğu 1 bayttır ve imalı adresleme modu
kullanmaktadırlar. Şimdiye kadar baktığımız bu 4 komut C (elde) bayrağından başka yerde
kalan 4 bayrağı etkiler.
8085 Mİ’si 2 bayt verilerle işlem yapabildiğinden dolayı 2 baytlık veriler üzerinde de
artırma ve azaltma komutları mevcuttur:
INX
rp
DCX rp
;
(rp)  (rp) + 1
;
(rp)  (rp) – 1
Bu 2 komut hiçbir bayrağı etkilemezler.
Örnekler:
MVI
C,1FH ; (C)  1F16
INC
C
; (C)  (C) + 1
MOV
B,C
; (B)  (C)
DCR
B
;
(B)  (B) - 1
DCX
B
;
(BC)  (BC) – 1
Sayfa 31 / 51
Soru: Bu program parçası ne iş yapmakta ve bellekte kaç bayt yer tutmaktadır
5.3.2. 6502’nin Artırma ve Azaltma Komutları
6502 Mİ’nde artırma ve azaltma komutları X ve Y kaydedicileri ile bellekteki bir
haneye uygulanabilmektedir:
INX
;
INY
;
DEX
;
DEY
;
INC adr;
DEC adr;
(X)  (X) + 1
(Y)  (Y) + 1
(X)  (X) - 1
(Y)  (Y) – 1
(adr)  (adr) + 1
(adr)  (adr) – 1
Son iki komuttan başka diğer komutlar 1 bayt uzunlukta olup imalı adresleme modu
kullanmaktadırlar. 2 son komut bellekteki bir hane ile işlem yaptığından dolayı bu
komutlarda adresin verilmesi (0 sayfa, yada mutlak olarak) gerekmektedir. Böylece bu
komutların uzunluğu 2 veya 3 bayt olmaktadır.
Dikkat: Bu işlemcide Akü’deki verinin artırılması veya azaltılması komutları yoktur.
Önemli: 6502’nin tüm artırma ve azaltma komutları N ve Z bayraklarını etkilerler.
Ödev 5.7: Aşağıdaki programı inceleyin ve uygun kaydedicilerin ve bellek
hanelerinin içeriklerini her komuttan sonra nasıl olacağını yazın:
Açıklama
Komut
LDX
#$AF
(X)  (X) + 1
TXA
(A)  (X)
TXY
(Y)  (X)
DEY
INC
$0205
(A)
(Y) Bell.
(X)  AF16
INX
STA
(X)
(020516)  (A)
(Y)  (Y) - 1
$0205 (020516)  (020516) + 1
5.3.3. 6800’ın Artırma ve Azaltma Komutları
6800 Mİ’nde 2 Akü olduğu için bu Akü’lerin her biri için ayrı ayrı artırma ve azaltma
komutları vardır. Ayrıca 16 bit X kaydedicisi için de bu komutlar mevcuttur. Bellekte
herhangi bir hanenin de içeriği ile bu işlemleri yapan komutlar mevcuttur
Sayfa 32 / 51
Örnekler:
1. INCA
; (A)(A) +1
2. INCB
; (B)(B) +1
3. DECA
; (A)(A) -1
4. DECB
; (B)(B) -1
5. INX
; (X)(X) +1
6. DEX
; (X)(X) -1
7. INC adr ; (adr)(adr) +1
8. DEC adr ; (adr)(adr) -1
Bu örneklerde 1. - 6. komutların uzunluğu 1 bayt olup imalı adresleme modu
kullanmaktadırlar. Kalan 7. ve 8. komutlar mutlak (uzunluğu 3 bayt) ve genişletilmiş
(uzunluğu 2 bayt) adresleme modu kullanmaktadırlar.
Dikkat: Bu komutlar hepsi N ve Z bayraklarını etkilerler, V bayrağını ise sıfırlarlar.
Ödev 5.8: Belleğin 0203, 0204 ve 0205 hanelerinde yerleşmiş olan verileri uygun
olarak 0306, 0307 ve 0308 bellek hanelerine ileten program parçalarını her üç Mİ için yazın.
5.4. Aritmetik Komutlar
8 bit Mİ komut listelerinde genelde toplama ve çıkarma gibi işlemler için komutlar
bulunmaktadır (çarpma ve bölme işlemleri program yazarak gerçekleştirilir). Bu komutlar 8
bit veriyi toplarlar veya çıkarırlar. 16 bit toplama komutu yalnızca 8085 Mİ’de vardır.
Genelde aritmetik işlemler ikili (16’lı) sayılar üzerinde yapılmaktadır. Fakat bu
Mİ’lerde 10’lu sayılar üzerinde de aritmetik işlemler yapılabilmektedir.
Dikkat: Aritmetik komutların birçok bayrağı etkilediğini unutmayın.
Aritmetik işlemlerin nasıl yapıldığını anlamak için 16’lı sayılar üzerinde toplama ve
çıkarma işlemlerinin nasıl yapıldığını bilmek gerekmektedir.
Dikkat: Bütün aritmetik komutlar, verilerden birisinin Akü’de olduğunu ve genelde
cevabın da Akü’de birikeceğini öngörmektedir.
5.4.1. 8085 Mİ Aritmetik Komutları
Bu Mİ komutları verilerden birinin önceden Akü’ye yerleştirilmiş olmasını
öngörmektedirler. Cevabın da Akü’de alınacağı sabit olarak bilinmektedir.
Önce Toplama komutlarına bakalım. Veriler kaydedicilerde ise:
ADD R
; (A)(A)+(R)
Bu komut Akü’deki veri ile R kaydedicisindeki veriyi toplayarak toplamı yine
Akü’ye aktarır.
Sayfa 33 / 51
R olarak B, C, D,E, H, L ve M (Bellek - Memory) götürülebilir. Komutun uzunluğu 1
bayt, adresleme modu imalıdır. R yerine Bellek (M) olduğunda, bellekteki verinin adresi HL
kaydedici çiftinden götürülür (bu adres önceden oraya yüklenmiş olmalıdır).
Örnekler:
ADD B
; (A)(A)+(B)
ADD M
; (A)(A)+(M)
; (A)(A)+((HL))
Ödev 5.9:
MVI
A,39H;
MVI
C,FAH;
ADD C
;
programı Mİ tarafından yürütüldükten sonra Akü’de hangi sayı olacaktır?
Elimizde 8 bit sabit veriler olduğunda bu verilerin kendilerini hemen adresleme modu
kullanarak toplama (veya çıkarma) işleminde işlemine sokabiliriz:
ADI
veri; (A)(A)+veri
Görüldüğü gibi komutun uzunluğu 2 bayttır. İkinci bayt olarak 8 bit veri
yazılmaktadır.
Örnek:
ADI
2DH
; (A)(A)+2D16
Bakılan komutlarda Elde bayrağının (CF) iştirak etmediği görülmektedir. Bazen,
toplama esnasında bu bayrağın değerinin dikkate alınması istenmektedir. Bunun için bakılan
komutlar değişik bir şekilde kullanılmaktadır:
ADC R
ACI veri
Örnekler:
; (A)(A)+(R)+(CF)
; (A)(A)+veri+(CF)
ADC B
; (A)(A)+(B)+(CF)
ACI 85H
; (A)(A)+8516+(CF)
Ödev 5.10: Belleğin 0200, 0201 ve 0202 adreslerinde önceden yazılmış olan baytları
toplayan programı bellekte en az yer tutacak şekilde yazın.
Ödev 5.11: Doğum gününüz, doğum ayınız ve öğrenci numaranızın son 2 rakamını
16’lı sayılar olarak kabul edin ve onların toplamını bulan program parçası yazın.
Ödev 5.12: Aşağıdaki program parçasının her bir komutu çalıştıktan sonra uygun
kaydedicilerin ve bayrakların durumunu yazın:
(A)
(B)
(SF)
(ZF)
(AC)
CLC
MVI A,23H
ADI 87H
MVI B,FFH
ADD B
ACI 99H
Sayfa 34 / 51
(PF)
(CF)
Çıkarma komutlarında Azalan önceden Akü’ye yerleştirilmiş olmalıdır ve farkın da
Akü’ye atılacağı bilinmelidir.
SUB
r
; (A)(A)-(R)
Burada R olarak 7 kaydediciden biri ve bellek (M olarak) götürülebilir. R’in bellek
olması durumunda azaltanın adresi otomatikman HL kaydedici çiftinden götürülecektir.
Hemen adresleme modu kullanan ve uzunluğu 2 bayt olan çıkarma komutu:
SUI veri ; (A)(A)-veri
şeklindedir.
Çıkarma esnasında borç alma imkanı tanıyan komutlar:
SBB R ; (A)(A)-(R)-(CF)
SBI veri ; (A)(A)-veri –(CF)
Ödev 5.13: Ödev 10’daki bellek adreslerindeki verilerin çıkarılması (yani (0200)(0201)-(0202) ) programını yazın.
Ödev 5.14: Doğum yılınızın son 2 rakamından doğum gününüzü ve bu farktan da
öğrenci numaranızın son 2 rakamını (16’lı sayılar olarak) çıkaran program yazın.
Ödev 5.15: Aşağıdaki program parçasının her bir komutu çalıştıktan sonra uygun
kaydedicilerin ve bayrakların durumunu yazın:
(A)
(C)
(SF) (ZF) (AC) (PF) (CF)
CLC
MVI A,87H
SUI 23H
MVI C,54H
SBB C
Ödev 5.16: 041F ve 0420 adresli bellek hanelerinde olan sayıları toplayan,
toplamdan 0306 adresli bellek hanesindeki sayıyı çıkaran, farkın üzerine 5416 ekleyen ve
sonucu 0204 adresine gönderen programı yazın. Veriler 8 bittir.
Ödev 5.17: Ödev 5.16’daki problemi 16 bit sayılar için yapın. 16 bit 1. sayının küçük
baytı 041F, büyük baytı 0420 adreslerinde, 2. sayının küçük baytı 0421, büyük baytı ise 0422
adreslerinde olduğunu varsayın. Toplamdan 0306 ve 0307 adreslerindeki sayı çıkarılacaktır.
Eklenen sayı 545416 olacaktır. Sonuç 0204 ve 0205 adreslerine gönderilmelidir.
8085 Mİ’si 8 bit Mİ’ler arasında 16 bit verileri direk toplamaya olanak tanıyan tek bir
komuta sahiptir:
Sayfa 35 / 51
DAD rp
; (HL)(HL)+(rp)
Burada rp (register pair – kaydedici çifti) olarak BC, DE, HL veya SP 16 bit
kaydedicilerinden birisi götürülebilir. Komut 1 bayt uzunluklu, adreslemesi imalıdır.
Örnek:
DAD B
; (HL)(HL)+(BC)
Ödev 5.18: Ödev 17’yi DAD komutu kullanarak yeniden düzenleyin.
Onlu toplama yapabilmek için önce 16’lı toplama yapılmalıdır. Yani, 10’lu sayılar
16’lı olarak 8 bit toplama komutlarından birisinin yardımıyla toplanır. Sonra
DAA
10’lu tashih komutunun yardımıyla bu 16’lı toplam 10’lu sonuca dönüştürülür. Uzunluğu 1
bayttır.
Hatırlatma: DAA komutunun nasıl çalıştığını anlamak için 2-10’lu toplama
kurallarını bilmek gerekir: (Kural 1: Eğer toplamdaki yarımbayt 9’dan büyükse bu
yarımbayta 6 eklenir; Kural 2: Eğer toplama zamanı bir yarımbayttan elde varsa bu
yarımbayta 6 eklenir).
Örnek:
(A)
(B)
(AC)
(CF)
MVI A, 38
38
xx
xx
xx
MVI B, 47
38
47
xx
xx
ADD B
7F
47
0
0
DAA
85
47
0
0
5.4.2. 6502 Mİ’nin Aritmetik Komutları
Bu Mİ’de 8 bit veriler üzerinde hem toplama, hem de çıkarma komutları elde
bayrağını direk olarak kullanmaktadırlar. Bu yüzden bu işlemler yapılmazdan önce bu
bayrağın durumuna dikkat edilmelidir. Genelde toplama işleminden önce elde bayrağını
“0”lamak, çıkarma işleminden önce ise bu bayrağı “1”lemek gerekir.
Toplama komutları:
ADC veri
;(A)(A)+veri+(CF)
ADC adr.
;(A)(A)+(M)+(CF)
Burada 1. komutun uzunluğu 2 bayt (hemen adresleme modu), 2. komutun uzunluğu
ise adresleme moduna bağlı olarak 2 (0 sayfa adreslemede) veya 3 bayt (mutlak
adreslemede) olur.
Sayfa 36 / 51
Örnek:
Açıklama
(A)
(CF)
CLC
(CF)0
xx
0
LDA #$ 28
(A)2816
2816
0
ADC #$ 85
(A)(A)+8516+0
AD16
0
Bu program 5 bayt uzunluğa sahiptir.
Ödev 5.19: Aşağıdaki programı inceleyin ve tabloyu doldurun. Bunun için belleğin
aşağıdaki adreslerinde gösterilen 16’lı verilerin olduğunu varsayın:
[0040]=61
[0050]=39
[0041]=B5
[0051]=3F
[0080]=…
[0081]=…
Cevabı aşağıdaki tabloya yazın.
Açıklama
(A)
(CF)
CLC
LDA $ 40
ADC $50
STA $ 80
LDA $ 41
ADC $ 51
STA $ 81
Çıkarma komutu da aynen toplama komutuna benzer çalışmaktadır. Fakat bu komutu
çalıştırmazdan önce elde bayrağının SEC komutu ile “1”lendiğini unutmayın. Bu,
gerektiğinde borç almak için kullanılır.
SBC
veri
; (A)(A)-veri- (CF)
SBC adr.
Örnek:
; (A)(A)-(M)- (CF)
SEC
; (CF)1
LDA #$ AA ; (A)AA16
SBC #$ 86
; (A)(A)-8616-0
Onlu sayılar üzerinde aritmetik işlemler yapabilmek için 6502 Mİ’de onlu mod
bayrağı kullanılır. Eğer bu bayrak “1” durumunda ise, işlemler onlu modda yapılır.
Sayfa 37 / 51
Örnek:
Komutlar
Açıklama
(A)
SEC
(DF)1
xx
1
x
CLC
(CF)
xx
1
0
LDA #$ 69
(A)6916
6916
1
0
ADC #$ 95
(A)(A)+9516 +0
6416
1
1
SBC #$ 47
(A)(A)- 4716 - 0
1716
1
1
(DF) (CF)
Ödev 5.20: Aşağıdaki tabloyu doldurun:
Komutlar
(A)
(DF)
(CF)
(NF)
SEC
SED
LDA #$ 69
SBC #$ 73
ADC #$ 85
CLD
5.4.3. 6800 Mİ’nin Aritmetik Komutları
6800 Mİ’de 2 Akü olduğundan dolayı bu Akü’lerle ayrı ayrı aritmetik işlemler
yapılmaktadır. Komutlara bakalım:
ADDA
veri veya adres
A ile topla
ADDB
veri veya adres
B ile topla
SUBA
veri veya adres
A’dan çıkar
SUBB
veri veya adres
B’den çıkar
Bu komutlarda toplananlardan biri (veya azalan) önceden uygun Akü’ye
yerleştirilmelidir. Görüldüğü gibi komutlar 2 veya 3 bayt uzunluğunda olurlar.
Ayrıca,
ABA ;(A)(A)+(B)
komutu A ile B’nin içeriklerini toplar ve toplamı A’da tutar. Ve:
SBA
;(A)(A)-(B)
komutu da A’dan B’nin içeriğini çıkarır ve farkı A’ya aktarır.
Bu komutlar elde bayrağını dikkate almamaktadırlar. Elde bayrağını da dikkate alan
komutlar aşağıda gösterilmektedir:
Sayfa 38 / 51
ADCA
veri veya adres
ADCB
veri veya adres
SBCA
veri veya adres
SBCB
veri veya adres
6800 Mİ’nde onlu sayılar üzerinde toplama, düzeltme (tashih) komutu olan DAA ile
yapılmaktadır.
5.5. Mantık Komutları
8 bit Mİ’lerde mantık komutları 8 bit ikili (binary) veriler üzerinde VE, VEYA,
ÖZEL VEYA, DEĞİL ve diğer işlemleri yapmaktadırlar. Burada dikkat edilmesi gereken
nokta, bu işlemlerin bit bit yapılması, yani komşu bitlere hiçbir eldenin söz konusu
olmadığıdır. VE, VEYA ve ÖZEL VEYA gibi 2 tane veri talep eden işlemlerde verilerden
biri her zaman önceden Akü’de olmalıdır. Sonucun da her zaman Akü’de olacağını bilmek
gerekir.
Mantık komutları genelde bazı bayrakları, özellikle Sıfır bayrağını (ZF)
etkilemektedir.
Tek bir veri üzerinde işlem yapılacaksa (DEĞİL gibi) bu veri Akü’de yerleştirilmiş
olmalıdır.
5.5.1. 8085 Mİ Mantık Komutları
8085 Mİ’de 3 mantıksal komut çeşitli kombinasyonlarda kullanılır. Bunlar VE
(AND), VEYA (OR) ve ÖZEL VEYA (XOR) işlemlerini yapan komutlardır.
ANA R; (A)←(A) & (R)
ORA R; (A)←(A)  (R)
XRA R; (A)←(A)  (R)
Burada R yerine 7 kaydediciden birisinin kullanılabileceğini hatırlatalım. Ayrıca, R
yerine M (Bellek) de kullanılabileceğini tahmin ediyorsunuz (bu durumda bellekteki adres
HL’dedir). Bu komutların uzunluğu 1 bayt, adresleme yöntemi ise imalıdır.
Sabit verilerle mantıksal işlem yapan komutlar:
ANI
veri;
(A)(A) & veri
ORI
veri;
(A)(A)  veri
XRI
veri;
(A)(A)  veri
Bu komutlar hemen adresleme yöntemi kullanırlar ve uzunlukları 2 bayttır.
Sayfa 39 / 51
Örnek:
Komutlar
(A)
(B)
(SF) (ZF) (PF)
MVI A, 01010101B 5516
xx
x
x
x
MVI B, 11100010B 5516
E216
x
x
x
ORA B
F716
E216
1
0
0
ANI A, 01010010B
5216
E216
0
0
0
XRA B
B016
E216
1
0
0
Ödev 5.21: Aşağıda verilmiş olan program parçasını yorumlayın:
Komutlar
(A)
(C)
(SF)
(ZF)
(PF)
MVI A, 37H
MVI C, 6AH
ORA C
ANA C
XRA C
5.5.2. Maskeleme İşlemleri
Mantıksal işlemlerinin en büyük kullanım alanları otomasyon ve kontrol problemleridir.
Bu problemlerde çoğu zaman bir veya birkaç bit üzerinde işlem yapılması istenmektedir.
Bunlar ayrı ayrı bitlerin “1”e, “0”a veya tersine dönüştürülmesi işlemleridir. Böyle
problemleri yalnız maske (örtü) denilen ikinci bir baytla mantık işlemleri yürütmekle
yapmak mümkündür. Maskelerin oluşturulması kuralları şöyledir:
(1) Eğer bir veya birkaç bit “1”e dönüştürülecekse oluşturulacak maskenin bu bitlerine
“1”, diğer bitlerine “0” yazmak gerekir;
(2) Eğer bir veya birkaç bit “0”a dönüştürülecekse oluşturulacak maskenin bu bitlerine
“0”, diğer bitlerine “1” yazmak gerekir;
(3) Eğer bir veya birkaç bit tersine dönüştürülecekse oluşturulacak maskenin bu bitlerine
“1”, diğer bitlerine “0” yazmak gerekir.
1. durumda dönüştürülecek olan bayt uygun maske ile VEYA işlemine tabi tutulmalı, 2.
durumda verilen bayt uygun maske ile VE işlemine ve 3. durumda da verilen bayt
oluşturulmuş uygun maske ile ÖZEL VEYA işlemine tabi tutulmalıdır.
Örnek: Verilmiş bir baytın 2. ve 3. bitlerini “1”leyen; 4. ve 7. bitlerini “0”layan ve
5., 6. ve 0. bitlerini tersleyen program parçasını yazın.
Sayfa 40 / 51
Önce maskeleri oluşturmak gerekir. Verilmiş baytın xxxx xxxx (x={0;1}) olduğunu
varsayalım. Bu durumda:
7654 3210
xxxx xxxx
M1 = 0000 11002=0C16
M0 = 0110 11112=6F16
MT = 0110 00012=6116
Girilen verinin B216 olduğunu varsayalım:
Komutlar
(A)
(SF)
(ZF)
(PF)
MVI A, B2H
B216
x
x
x
ORI 0CH
BE16
1
0
1
ANI 6FH
2E16
0
0
1
XRI 61H
4F16
0
0
0
En son elde ettiğimiz bayta (sonuç) dikkat edelim:
Bitlerin numaraları: 7654 3210
İlk veri = B216 =
1011 0010
Sonuç = 4F16 =
0100 1111
Görüldüğü gibi sonuçta: 2. ve 3. bitler “1”lenmiş; 4. ve 7. bitler “0”lanmış ve 0., 5. ve
6. bitler terslenmiştir.
Ödev 5.22: 3316 baytının 3. ve 5. bitlerini “0”a; 2. ve 6. bitlerini “1”e; 4. ve 7.
bitlerini ise tersine dönüştürmek için gereken maskeleri oluşturun ve program parçasını
yazın.
5.5.3. 6502 Mİ Mantıksal Komutları
Bu Mİ’de de mantıksal işleme tabi tutulacak baytlardan biri önceden Akü’ye
yerleştirilmelidir. Sonuç Akü’de olacaktır.
6502 Mİ mantıksal komutları yalnızca 2 bayrağı (N ve Z) etkilemektedirler.
6502 mantık komutlarının kısaltılmış biçimi:
AND (VE)
ORA (VEYA)
XRA (ÖZEL VEYA)
şeklindedir. Bu komutlar hemen, sıfır ve mutlak adresleme yöntemleri olmakla 3
modifikasyonda kullanılırlar.
Sayfa 41 / 51
Örnek:
Komutlar
Açıklama
(A)
LDA # $ 45
(A)4516
4516
0
0
AND # $ BA
(A)(A) & BA16
0016
0
1
ORA # $ 86
(A)(A)  8616
8616
1
0
XRA # $ 79
(A)(A)  7916
FF16
1
0
AND # $ 53
(A)(A) & 5316
5316
0
0
(NF) (ZF)
Ödev 5.23: Ödev 5.22’deki koşullar için 6502 Mİ programını yazın.
Bu Mİ’de ikili baytları karşılaştırmak için yalnızca sıfır bayrağını etkileyen bir komut
daha var:
BIT
adres; (A) & (M)
Komut, bellekteki baytla Akü’nün içeriğini mantıksal çarparak ZF’i düzenler.
Sonucun hiçbir yere gönderilmediğine dikkat edin.
5.5.4. 6800 Mİ Mantıksal Komutları
Bu Mİ’de 2 akü olduğundan dolayı burada mantıksal komutlar ikişerdir:
ANDA
ANDB
ORAA
ORAB
EORA
EORB
Tabii ki bu komutlar hemen, mutlak ve diğer adresleme yöntemleri kullanarak çeşitli
modifikasyonlarda karşımıza çıkabilirler.
Bunlardan başka 6800 Mİ’nde mantıksal çarpma yapan, fakat sonucu hiçbir yere
göndermeyen 2 komut daha vardır:
BITA veri veya adr.; (A) & veri veya (adr.)
BITB veri veya adr.; (B) & veri veya (adr.)
Bu komutlar özel olarak Akü’lerin içeriklerini etkilemeden N ve Z bayraklarını
düzenlemek için kullanılırlar.
Genelde 6800 mantık komutları N ve Z bayraklarını etkiler, V bayrağını ise “0”larlar.
Ödev 5.24: Ödev 5.22’deki koşullar için 6800 Mİ programını yazın.
Sayfa 42 / 51
5.6. Kontrol Komutları
Kontrol (dallanma veya sapma, döngü) komutları olmadan programlamanın da bir
anlamı olmazdı. Bu komutların sayesinde programlarda çeşitli döngüler ve dallanmalar
sağlanarak belirli koşullar oluştuğu sürece programların belirli kısımlarının tekrar yapılması
sağlanmakta ve bu da programlamanın verimliliğini sağlamaktadır.
Kontrol komutları belirli bayrakların durumuna göre çalışırlar. Bu bayrakların
durumları programın gidişatı süresince oluşmakta ve yapılan hesaplamanın o andaki
durumunu
göstermektedir.
Yapılan
hesaplama
sonucunu
değiştirmeden
bayrakları
düzenlemek için en çok kullanılan komutlar genelde bütün Mİ’lerde bulunan karşılaştırma
komutlarıdır. Bu komut Mİ’ye göre değişik yerlerdeki baytları karşılaştırır ve sonuç olarak
yalnızca bayrakları (özellikle, ZF ve NF veya SF) düzenler. 8085’de bu komut:
CMP adres;
CPI veri;
6502’de:
CMP veri veya adres;
CPX veri veya adres;
CPY veri veya adres;
ve 6800’da ise:
CMPA veri veya adres;
CMPB veri veya adres
şeklindedirler.
Dikkat: Kontrol komutları hiçbir bayrağı etkilemezler. Kontrol komutları koşulsuz
ve koşullu olmakla 2 yere bölünürler.
5.6.1. Koşulsuz Dallanma Komutları
Bu komutlar hiçbir koşula bakmazsızın komutta gösterilen veya hesaplanan bir
adrese dallanma yaparlar. Sapılan adres bu komuttan ileride veya geride olabilir.
8085’te bu komut:
JMP adr.
şeklindedir ve komut yürütüldüğünde adres kısmında gösterilen mutlak adrese dallanılır.
Komutun uzunluğu 3 bayttır.
6502’de bu komut:
JMP adres
veya
JSR veri
Sayfa 43 / 51
şeklindedirler. Burada adres olarak ya sıfır sayfa, yada mutlak adres olmalıdır. Veri olarak
ise bir bayt götürülür ve bu baytın negatif veya pozitif olmasına bağlı olarak geriye veya
ileriye göreli adresleme yapılır (Bknz: 4.8. Göreli adresleme).
6800 Mİ’deki koşulsuz dallanma komutları 6502 Mİ’dekine benzer şekildedir (JMP
adres ve JSR veri).
Kontrol komutları arasında koşullu dallanma komutlarının büyük önemi vardır.
Bunlar Mİ’ye göre değişiklikler gösterdiği için ayrı ayrı bakılacaktır.
5.6.2. Koşullu Dallanma Komutları
8085 Mİ’de kullanılan 4 bayrağın (ZF, CF, SF ve PF) durumuna göre 8 koşullu
dallanma komutu kullanılır. Bu komutlar aşağıda gösterilmektedir:
JZ
adres; Eğer (ZF)=1 ise adres
JNZ adres; Eğer (ZF)=0 ise adres
JC
adres; Eğer (CF)=1 ise adres
JNC adres; Eğer (CF)=0 ise adres
JP
adres; Eğer (SF)=0 ise adres
JN
adres; Eğer (SF)=1 ise adres
JPE adres; Eğer (PF)=1 ise adres
JPO adres; Eğer (PF)=0 ise adres
Tüm bu komutların uzunluğu 3 bayttır.
Örnek:
M1:
M2:
MVI
DCR
JNZ
MOV
A,05H
A
M1
B,A
; (A)05
; (A)(A)-1
; Eğer (ZF)=0 ise, M1
; (B)(A)
Bu örnekte (ZF)=0 olduğu sürece program M1’e geri dönecektir (yani 4 kez). DCR
A komutu 5. kez yürütüldüğünde (A)=0 olacak ve bu (ZF)=1 yapacak. Bunun sonucunda ise
M2 etiketindeki komut yürütülecektir.
Ödev 5.25: Aşağıdaki program parçası çalıştıktan sonra en sonunda nerede
duracaktır (INT 20 “dur” komutudur):
MVI
M1:
M2:
M3:
M4:
M5:
M6:
M7:
M8:
A,21H
MVI D,65H
SUB D
ADD D
JNZ M1
JC
M2
JP
M7
JMP M8
INT 20
INT 20
Sayfa 44 / 51
6502 Mİ’deki 8 koşullu dallanma komutları 4 bayrağı (ZF, CF, NF ve VF)
kullanırlar:
BEQ veri; Eğer (ZF)=1, veri kadar sap
BNE veri; Eğer (ZF)=0, veri kadar sap
BCS veri; Eğer (CF)=1, veri kadar sap
BCC veri; Eğer (CF)=0, veri kadar sap
BMI veri; Eğer (NF)=1, veri kadar sap
BPL veri; Eğer (NF)=0, veri kadar sap
BVS veri; Eğer (VF)=1, veri kadar sap
BVC veri; Eğer (VF)=0, veri kadar sap
Bu komutlar göreli adresleme yöntemi kullanırlar (Bknz: 4.8). Eğer komutun ikinci
baytı olan veri pozitif bir sayı ise (yani veri  7F ise) bu durumda dallanma programdaki ileri
bir adrese, veri negatif olduğunda (yani veri  80 ise) dallanma programdaki gerideki bir
adrese olacaktır.
Örnek:
0200
CLC
0201
LDA # $ 01
0203
ADC # $ 05
0205
BCC # $ 1A
0207
BRK
Bu örnekte önce Elde bayrağı sıfırlanır, sonra Akü’ye 01 aktarılır ve sonra 01+05
toplama işlemi yapılır. Toplam (06) elde oluşturmadı ve Elde bayrağı “0” durumunda kaldı.
BCC komutu (CF)=0 ise 1A kadar sap demektedir. (CF)in içeriği “0“ olduğundan dolayı bu
dallanma oluşacak. Dallanılacak adres böyle hesaplanılacaktır:
1A sayısı pozitif olduğundan dolayı:
Dallanılacak Adres= (PC)+1+1A16= 020616+1+1A16=022116.
020716
001A16 +
022116
Eğer verilmiş örnekte 1A16 yerine EA16 verilmiş olsaydı hesaplama böyle
yapılacaktı:
Dallanılacak Adres= (PC)+1+EA16
= 020616+1+FFEA16=01F116.
020716
FFEA16 +
(Elde atılır)
101F116
Sayfa 45 / 51
Probleme ters yönden bakalım. Diyelim ki dallanma 0206 adresinden geriye 01FF)
adresine yapılmalıdır. Bu durumda koşullu dallanma komutunun ikinci baytı olarak
yazılacak veri nasıl hesaplanır?
Veri = 020616 – 01FF16 = 716
Yani dallanma 7 bayt geriye yapılmalıdır. Bu durumda dallanma komutunun 2.
baytına yazılacak olan veri - 07’nin 2’ye tümleyen kodu olmalıdır: -07 
10000111(11111001)2’ye tümleyen
 F916 (Komuttaki 2. bayt = F916 olacaktır).
Ödev 5. 26: Aşağıdaki programı analiz edin. Hangi dallanma komutu sağlanacaktır
ve sapma en son nereye olacaktır?
0301
0302
0305
0308
030A
030C
030D
030E
030F
S1
M1
M2
S2
SEC
LDA
SBC
BCC
BCS
BRK
# $ 80
# $ 40
BRK
M1
M2
$ 02
$ 03
6800 Mİ’de kontrol komutları 6502’ninkine benzerler, fakat bu Mİ komut listesinde
farklı kontrol komutları da vardır. ZF, CF, NF ve VF bayrakları üzere dallanma yapan
komutlar aynen kalırlar. Fakat bu Mİ’de diğer dallanma komutları da mevcuttur ve bu
komutlar birden fazla bayrağın durumuna göre dallanma yapabilirler:
BGE veri; Eğer (NF) (VF)=0 ise veri kadar dallan
BLT veri; Eğer (NF)  (VF)=1 ise veri kadar dallan
BHI veri; Eğer (CF)  (ZF)=0 ise veri kadar dallan
BLS veri; Eğer (CF)  (ZF)=1 ise veri kadar dallan
BGT veri; Eğer (ZF)  ((NF)  (VF))=0 ise veri kadar dallan
BLE veri; Eğer (ZF)  ((NF)  (VF))=1 ise veri kadar dallan
5.7. Giriş Çıkış Komutları
Bu komutlar bir bayt verinin çevre cihazlarından Mİ’ye dahil edilmesi ve Mİ’den
çevre cihazlarına çıkarılması için kullanılmaktadırlar.
8085 Mİ’de bu amaçla iki komut kullanılır:
Giriş Komutu:
IN çevre cihazı adresi;
Sayfa 46 / 51
Çıkış komutu:
OUT çevre cihazı adresi;
Burada “Çevre cihazı adresi” 00 ile FF arasında bir bayttır ve çevre cihazına atanmış
olan adresi göstermektedir.
Birinci komut (IN komutu) ikinci bayt olarak gösterilen adresi temsil eden çevre
cihazının çıkışındaki bir bayt veriyi alarak Akü’ye kopyalar. İkinci komut (OUT komutu)
bunun tersini yapar, yani Akü’nün içeriğini gösterilen adresi temsil eden çevre cihazına
kopyalar. Görüldüğü gibi bu komutlar Mİ’de çevre birimleri ile veri alış verişi Akü’yü
kullanarak yapmaktadır. Bu komutların uzunluğu 2 bayttır.
Örnekler:
IN
02H; (A)(0216)
OUT 03H; (0316)(A)
Burada birinci komut adresi 0216 olan çevre birimindeki bir bayt veriyi Akü’ye
kopyalamakta, ikinci komut ise Akü’deki baytı adresi 0316 olan çevre birimine
kopyalamaktadır.
6502 Mİ’de özel giriş çıkış komutları yoktur. Bunun yerine belleğin bazı adresleri
sabit olarak bu işler için ayrılmıştır. Bu adresler ve LDA ile STA komutu kullanılarak giriş
çıkış işlemleri yapılabilir.
Mİ’den dışarıya bir bayt iletmek için:
STA $0401 veya STA $0403
Dışarıdan Mİ’ye bir bayt iletmek için:
LDA $0400 veya LDA $0402
komutları örnek olabilirler.
Fakat burada Mİ’nin çevre birimleri ile direkt bağlanmadığı, bu bağlantının bir
çevresel arayüz yardımı ile yapıldığı öngörülmektedir. Baktığımız örneklerde arayüz olarak
6520 arayüzü kullanıldığı varsayılmıştır. Diğer arayüzleri farklı adresler kullanabilirler.
6800 Mİ’de giriş çıkış işlemleri 6502 Mİ’ne benzer şekilde yapılmaktadır.
5.8. Kaydırma ve Döndürme Komutları
Bu komutlar genelde Akü’de yerleşmiş olan baytı bir bit ya sağa, yada sola kaydırır.
Herhangi bir sayının bir bit sola kaydırılması bu sayının 2 ile çarpılması, sağa bir bit
kaydırılması ise 2’ye bölünmesini sağlamaktadır. Örneğin, 000001002=0416 sayısı bir bit
sola kaydırıldıktan sonra 000010002=0816 olmaktadır.
8085 Mİ’de kaydırma komutları yoktur. Bunun yerine daha ileride göreceğimiz
döndürme komutları kullanılır.
Sayfa 47 / 51
6502 Mİ’de 2 tane kaydırma komutu vardır:
ASL akü veya ASL adres
LSR akü veya LSR adres
Birinci komut Akü’nün içeriğini 1 bit sola, ikinci komut ise 1 bit sağa kaydırır.
Sola kaydırma esnasında Akü’nün 7. biti Elde bayrağına kaydırılır, Elde bayrağının
önceki durumu ise kayıp olur. Örneğin,
Akü’nün önceki durumu= 1000 0001 ve (CF)= 0 olsun. Akü’nün ASL komutu
yürütüldükten sonraki durumu= 0000 0010 ve (CF)=1 olacaktır. Aynı veriler için LSR
komutu yürütülürse son durum=0100 0000 ve (CF)=1 şeklinde olacaktır.
6800 Mİ’de her Akü için kaydırma komutları ve ayrıca bellekteki bir veriyi kaydıran
komutlar mevcuttur. Bundan başka burada sağa ve sola aritmetik ve mantıksal olmakla 4 çift
komut kullanılır:
ASLA
ASLB
ASRA
ASRB
LSRA
LSRB
Dikkat: Sağa aritmetik kaydırma (ASRA ve ASRB) komutları yürütülürken verinin
7. biti 6. bite kaydırılırken kendi değerini koruyor.
Örnek:
ASRA komutu için:
(Akü A)=10011001; (CF)=0 (kaydırmadan önce)
(Akü A)=11001100; (CF)=1 (kaydırmadan sonra)
6800 Mİ’de bellekteki veriyi kaydıran komutlar:
ASL adres
LSR adres
şeklindedirler.
Kaydırma komutları verinin bitlerini kayıp olmasına neden olur. Bu bitleri
kaybetmemek için döndürme komutları kullanılır.
8085’te 4 tane kaydırma komutu vardır. Verilerin Akü’de yerleşmiş olduğu ve 1 bit
döndürüldüğü varsayılır. Bu komutlarda ya 8 bit ((CF)’siz), yada 9 bit ((CF) ile) döndürülür:
RLC; Akü’yü 1 bit sola döndürür (8 bit)
RRC; Akü’yü 1 bit sağa döndürür (8 bit)
Sayfa 48 / 51
RAL; Akü’yü 1 bit sola döndürür (9 bit)
RAR; Akü’yü 1 bit sağa döndürür (9 bit)
Örnek:
CLC
MVI A,10100011B
RLC
Bu program parçası çalıştıktan sonra (A)=110100012 ve (CF)=1 olacaktır. Aynı
veriler için RLC yerine RAL komutu olsaydı bu program parçası çalıştıktan sonra
(A)=010001102 ve (CF)=1 olacaktır.
Ödev 5.27: X/2+8*Z işlemini yapan programı yazın. X’in belleğin 1024, Z’in 1025
adresli hanelerinde olduğunu varsayalım. Sonucu 1025 adresine gönderilmesi gerekir
(Çarpma ve bölme işlemleri için kaydırma komutları kullanılacaktır).
6502 Mİ’de iki tane döndürme komutu var:
ROL
;Sola döndür
RAR
;Sağa döndür.
Her iki komut Elde bayrağını da içeren 9 bit döndürme yapmaktadır. Komutlar
hemen, mutlak ve sıfır sayfa adresleme kullanabilmektedirler.
Ödev 5.28: Ödev 5.27’yi 6502 için yapın.
6800 Mİ’de her iki aküyü ve bellekteki veriyi sağa ve sola döndüren komutlar
bunlardır:
RORA; A’yı sağa döndür
RORB; B’yi sağa döndür
ROR ; Bellekteki veriyi sağa döndür
ROLA ; A’yı sola döndür
ROLB ; B’yı sola döndür
ROL ; Bellekteki veriyi sola döndür
Bu komutların çalışması 6502’nin uygun komutlarına benzemektedir. Döndürme
Elde bayrağını da içerir.
Ödev 5.29: Ödev 5.27’yi 6800 için yapın.
5.9. Diğer Komutlar
Bayrakları Etkileyen Komutlar:
Bu komutlar bayrakları “1” veya “0” durumuna getirerek onları gerektiğinde uygun
şekilde kullanmaya yararlar.
8085’de bu komutlar:
Sayfa 49 / 51
STC ; Elde bayrağını “1” yap
CLC ; Elde bayrağını “0” yap
CMC ; Elde bayrağının tümleyenini al.
6502 ve 6800’da de bu komutlar:
SEC ; Elde bayrağını “1” yap
CLC ; Elde bayrağını “0” yap
SED ; Onlu bayrağı “1” yap
CLD ; Onlu bayrağı “0” yap
SEI ; Kesme bayrağını “1” yap
CLI ; Kesme bayrağını “0” yap
ve diğerleridir.
Yığınla İşlem Komutları.
Her bir Mİ’de yığınla (stack) işlem komutları vardır.
8085’de bu komutlar:
PUSH rp ;
(rp)’yi yığın kaydedicisinin içeriğindeki bellek adresine it
POP rp ;
Yığın kaydedicisi içeriğindeki adresten 2 baytı (rp)’ye çek.
6502’de bu komutlar:
PHA ; Aküyü Yığın Göstergesindeki bellek adresine yükler
PLA ; Yığın Göstergesindeki adresten veriyi Aküye yükler.
Ayrıca bayrakları da yığına yükleyen ve oradan geri çeken komutlar (PHP ve PLP)
mevcuttur.
6800’da bu komutlar uygun olarak:
PSHA
PSHB
PULA
PULB
şeklindedirler. Yani A ve B akülerinin içeriklerini yığına yüklerler ve oradan geriye
çekerler.
Kesme Komutları.
Mİ’lerde kullanılan komut türlerinden biri de Kesme Komutlarıdır. Bu komutlar
dışarıdan gelen kesmeleri etkisiz kılar veya bu etkisizliği kaldırır.
8085’de bu komutlar:
DI ; Kesmeyi etkisiz kıl
Sayfa 50 / 51
SI ; Kesmeyi etkili kıl
şeklindedirler.
6502’de bu işlemler uygun olarak Kesme bayrağını “1” yapmakla (Kesmeyi etkisiz
kıl) ve “0” yapmakla (Kesmeyi etkilendir) şeklinde kesme bayrağını etkilemekle elde edilir:
SEI
; (IF)1
CLI
; (IF)0
6800 ‘de de aynı komutlar aynı anlamda kullanılırlar.
Alt Programla Çalışma Komutları.
Herhangi bir programlama dilinde alt programlar daima kullanılmaktadırlar. Bundan
dolayı Mİ’lerin komutları listesinde bu işlemleri yapabilen komutlar mutlaka vardır.
8085’de bu komut:
CALL adr.
şeklinde, 6502 ve 6800 Mİ’lerinde
JSR veri
şeklindedir. Bununla birlikte alt programda ana programa dönebilmek için Dönüş komutu
olan RET (8085’te) ve RTS (6502 ve 6800’da) komutları kullanılmalıdır.
Burada bakılan Mİ’lerin bütün komutlarına göz atılmamaktadır. Biz yalnız temel
komutları ele aldık. Eğer öğrenci bu komutların nasıl çalıştığını benimserse yerde kalan
diğer komutları kolaylıkla anlayacak ve kullanabilecektir.
Sayfa 51 / 51
Download