İÇİNDEKİLER

 

1.Bayrak Kaydedicisi (Flag Registeri):............................................................................................. 1

1.1 6502 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri.......................... 2

Z(Zero Flag)Sıfır Bayrağı...................................................................................................... 2

N(Negative Flag)Negatif Bayrağı......................................................................................... 2

   C(Carry Flag)Elde Bayrağı:...................................................................................................... 3

   V(Overflow Flag)taşma bayrağı:............................................................................................... 4

    I(Interrupt Disable Flag)kesmeyi engelleme bayrağı:.................................................................. 4

    D(Decimal Mode Flag)ondalık Mod bayrağı:........................................................................... 4

    B(Break Flag)dur bayrağı:....................................................................................................... 5

1.2 6800 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri.......................... 5

1.3 8085 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri.......................... 6

1.4 8086 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri.......................... 6

1.5 80286 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri........................ 7

1.6 80386 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri........................ 7

1.Bayrak Kaydedicisi (Flag Registeri): 

     Bayrak komutları ve olayları deyince aklımıza hep sayıları oluşturan bit'ler gelmeli. Basit olarak iki sayının karşılaştırılmasında ortaya o sayının aynı olduğu, aynı olmadığı, büyük veya küçük olması yada sıfır olması gibi durumlar çıkar. Bu durumları öğrenmenin tek yolu o duruma göre şekil alan bayrak register (f) bitlerinin durumunu öğrenmemizdir. Bir test veya bir matematiksel işlem olduğu  durumlarda  sonuçlar daima bayrak registerin ilgili bitlerine yansır.

Bayrak register gerçek modda 16 bit, korumalı modda ise 32 bitliktir. Yani gerçek modda toplam 16 bit tane sebep-sonuç biti ayrılmış aynı şekilde korumalı modda 32 tane sebep-sonuç biti ayrılmıştır.32 bitlik bayrak registere EFlag adı verilir ve aynı 16 bitlik şekli gibi sadece ilk 16 biti kullanılır.(Bazı bitler dökümante edilmemiştir). EFlag registerin sonraki 16 biti ileride yapılacak  CPU güncellemeleri için ayrılmıştır.En başlıca olanları ZF (zero flag), CF (carry flag) ,SF, AF, gibidir. Örneğin bir işlem sonucu 0 ise ZF set olur yani 1 olur.

     Bayraklar işlevleri açısından 3 gruba ayrılılar. Status flaglar (durum bayrağı), Control flaglar (kontrol bayrağı) ve, System flaglar (sistem bayrağı). Durum bayrakları programın içindeki komutsal, mantıksal ve matematiksel işlemlerin sonuçlarını verir. Genelde kullanılan bayraklar bunlardır. Kontrol bayrağı sadece 1 tanedir ve ileride göreceğimiz repz komutunun aşağı yada yukarı işlem yapma şeklini ayarlar. Sistem bayrakları ise sistemle ilgili işlemler için kullanılır. Genelde bunları işletim sistemi yada kullanacağımız debugger gibi yüksek düzeyli bir program değiştirir.

      Bayrak registerin tam yapısı aşağıdaki gibidir:

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

10

11-31

CF

?

PF

?

AF

ZF

SF

TF

IF

DF

OV

?

IO

?

NTF

RF

V86

 

    Şekil 1.1  Bayrak registerin yapısı

 

     Veya bayrakları başka bir şekilde anlatmak istersek şöyle bir benzetme  yapabiliriz;bir futbol maçında yan hakemlerin oyunun kurallarına göre bazen ellerindeki bayrakları kaldırdıkları ve böylece orta hakeme bilgi verdikleri görülür. Benzer şekilde mikroişlemci de yapılan bir işlemden sonra data sonuçlarının durumlarını gösteren mikroişlemci de bulunan 6 flip-flop’tan her biri mikroişlemciye bilgi verir ve bunların her birine de bayrak adı verilir. Flip-flop’ların durumları,istenildiğinde 8 bitlik bayrak kaydedicisinde görülebilmektedir.

 

1.1 6502 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri

Durum kaydedicisinde 8 bit bulunmasına rağmen 7 si kullanılır.Bu bitlere “flags” veya “bayraklar” denir.Bir Bir program çalıştırıldığında MİB bu bayrakları kullanarak hangi koşulların oluştuğunu gösterir.Programcı bu bayrakların bazılarını  şartlı sapma komutları için kullanır ve programın sapması mı gerektiğini yoksa devam etmesi mi gerektiğini belirler.Bu bayrakların işlevlerine kısaca değinelim.

 

 

N

V

I

B

D

I

Z

C

Elde/Borçlu Bayrağı(Carry)

Sıfır sonuç Bayrağı(Zero Result)

 

Kesmeyi Engelleme(Interrupt Disable)

Ondalık Mod Bayrağı(Decimal Mod)

Dur Bayrağı(Break)

(Kullanılmaz)Her Zaman 1 dir

Taşma Bayrağı(Overflow)

 

Eski Sonuç Bayrağı(Negative Result)

                        Şekil 1.2 6502 MİB nin programcı tarafından kullanılabilen bayrakları                  

Z(Zero Flag)Sıfır Bayrağı:MİB bir  bayt verinin iletimi,bir aritmetik ,mantık veya kaydırma işlemi yaptıran komutu çalıştırdığında işlem sonucunun sıfır (00000000)2 olup olmamasına  göre Z bayrağı “1” veya “0”  olur.

Sonuç 0 ise MİB Z=1 durumuna geçirir.Sonuç 0 değilse MİB=0 yapar.

Bu mikroişlemcide veriyi işleyen kaydediciden diğer kaydediciye veri gönderen veya bir kaydedici ile hafıza arasında veri iletimi yapan komutların çoğu çalıştırıldığında Z bayrağı etkilenir.

N(Negative Flag)Negatif Bayrağı:Verinin iletilmesi veya işlenmesi sonunda  sonucun işaretini belirlemek için MİB bu bayrağı ya “1” veya “0” yapar.Diğer bir deyişle N her zaman sonucun işaret bitiyle (MSB-Most Significant Bit)aynıdır.Program işaretli sayıları kullanmasa bile  MİB N bayrağını MSB ile aynı yapar.Programcı,sayıların işaretli mi işaretsiz mi veya nümerik olup olmadığını  kendisi takip etmelidir.Bunları MİB takip etmez.

    

     Örnek olarak MİB in bir toplama komutunu yürüttüğünü  ve sonucu  A akümülatöre  yerleştirdiğin düşünelim.Sonuç 01100111 ise N=0 olur.Çünkü bit7 (MSB)=0 dır.Eğer sonuç 11000110 ise  MİB N bayrağını N=1  yapar.Çünkü MSB=1 dir.

     Mikroişlemcide N=1 negatif sayıyı,N=0 pozitif  sayıyı gösterir.

   

     Örnek:Hexadecimal+28 ile –0A sayılarını toplayalım.Önce negatif olan 0A sayısını bu sayının ikiye tamlayanına (25 complement) çeviririz.

     

      00001010=0A                                                                    28=0010 1000

      11110101=bire tümleyeni (15  complement )              +    F6=1111 0110

Buna da 1 eklendiğinde ikiye tümleyeni bulunur.                   1E=0001 1110

    

      11110101

 +                 1                                                                           pozitif sonuç(MSB=0)

      11110110=F6                                                                     N=0 olur.

 

 

C(Carry Flag)Elde Bayrağı:Bu bayrağı MİB birkaç değişik amaç için farklı biçimlerde kullanabilir.Birincisi,8 bitlik iki sayı toplandığında MSB den (en büyük basamaktan)sonra bir elde olup olmadığını gösterir.

 

     Örneğin A nın içinde 10101000 sayısı olsun.Buna hafızadan  01010110 sayısını ekleyip sonucu gene A ya kaydet komutunu işaretlemediğimizde;

   

     10101000                    Bu işlem sonucunda MİB elde bayrağını “0” yapar.Yani C biti 0 olur.

+   01010110

 


 

     11111110

MSB

