Assembly Ders Notları

CPU REGİSTER’LARI

 Mikroişlemci (80x86) register adı verilen 14 adet özel location içerir bu registerlar çeşitli verilerin geçici süreler için saklanması ve bu verilerin üzerinde işlem yapabilmesini sağlar registerlar işlemci cipinin içerisinde yer aldıklarında bu alanlarda yapılan işlemler bellek bölgelerinde yapılan işlemlere göre çok daha hızlıdır.

Data Registerları

AX, BX, CX, DX ‘ten oluşan data registerları genellikle aritmetiksel işlemler için kullanılır her bir data registerı diğer registerlardan farklı olarak bir bütün halinde veya 2 parça halinde kullanılabilmektedir. Örn. AX registerını 16 bitlik işlemler için AX i oluşturan AH ve AL ise 8 bitlik işlemler için kullanabiliriz. 16 bit uzunluğundaki data registerlarının yüksek seviyeli kısmı register isminin ve High kelimesinin baş harfleriyle, düşük seviyeli kısım ise yine register isminin ve Low kelimesinin baş harfleri kullanılarak elde edilmiştir. Böylece; AX için AH ve AL, BX için BH ve BL, CX için CH ve CL, DX için DH ve DL olarak isimlendirerek 8 bitlik register elde edilir.

Data registerlarından herhangi biri program amaçları için kullanılabilir. Fakat belirli data registerları belirli işlemler sırasında Operand olarak kullanılması zorunludur. Bu durumda programcının bir seçim yapması mümkün değildir.

AX: Bu register genellikle toplama, çıkarma, çarpma, bölme, giriş, çıkış ve bazı string operasyonlarında Word uzunluklu olarak kullanılır.

BX: Genellikle aritmetiksel işlemlerde AX registerına yardımcı olarak ve bellek içindeki verilerin adreslenmesinde kullanılır.

CX: Sayaç registerıdır. Genellikle döngülerde ve kaydırma işlerinde kullanılır.

DX: Word uzunluklu çarpma ve bölme operasyonlarında ayrıca giriş çıkış operasyonları için port numarasını göstermede kullanılır.

Segment Registerları

CS (Code Segment): Çalışan programın Segment adresini tutar, makine dili komutlarının yer aldığı adresi gösterir.

DS (Data Segment): Bilgi işlem operasyonlarına tabi tutulan bilgiler data Segment içindeki özel bölgelerde yer almaktadır. DS registerı geçerli data segmentin başlangıç adresini gösterir.

SS (Stack Segment): Verilerin geçici olarak saklandığı bellek bloğuna Segment adı verilir. Stack Segment geçerli Stack Segment’in başlangıç adresini gösterir.

ES (Extra Segment): Bu Segment genel olarak string operasyonlar için kullanılır. Extra Segment geçerli Extra Segment’in başlangıç adresini gösterir.

Pointer İndex Registerları

 Bu registerlar data registerları gibi aritmetiksel işlemler için kullanılabilir. Bu registerların kullanımındaki asıl amaç çeşitli bellek bölgelerindeki verilere ulaşabilmek için ele alınmaları bellek içindeki bir lokasyonun adresini gösterebilmek için 2 ayrı adres değeri kullanılır. İlk değer işaret edilen lokasyonu içinde barındıran segmentin adresidir. Lokasyonun segment içindeki yeri gösteren 2. adres ise ofset adresidir. Bu adresler Pointer İndex Registerları içerisinde tutulur.

Komut Göstergeci (Instruction Pointer)

 Komut göstergeci işlemcinin icra ünitesi tarafından çalıştırılacak olan bir sonraki komutun ofset adresini içerir. Ofset adresi IP ile gösterilen bellek bölgesi Code Segmentin içindedir. IP registera özel bir register olması nedeniyle programcılar tarafından kullanılmaz.

Flag Register (Program Status Word)

 Bu register diğer registerlardan oldukça farklıdır. Bu registerın içerisindeki değeri bir bütün olarak değerlendirmek söz konusu değildir. Çünkü bu registerın sayısal değeri değil kendisini oluşturan bitlerin tek tek değeri önemlidir. Flag registerının içerisindeki bitlerden sadece 9 tanesi kullanılabilmektedir. Bu 9 bitin mevcut değeri çeşitli kontrol komutlarının çalıştırılmasına etki etmekte veya aritmetiksel ya da mantıksal işlemin sonucu hakkında bilgi vermektedir.

BELLEK, SEGMENT, OFFSET

 Bellek: programları oluşturan komutları ve program tarafından üzerinde bilgi işlem yapılacak verileri içeren ya da saklayan üniteye bellek adı verilir. 8086 mikroişlemcisi ile kullanılabilecek maksimum bellek büyüklüğü 1 MB’tır

 Segment: belleğin bütün noktalarının adreslenebilmesi ve ayrıca bellek üzerinde operasyonların daha kolay ve daha doğru gerçekleşmesini sağlamak üzere mevcut bellek bölümlerine ayrılır. Maksimum 64 KB uzunluğunda olan her bir bölüme segment adı verilir.

 Ofset: Bir segmentin maksimum genişliği 64 KB olduğuna göre segment içerisindeki her bir nokta 16 bit uzunluğundaki işaretsiz sayılar ile adreslenebilir durumda bir segment içerisinde yer alan bir segment bölgesinin adresini gösteren16 bitlik işaretsiz tamsayıya ofset adı verilir.

 

Flag Register

 80x86 mikroişlemcisine özel bir register olan flag registerı işlemcinin üzerinde yer alan diğer registerlardan daha farklı olarak kullanılan flag registerinin içerdiği değer bir bütün olarak değerlendirilemez. Flag registerında yer alan bitler tek tek ve kendi başlarına özel anlama sahiptir.

 Flag register içerisinde yer alan bitlerin her birine flag (bayrak) adı verilir. Bu flaglar set veya reset olmalarına göre programcıya veya işlemciye bilgi verirler. Bir flagın set olması durumu o flagın binary 1 değerine, reset olması durumu ise o flagın binary 0 değerine eşit olması anlamlarına gelir.

C: Carry flag (taşma bayrağı)

P: Parity flag (tek-çift bayrağı)

A: Auxilary Carry flag (Ara Elde Bayrağı)

Z: Zero flag (sıfır bayrağı)

S: Sign flag (işaret bayrağı)

T: Trace flag (Tek Adım işlem bayrağı)

I: Interrupt flag (kesme bayrağı)

D: Direction flag (yön bayrağı)

O: Overflow flag (işaretli sayılarda taşma bayrağı)

 Bir flag registerının içerisinde yer alan herhangi bir flag sahip olduğu her bir bit işlemcinin yaptığı bir operasyonun hemen artından 1 veya 0 değerine sahip olur.

Carry Flag (taşma bayrağı): işlemci için her bir pozisyondaki işlemin bir elde değeri vardır. Bu değer 1 veya 0 dır. Carry yok ise yapılan işlem ne olursa olsun elde değeri 0 olacaktır. İşlem sona erdiğinde işlemcinin o anki elde değeri Carry flagına aktarılır. Elde değer olarak tutulan bit Carry flagını 2 ayrı şekilde etkiler.

Þ    En anlamlı bit pozisyonunda bir Carry meydana gelmemişse işlemci tarafından tutulan son elde değeri 0 olacak ve Carry flagına 0 değeri aktarılacaktır. O halde Carry flagının değeri 0 ise sonuç alıcı alana sığmıştır.

Þ    En anlamlı bit pozisyonunda bir Carry ya da borrow(eksili taşma) meydana gelmişse işlemci tarafından tutulan son elde değeri 1 olacak ve Carry flagına 1 biti aktarılacaktır. O halde işlem sonrasında Carry flagının değeri 1 ise işlem sonucu alıcı alana sığmamıştır.

Sign Flagı (işaret flagı): 8 bit uzunluğundaki bir bellek bölgesi içinde işaretli bir sayı bulunuyorsa bu sayının sayısal büyüklüğü düşük seviyeli 7 bit tarafından oluşturulur. Soldaki yüksek seviyeli bit (en anlamlı bit) sayının işaretini gösterir.16 bitlik bir alanın işaretli sayı içermesi durumunda ise düşük seviyeli 15 bit ile sayının büyüklüğü; 15. bit ile de sayının işareti gösterilir. Bu nedenle işaretli sayılar için kullanılan 8 bit uzunluğundaki bellek bölgesinin 7. biti de 16 bit uzunluğundaki bellek bölgesinin 15. bitine sign biti adı verilir.

 Sign biti 0 değerine sahipse sayının işareti pozitif; sign biti 1 değerine sahip ise sayının işareti negatif kabul edilir.

Overflow flagı (işaretli sayılarda taşma):işaretli sayıların taşmasını kontrol etmek için Carry flagı yerine overflow flagı kullanılır. Operasyon sırasında alıcı olan byte’ının veya Word’ünün dışında bir taşma meydana gelmemişse fakat alıcı alanın yüksek seviyeli biti(sign biti) pozisyonuna bir önceki pozisyondan gelen bir taşma varsa overflow flagını 1 değerini; aksi takdirde 0 değeri aktarılır.

Auxilary Carry flagı (yardımcı elde bayrağı): Auxilary Carry flagı bir operasyon sırasında sonucun aktarılacağı alıcı alanın düşük seviyeli 4 bitini kontrol eder bu bitler üzerinde soldaki bit pozisyonunda bir taşma meydana gelirse auxilary Carry flagı 1 değerini alır.

Carry flagı ile yarım byte üzerinde meydana gelen bir taşma kontrol edilemez. Bu kontrol Auxilary Carry flagı ile gerçekleştirilir.

Zero Flagı (sıfır bayrağı):bir operasyon sonucunda alıcı alana aktarılan değer 0 (sıfır) ise Zero flagı set edilir. Aksi takdirde reset edilecektir. Böylelikle bir işlemin sonucunun 0’a eşit olup olmadığı ZF ile kontrol edilebilir.

Parity flagı(çift bayrağı): Bir operasyon sonucunda Word’ün düşük seviyeli byte kısmındaki 1 bitlerinin sayısı 2 ile bölünüyorsa parity flagı set edilir aksi takdirde reset durumundadır.

DİKKAT: Yukarıda açıklamaları verilen bu 6 adet flag sadece aritmetiksel ve mantıksal işlemler sonucunda tetiklenir..!

Direction Flagı(yön bayrağı): Direction Flagı stringlerin veya bir bellek bloğu içeriğinin bir noktadan başka bir noktaya transferini sağlayan yada string bilgiler üzerinde kıyaslama yapar. String komutlarında kullanılır.

Direction flagı reset durumunda iken işleme tabi tutulacak elemanların yerini gösteren İndex registerlarının değerleri birer birer artar, direction flagı 1 iken değerleri birer birer azalır.

İnterupt flagı(kesme bayrağı):işlemci bilgisayar sistemi içinde yer alan giriş çıkış aygıtlarını sürekli olarak kontrol eder. Herhangi bir komutu çalıştırırken çevre aygıtlardan kendisine gönderilen bir emir aldığında yapılan işlemi bırakıp çevre aygıtları ile ilgili işi yerine getirir. Çevre aygıtları ile ilgili işlem sona erdiğinde tekrar kaldığı yerden çalışmasına devam eder. İnterupt flagına 0 değeri aktarıldığında çevre aygıtlardan işleme gönderilen istekler dikkate alınmaz, interupt flagına 1 değeri aktarıldığında çevre aygıtlardan gönderilen emirler işlemci tarafından yerine getirilecektir.

Trace Flagı(adım adım işleme): işlemci bir program çalıştırırken programı oluşturan komutları tek tek ele alır ve bir komutun çalışması sona erdiğinde beklemek için bir sonraki komuta geçer. Trace flagı set edildiğinde işlemcinin bir sonraki komuta geçmesi engellenmiş olur böylelikle program içlemcinin üzerinde satır satır işlenebilir hale gelir.

Flagları Doğrudan Etkileyen Komutlar

 Yapılan aritmetiksel veya mantıksal bir işlem sonrasında mikroişlemci üzerinde bazı flaglar dolaylı yoldan tetiklenirler. Ancak bazı durumlarda flaglara programcının doğrudan müdahale etmesi gerekebilir. Programın böyle bir işlemi yapabilmesi için flagları doğrudan etkileyen komutları kullanması gerekir. Bunlar;

STC (Set Carry): Carry flagının mevcut değerini 1 yapar.

CLC (Clear Carry): Carry flagının mevcut değerini 0 yapar.

CMC (Complament Carry): Carry flagının mevcut değerinin değilini alır ve tekrar Carry flagına aktarır. Yani mevcut değer 1 ise 0; 0 ise 1 yapar.

STD (Set Direction): Direction flagının değerini 1 yapar.

CLD (Clear Direction): Direction flagının değerini 0 yapar.

STI (Set Interupt): Interupt flagının değerini 1 yapar.

CLI (Clear Interupt): Interupt flagının değerini 0 yapar.

ASSEMBLY’ DE KOMUTLAR.

1-) Genel Amaçlı Bilgi Transfer Komutları

MOV, XCHG, XLAT

2-) Adres Transfer Komutları

LEA, LDS, LES

3-) Giriş Çıkış Komutları

IN, OUT

4-) Flag Transfer Komutları

LAHF, SAHF

Tarih:
Hit: 7669
Yazar: serhat8102

Taglar: assembly.


Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.