Tweet

16-32 Bit Adresleme

16 BİT Adresleme İşlemi

8086 mikroişlemcisi 1 mb bellek kullanabilecek biçimde üretilmiştir..8086 işlemcisinin genel olarak 20 tane adres ucu bulunmakta..(A0.A19) şeklinde ifade edebiliriz bunu.1Mb bellek 5 hex digit ile 1 fiziksel adres 2 byte segment,2 byte offset bilgisinden elde edilmektedir.Segment değerini segment register larının içerisinde bulmak mümkün.Offset değeri bellek operandı olarak köşeli parantez içerisinde yer alır.[...] Mikroişlemci bellek operandıyla ilişkili segment register ı tespit eder ve o register ın değerini 16 ile çarpar.(Sağına 0 ekleyerek)

Bunu köşeli parantez içerisnde bulunan offset değeriyle toplar.Sonuç 5 hex digit uzunluğunda bir bilgi içerir.Bu bilgi adres yoluna verilmektedir.

Örnek ile açıklayalım..

CODE:
DS: 1234
BX: 1000 ise

MOV AX,[BX]


İşlem sonucu AX register ına 1234*16+1000=13340 fiziksel adresindeki veriyi yerleştirir.Yani bu demek oluyorki istenilen bir fiziksel adrese erişebilmek için yalnızca köşeli parantez [] içerisinde offset i ayarlamamız yetmiyor.İlgili segmen register ın içerisinde de uygun değerin olması gerekiyor..

Bunuda bir örnekle açıklayalım..

CODE:
SS=138F
BP=1000 ise
MOV AX [BP+10]


Yukarıdaki işlem sonucunda AX register ına 138F*16+1000+10=14900 fiziksel adresindeki veri yerleştiriliyor..Segment register içerisindeki değeri hiç değiştirmeden yalnızca offset değerini değiştirerek segment*16 adresinden 64 kb uzaklaştırabiliriz..

Şimdi istenilen bir fiziksel adrese erişmek istediğimizi düşünelim..Ve seneryomuzu hazırlayalım..

Bunun için ters bir işlem mantığı yürütmemiz gerekecek..

İlk olarak fiziksel adres segment-offset olarak ikiye ayrılır.Bir fiziksel adres için birden fazla segment-offset ikilisi yazabiliriz..

Diğer adım ise segment değerinin bir segment register a yazılması olayıdır.Offset değeri [] içerisinde bellek operandı şeklinde oluşturulur..

32 BİT Adresleme İşlemi

80386 ve sonrası modeller 32 Bit işlemci türünü oluşturmaktadır.Bu işlemcilerde ismindende anlaşılabileceği gibi 32 bit register bulunmaktadır.Ayrıca bellek operandlarının değerleri 32 bit olabilir.Yani [] içerisinde tanımlanan değer..

Şimdi 32 bit adreslemede bellek operandlarının nasıl oluşturulduğunu inceleyelim..

Güvenli modda 32 bitlik bellek operandı 16 bitten daha geniş ve farklı biçimde oluşturulmaktadır.Yani

[CODE:
disp32]
[EAX],[EBX],[ECX],[EDX],[EBR],[ESI],[EDI]
[EAX+disp8],[EBX+disp8],[ECX+disp8],[EDX+disp8],[EBR+disp8],[ESI+disp8],[EDI+disp8]
[EAX+disp32],[EBX+disp32],[ECX+disp32],[EDX+disp32],[EBR+disp32],[ESI+disp32],[EDI+disp32]

EAX,EBX,ECX,EDX,EBR,ESI,EDI nin ikili bütün toplamları
EAX,EBX,ECX,EDX,EBR,ESI,EDI nin bütün ikili toplamları + disp8
EAX,EBX,ECX,EDX,EBR,ESI,EDI nin bütün ikili toplamları + disp32

Yazılabilecek Geçerli ve Geçersiz kullanımlara bir göz atalım isterseniz..



CODE:
[EAX]                                                   GEÇERLİ
[EBX*4] GEÇERSİZ
[ECX+EAX*4] GEÇERLİ
[EAX+EBX+disp16] GEÇERSİZ
[EAX+EBX+disp32] GEÇERLİ
[EAX*2+disp8] GEÇERLİ
[ESI+EAX+*4+disp32] GEÇERLİ
[EAX+EAX] GEÇERLİ



16 BİT Çalışmada FLAG REGİSTER'i