Elde yok    

 

 

      Eğer A akümülatörüne hafızadan 01100110 sayısını eklersek;

    

     10101000                                                 Bu toplamada elde 1 olur ve MİB elde bayrağını “

 +  01100110                                               “1” yapar.Yani   C=1 olur.

 


 

 1  00001110

 

     A da depolanacak sonuç

  Elde biti

 Elde bayrağı işaretsiz sayıların çıkartma işleminde,borçlu ”Barrow” olup olmadığını da izler.Örneğin küçük bir ikili sayıdan büyük bir ikili (iki tabanına göre sayı) sayıyı çıkartmak istediğimizde en büyük basamak ( MSB) bir”1” borç alarak çıkarma işlemini tamamlar.Böyle olduğunda MİB C=0 yaparak bir borç  alma olduğunu gösterir.Çıkarma işlemende borç gerekmiyorsa MİB C=1  yapar.Diğer bir deyişle borç=C olur.

     C bayrağı ayrıca bazı shift (kaydırma) ve rotate (döndürme) komutlarında da kullanılır.

      6502 komut setinde programcının herhangi bir zaman C bayrağını 1 veya 0 yapabilmesini sağlayan SEC ve CLC komutları vardır.Hex cinsinden  SEC komutunun işlem kodu (op-code) 38 dir.CLC için 18 dir.SEC işletildiğinde C=1 olur,18 işletildiğinde C== olur.N ve  Z flagları için bunlara benzer komutlar yoktur.

 

    V(Overflow Flag)taşma bayrağı:İşaretli sayılar MİB tarafından toplandığında veya çıkartıldığında bir taşma olup olmadığını V bayrağı gösterir.İşaretli sayılarda 8. bit (bit-7) işaret biti olarak görev yapar.Negatif sayıları ikinin tamlayanı biçiminde gösterdiğimizde,bayının değeri için 7 tane bit kalır.Böylece ancak -12810 ile +12710 aralığındaki sayıları gösterebiliriz.Bir toplama veya çıkarmada sonuç bu aralığın dışına taşarsa MİB otomatik olarak V=1 yapar.

 

     ÖRNEK:      +9610=01100000

                  +      +6510=01000001

                                      10100001          

     İşaret biti

 

     Burada iki pozitif sayının toplanmasıyla negatif bir sonuç görünmektedir.Halbuki sonucun negatif görünmemesi gerekir.MİB taşma bitini 1 e set ederek sonuçta toplamada sonuç değeri bitlerinin işaret biti pozisyonuna taştığını belirtir.V=1 .Eğer herhangi bir taşma  olmasaydı MİB V=0 yapardı.

     İki zıt işaretli sayının çıkarma işleminde de taşma olabilir ve MİB V bitini gerektiği  gibi düzenler.

     V bitiyle C bitinin birbirine karıştırılmaması gerekir.V bayrağı işaretli sayıların aritmetik işlemlerinde  yedi bitlik sayı değeri kapasitesinin taştığını beliler.C bayrağı ise işaretsiz sayıların işlemlerinde 8 bitlik sayı değeri kapasitesinin taşmasını belirler.

Programcı 6502 MİB de clv komutuyla V bayrağını  0 yapabilir.Taşma bayrağını set eden (V=1) komut yoktur.Fakat bu mikroişlemcide S.O.(Set Outflow) diye bir giriş ucu vardır.Dışardan bir sinyalle bu girişten V=1  yapılabilir.Dışarıdan bir aletin durumunu anlamada için  programcı V bayrağını test eder.Böylece dışarıdaki aletin sinyal gönderip göndermediği anlaşılır.

 

    I(Interrupt Disable Flag)kesmeyi engelleme bayrağı:Bu bayrağı SEI komutunu kullanarak I=! Ve CLI komutunu kullanarak I=0 yapabiliriz.MİB sürekli bir işlem gerektiren bir program bölümünü çalıştırmakta iken herhangi bir kesme yapılması istenmeyen sonuçlar doğurabilir.Örneğin MİB bir zamanlama döngüsündeyken veya diğer bir G/Ç aygıtıyla  iletişimdeyken kesme yapılamaz.Programın içinde CLI komutuyla I=0 yapıldıktan sonra MİB  kesme komutlarına duyarlı olur.

 

 

  D(Decimal Mode Flag)ondalık Mod bayrağı:6502 nin aritmetik devresi hem ikili sitemde hem de ondalık sitemde  toplama ve çıkarma işlemi yapabilmektedir.D=0 olduğunda mikroişlemci bütün toplama ve çıkarma işlemlerini  ikili cinsinden yapar.D bayrağı 1 olduğunda toplama ve çıkarma işlemleri BCD (Binary Coded Decimal)cinsinden yapılır.

 

 

 

Örnek:D=0 iken(104)10  ile  (18)10    sayılarını toplayalım.(İkili biçimde)

 

          01101000  (104)

     +   00010010   (18)

           01111010  (122)

 

        D=1 iken (68)16 ile(12)16 sayılarını BCD toplayalım.

  

       0110 1000(68)

  +   0001 0010(12)

1000    0000(80)sonucu elde edilir.

 

    Halbuki normal ikili toplama yapmış olsaydı sonucun (7A)16 elde edilirdi.                             

      

        0110 1000(68)                                                      A sayısı BCD biçiminde iki rakamla (10)

    +  0001 0010(12)                                                  gösterilir.D=1 iken böyle olayı engellemek

        0111 1010(7A)                                     için sonucun her dörtlü grubunun üzerine 610=0110                                   

 

eklemek gerekir.

 

       0111 1010 (7A)  

+     0110 0110  

       1110 0000                                                    Örnekte görüldüğü gibi eğer dörtlüden

komşu dörtlüye elde yok ise 0110 ikili

sayısını bu dörtlüden çıkarmak gerekir.

 

 

       1110 0000

+     0110

       1000 0000 (80) bulunur.

 

     Programcı gerekli komut ile D bayrağını “1” veya “0” yaparak,hangi aritmetik modunu seçtiğini kararlaştırmış olur.D bayrağı bir değere geçirildiğinde bundan sonraki aritmetik  işlemler aynı moda  yapılır.Ancak D değeri değişirse işlem biçimi de değişir.

 

 

     B(Break Flag)dur bayrağı:B bayrağı bir dur komutunun işletildiğini belirtmek için    kullanılır.BRK komutunu “Software Interrupt”(yazılım kesmesi) de denir. I bayrağının durumu ne olursa olsun MİB her zaman BRK komutuna duyarlıdır.

 

 

1.2 6800 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri

     6502 MİB hal kaydedicisiyle benzer görev  yapar.Bit5 N biti farklı bir görev yapar.6800 MİB ABA,ADC VE ADD komutlarını  çalıştırdığında bit3 den bit4 e bir elde olduğu zaman

H biti (bit5) “1”  durumuna geçer.Eğer bit4 e elde  oluşmazsa  H biti “0” a  reset olur.Bit 6  ve bit7 her zaman “1” e eşittirler.buradaki C,V,Z,N  ve I durum bayraklarının görevleri 6502 MİB ndeki  bayraklarla aynıdır.

 

1

1

H

I

N

Z

V

C

Elde/Borçlu Bayrağı(Carry)

Taşma bayrağı(Overflow Flag)

 

Sıfır  Sonuç(Zero Result  Flag)

Eksi Sonuç Bayrağı(Negative Result)

kesme bayrağı(Interrupt Bayrağı)

  Yarım Elde (Half Carry Flag)

                        Şekil 1.3 6800 MİB nin programcı tarafından kullanılabilen bayrakları                  

 

1.3 8085 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri

     Bu mikroişlemcisinin beş bayrağı vardır. Sekiz bitlik bayrak kaydedicisinin üç tanesi kullanılmaz.

   

     

Z

-

AC

-

P

-

C

 

                        Şekil 1.4 8085 MİB nin programcı tarafından kullanılabilen bayrakları

   

      S İşaret Bayrağı(signum):S=1 olduğunda sonucun negatif S=0 olduğunda ise sonucun pozitif olduğu anlaşılır.

      Z Sıfır Bayrağı(zero):bir işlem sonucu sıfır çıktığında Z=1 aksi halde Z=0 olur,

      AC Seçmeli (keyfi)Elde Bayrağı(auxiliary carry flag):Bu bayrak onlu (desimal)toplama komutunda (DAA) kullanılır.Toplamanın sonucunda  3. sıradan 4. sıraya  bit taşması (elde) varsa AC bayrağı 1 olur.aksi halde sıfır olur.

      P Eşlik Bayrağı(parity flag):Bu bayrak akümülatördeki “1” lerin  sayısını gösterir.Eğer “1” lerin sayısı çift (even) ise P=1,aksi halde P=0 olur.

      C Elde Bayrağı(carry flag):Elde bayrağıdır.

1.4 8086 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak Kaydedicileri

8086 mikroişlemcisinin programın durumu sözcüğünü (PSW-Program Status Word)içermek için 1 adet kaydedicisi vardır.bu 16 bitlik kaydedicinin yalnızca 9 biti kullanılır.Bu kaydediciye Bayrak(flag) kaydedicisi de denir.Bayrak kaydedicisi Şekil 1.5 de gösterildiği gibidir.

15      14      13     12      11      10        9        8      7         6       5        4         3      2         1       0

 

 

 

 

O

D

I

T

S

Z

-

A

-

P

-

C

   Şekil1.5 8086 MİB nin programcı tarafından kullanılabilen bayrakları

 

     O Bayrağı:İşaretli sayaların taşmalarını kontrol eder.İşlem sırasında sonucun dışına bir taşma meydana gelmemişse bir elde mevcut O bayrağına 1 .aksi halde 0 değeri aktarılır.

     D Bayrağı: Zincirlerle (String) iş zamanı kullanılır.Eğer zincir en küçük adreste yerleşmemiş birinci  elemanından başlayarak işlem görürse D=0, aksi halde ,yani işlem en büyük adreste yerleşmiş elemandan küçük adresteki elemana  doğru yürütülürse  D=1 olur.

     I Bayrağı:kesmeleri organize edebilmek içindir.I=1 halinde mikroişlemci gelen kesimleri kabul eder(kesmeye izin verir).aksi halde gelen kesmeler kabul edilmez(kesmeye izin verilmez).

     T Bayrağı.Program oluşturan komutları tek tek ele alabilmek içindir.T01 halinde bir komut  icra edildikten sonra bir sonraki komuta geçmez ve icra edilen komutun  etkilerini inceleyebilmek üzere  bir süre bekler.T=0 halinde program bir bekleme olmaksızın icra edilir.

     S Bayrağı:İşareti gösterir.S=1 sonucun negatif,S=0 ise pozitif  olmasını gösterir.

     Z bayrağı:Yapılan işlem sonucunun sıfır olup olmadığının belirlenmesi içindir.Z=1  sonucun 0 olduğunu ,Z=0 ise sıfır olmadığını gösterir.

     AC Bayrağı:Desimal işlemlerde  en küçük 4 bitten 4. bite  elde olup olmadığını  kontrol edebilmek içindir.AC=1 bu eldenin olduğunu AC=0 ise olmadığını  gösterir.

     P Bayrağı:Sonuçtaki 1’lerin  sayısının çift olup olmadığını göstermek içindir.P=1 bu sayanın çift,P=0 ise tek olduğunu gösterir.

     C Bayrağı:İşaretsiz sayılar üzerinde işlem yapılırken eldenin olup olmadığını göstermek içindir.C=1  eldenin olduğunu ve C=0 ise eldenin olmadığını  gösterir.  

                                                                                                                                                                                                                             

     1.5 80286 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak            Kaydedicileri

     80286 bayrak kaydedicisi de bitlik olup 8086’ya göre 2 fazla bayrakta kullanılmaktadır.12. ve 13. bitlerde  gösterilen durumlar (IOPL ve NT) eklenmiştir.

 

15       14      13      12      11    10      9         8        7        6      5         4        3        2       1        0

-

-

NT

IOPL

O

D

I

T

S

Z

-

A

-

P

-

C

      Şekil1.6 80286 MİB nin programcı tarafından kullanılabilen bayrakları

 

     IOPL Bayrağı(ınput/output privilege flag):Giriş/Çıkış öncelikle  seviyesini belirleme  bayrağı olup “1”e eşit olup ta önceliği bulunan komutlar işleme konur.

     NT(Nested Task Flag):Yuvarlanmış işlemler bayrağı “1” e eşit olduğunda  iki işlemden küçük bölümlü olana öncelik tanır.

Kalan bayrakların nitelikleri aynen 8086 mikroişlemcisinde olduğu gibidir.

 

1.6 80386 Mikroişlemcinin Programcı Tarafından Kullanılan Bayrak    Kaydedicileri

      80386 mikroişlemcisindeki bayrak kaydedicisi 32 bit’liktir.Bunun ilk 16 biti aynen 80286 ‘da olduğu gibidir.Ek olarak iki bayrak daha kullanılmaktadır.

                         31                                          16 15                                                                       0

EFLAG

 

        Şekil1.7 80386 MİB nin programcı tarafından kullanılabilen bayrakları

  

      16.Bit-RF(Resume Flag):Bütün Debug  hatalarının bir sonraki adımda belirsizleşmesi için kullanılmaktadır(RF=1).Her iki komut başarılı şekilde sonuçlandığında RF=0 durumuna  otomatik olarak geçer.

     17.Bit-VM(Virtual 8086 Model):VM=1 olduğunda ve 80386 korumalı moda ise (PE=1);mikroişlemci olarak 8086 modunda çalışır.Bu durumda göreli segmentler,sanki 8086 mikroişlemcisinde çalışıyormuş gibi işlem yapar.