8086 model işlemcide F ya da Flag ile şeklinde belirtilen ve ismine bayrak register ı denilen bir register bulunmakta.Bu register 386 ve sonraki model işlemcilerde güvenli modda kullanılmak üzere EFLAGS ismi verilerek 32 bit e yükseltilmiştir.Flag register ı bit bit anlamlı bir register dır.Her bit in anlamlı değerinden farklıdır.Mikroişlemci çeşitli makine komutlarını çalıştırdıktan sonra komutların sonuçları hakkında ilave bir takım bilgiler verir.Örneğin bir toplama işlemi yapıldığında taşma olmuşmudur acaba ? veya oluşan sayının işaret bit i nedir? vb.Flag register ının bitleri komut çalıştırıldıktan sonra işlemci tarafından 1 veya 0 biçimine giydirilir.1 yapıldığında set, 0 yapıldığında reset denmektedir.

Carry Flag

Bu bayrak aritmetk, bit ve mantıksal işlemlerde sayının bütününe ilişkin bir elde olduğunda set edilir(1 yapılır)

CODE:
AL:13
BL:F2
ADD AL,BL


Burada yapılan bir toplama işlemdir.Çıkan sonuç 1 byte ı geçmediğinde işlemci doğal olarak CF bitini set etmektedir.

PF(Parity Flag)

Bir işem sonrasında düşük anlamlı byte içerisindeki 1lerin sayısı çift ise bu bit set edilir, tek ise 0 yani reset edilir.Odd Parity yöntemi budur.

AF(Auxilary Carry Flag)

4.bitten 5.bite doğru oluşan elde durumunda set edilmektedir.Elde yoksa reset edilir.BCD işlemlri yani binary coded decimal işlemleri için düşünülmüş bir bayraktır.Hex sistemde düşünüldüğünden düşük anlamlı digit teki eldeyi belirtiyor..

Örnek ile açıklayalım yine..

CODE:
AL:18 işleminde CF 0,AF1 olur..
BL:1C
ADD AL,BL


ZF(Zero Flag)

İşlemin sonucu 0 ,se bu flag set edilir.Şayet değil ise reset edilir.Mesela;

CODE:
SUB AX,BX


Bu iki register ın değerleri eşit ve sonuç 0 olacak yani ZF set edilecektir..

SF(Sign Flag)

İşlem Sonucunda elde edilen sayının en solundaki biti bu bayrağa yansıtılır..Yani;

ADD AX,BV

Sonucunda ise SF1 ise AX içerisinde negatif bir sayı vardır.SF eğer 0 ise pozitif bir sayı vardır demektir..

TF(Trap Flag)

İşlemci her komutu çalıştırdıktan sonra bu bayrağın durumuna bakar.Eğer bu bayrak set edilmiş ise 1 numaralı içsel kesmeyi çağırır.Bu kesmeye single step interrupt denilmektedir..

IF(Interrupt Flag)

İşlemcinin INT ucu uyarıldığında işlemci kesme durumuna geçmeden bu bayrağa bakar.Eğer bu bayrak 1 ise normalde 1 dir ve bu bayrak kesme kabul edilir.Böylece işlemci ACK ucunu aktif konuma getirerek bildiriri bunu bize.Şayet bayrak 0 ise işlemci kesmeyi görmezden gelecektir,kesme koduna dallanma yapmaz ve mevcut işlemine devam eder..Eğer sistemde birden fazla işlemci varsa bu bayrağın 0 yapılması büyük önem arz eder.Çünkü 0 yapılmazsa sistem çökecektir..Nedeni ise donanım kesmeleri devre dışı bırakıldığında process lar arası geçişte duracaktır.Sistem tek işlem ile devam eder ve sürekliliğini sağlayamaz.Korumalı modlarda bu bayrağın 0 yapılması engellenmiştir farklı biçimlerde..

DF(Direction Flag)

Bu bayrak string komutları için işlemci tarafından kullanılmaktadır.Transferin yönünün anlaşılması için bu bayrağa bakılmaktadır..

OF(Overflow Flag)

İşaretli sayı üzerinde meydana gekeb taşıma durumunu tespit etmek amacıyla kullanılır.Yani işlem sonucunda işaret biti değişmemişse bu bayrak set edilecektir..Bir örnek vererek konumuzu sonlandıralım..

CODE:
AX:7FFF
INC:AX

OF bit : pozitif bölgeden negatif bir bölgeye geçiş yapıldığında veya tersi bir işlem söz konusu olduğunda bu bayrak set edilmektedir.


Kolay gelsin ..


thecoders.net | Oguzz




Oguzz
oguz@thecoders.net
29 Nisan 2008 17:45

İlgili Olabilecek Makaleler


Yorumlar (0)




Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg