8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. bu iki...

41

Upload: others

Post on 18-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 2: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

8086’dan core2’ya yazaç yapısını tanımak. Bayrak yazacının içeriğinde yer alan bayrakların

görevlerini tanımlamak. Real mod çalışmada bellek kullanımını

tanımlamak. Korumalı modda belleğe erişim yöntemlerini

tanımlamak. 64 bit Flat bellek modelinde beleğe erişim

yöntemini tanımlamak. Program-invisible yazaç yapısını tanımlamak. Bellek sayfalama tekniğini tanımlamak.

Page 3: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Program yazmaya başlamadan önce mikroişlemcinin iç yapısını programcı bakış açısından bilmek gerekir.

Çok çekirdekli mikroişlemcilerde her çekirdek benzer iç yapıya sahiptir. Tek fak programın farklı parçalarını yürütmeleridir.

Page 4: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

8086’dan Core2’ya kadar tüm mikroişlemcilerde (program visible) görünür yazaçlar bulunmaktadır.◦ Bu yazaçların bir adı vardır ve program tarafından

doğrudan denetlenebilirler.

80286’dan başlayarak üst sürümlerde görünmez yazaçlar (program invisible) bulunur.◦ Bu yazaçlar program tarafından doğrudan adreslenemez,

fakat kullanılan komuta bağlı olarak işlemler yürütülürken kullanılır.

Page 5: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

80286 ve üzeri sürümlerde görünmez yazaçlar sadece korumalı modda belleği denetlemek ve işletmek üzere kullanılır.

80386’dan Core2’ya kadar tüm mikroişlemciler32-bit iç mimariye sahiptir.

8086ve 80286 tam olarak üst sürümlere uyumludur.

Page 6: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 7: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

RAX – 64 bit yazaç, EAX 32 bit yazaç, AX 16 bit yazaçtır ve Akümülatör (accumulator) olarak adlandırılır. AH, AL 8 bit yazaçlardır.

Akümülatör mikroişlemcilerde ana yazaca verilen isimdir. Aritmetik ve mantık işlemlerinde birincil görevli olan yazaçtır.

RBX, yazacı RBX, EBX, BX, BH, BL olarak ta adlandırılır.◦ BX base index yazacıdır. Bazı komutlar için indeks

adresini içerir.

Page 8: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

RCX, yazacı RCX, ECX, CX, CH, or CL olarak ta adlandırılır.◦ Sayaç yazacıdır (count). Bazı komutlarda sayma işlemi

yapar diğer durumlarda genel amaçlı bir yazaçtır.

RDX, yazacı RDX, EDX, DX, DH, or DL olarak ta adlandırılır.◦ Veri yazacı (data). Bölme ve çarpmada çarpımın bir

kısmını veya bölümün bir kısmını içerir.

◦ Çarpma bölmenin dışında genel amaçlı bir yazaçtır.

Page 9: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

RBP, yazacı RBP, EBP, or BP olarak ta adlandırılır.◦ Bellekte veri transferi sırasında işaretleyici (base

pointer) yazacı olarak kullanılır.

RDI, yazacı RDI, EDI, or DI olarak ta adlandırılır.◦ Dizi işlemi yapan komutlarda hedef sıralama yazacı

(destination index) olarak kullanılır.

RSI yasacı RSI, ESI, or SI olarak ta adlandırılır. ◦ Kaynak sıralama yazacı (source index). Dizi işlemi

yapan komutlarda kaynağın sıra numarasını belirtir.

◦ RDI, RSI yazaçları ilgili komutların kullanılmadığı durumlarda genel amaçlı yazaçlardır.

Page 10: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

R8 - R15 yazaçları Pentium 4 ve Core2 işlemcilerinde bulunur ve sadece 64-bit moduizinlendi ise erişilebilir.◦ Bu yazaçlardaki veriler 64, 32, 16 ve 8-bit

genişliklerinde adreslenebilirler.

◦ Bu yazaçların özel görevleri yoktur. Genel amaçlı yazaç olarak kullanılabilirler.

Günümüzdeki birçok uygulama bu yazaçları kullanmamaktadır. Sadece 64 bit windowsortamında çalıştırılmak üzere yazılmış programlar bu yazaçları kullanabilir.◦ 8-bit olarak kullanıldığında en sağdaki 8 bit kullanılır,

8. ile 15. bitleri ayrıca diğer bitlerden bağımsız kullanmak mümkün değildir.

Page 11: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

RIP, RSP ve RFLAGS yazaçlarıdır.◦ segment yazaçları CS, DS, ES, SS, FS ve GS yazaçlarını

kapsar.

RIP bellekte yer alan bir sonraki komutun adresini gösterir.◦ instruction pointer olarak adlandırılır.

RSP yığının kullanılacak satırının adresini içerir. ◦ stack pointer olarak adlandırılır.

Page 12: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

RFLAGS yazacı mikroişlemcinin son durumunu gösteren ve mikroişlemcinin özel işlevlerini denetleyen bitler içeren bir yazaçtır.

Bu yazaçta yer alan bitler bir olayın oluşumunu göstermesi nedeniyle bayrak (Flag) olarak adlandırılır.

Bayraklar 8086’dan core2’ya doğru yukarı doğru uyumludur.

En sağda yer alan 5 bayrak ve taşma bayrağı birçok aritmetik ve mantık işlemlerinden etkilenirler. Veri aktarma işlemlerinden bu bayraklar etkilenmez.

Page 13: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

• Bayraklar program kontrol komutlarında

değişmez.

• Bazı bayraklar denetim görevi

üstlenmişlerdir..

Page 14: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

C (carry) elde bayrağı, toplama sonrası eldeyi, çıkarma sonrası borcu gösterir.◦ Bu görevlerinin yanı sıra hata durumunu belirtmek

amacıyla programcılar tarafından kullanılır.

P (parity) akümülatörün içeriğindeki sayı ikilik kodlandığında 1’lerin sayısına göre değişir. 1’lerin sayısı tek ise lojik 0, çift ise lojik 1 olur.◦ Sayı 3 adet 1’e sahipse tek eşliktir P=0’dır

◦ Sayıda 1 yer almıyorsa çift eşliktir ve P=1’dir.

Page 15: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

A (auxiliary carry) yarım yada yardımcı elde bayrağı. BCD sayılar ile aritmetik işlemlerde kullanılan bayrak 3 nolu bitlerden oluşan eldeyikaydeder. Elde var ise 1 yok ise 0 olur. Aynı şekilde çıkarmada bit 4’den bir borç alındı ise 1 alınmadı ise 0 olur.

Z (zero) sıfır bayrağı. Aritmetik veya lojik işlem sonucunun sıfır olduğu durumda 1 sıfırdan farklı olduğunda 0 olur.

S (sign) işaret bayrağı. Aritmetik veya lojik işlem sonrası işaret bitini içerir.

T (trap) izleme bayrağı on-chip debugging özelliğini izinler.

Page 16: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

I (interrupt) INTR girişini denetler. Mantık 1 olduğunda bu girişe gelen kesme isteği algılanır. Aksi durumda algılanmaz.

D (direction) DI veya SI index yazaçlarının işlem sonrası içeriklerinin otomatik olarak artırılacağınımı yoksa azaltılacağını seçer.

O (overflow) Taşma bayrağı işaretli sayılar ile toplama ve çıkarma yapıldığında taşma oluşur.

◦ Bu bayrağın işlem sonunda 1 olması taşma olduğunu belirtir. Bunun anlamı işlem sonucu ilgili yazacın boyutuna sığmayacak kadar büyüktür.

Page 17: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

IOPL korumalı mod çalışmada I/O cihazlarının ayrıcalık seviyesi seçmek için kullanılır.

NT (nested task) bu bayrak korumalı moddaçalışırken işletilmekte olan program parçasının diğer işlemlerle iç içe geçtiğini gösterir.

RF (resume) debug aşamasında bir sonraki komuttan devam etmek için kullanılır.

VM (virtual mode) bu bit korumalı moddakisistemde sanal mod işlemi seçer.

Page 18: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

AC, (alignment check) word veya doubleword veri word veya doubleword olmayan alana yönlendirildiğinde bu bayrak aktif olur.

VIF (virtual interrupt) Pentium 4’te kesme denetim bitinin bir kopyasıdır.

VIP (virtual) Pentiumda sanal kesme hakkında bilgi verir. (interrupt pending)

◦ multitasking ortamlarda virtual interrupt bayrağı olarak çalışır.

ID (identification) bu bayrak pentiummikroişlemcisinin CPUID komutunu desteklediğini belirtir.

◦ CPUID komutu sisteme Pentium mikroişlemcisi hakkında bilgi sağlar.

Page 19: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Diğer yazaçlardan biri ile birleştirildiğinde bellekte işlem yapılacak adres bilgisini içerir.

İşlemcinin sürümüne bağlı olarak dört veya altı adet segment yazacı bulunur.

Segment yazaçlarının işlevleri real mode veprotected mode çalışmalarda farklıdır.

Page 20: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

CS (code) program kodlarının bulunduğu adres hakkında bilgi içerir.

DS (data) verinin bulunduğu adres hakkında bilgi verir.

ES (extra) bazı komutlar tarafından kullanılan ek veri segmentinin adres bilgisini içerir.

SS (stack) yığın olarak kullanılacak bellek alanını belirler.◦ Yığının başlangıç noktasını stack segment ve stack

pointer birlikte belirler.

◦ BP yazacı da stack segment ile birlikte verinin yerini belirler.

Page 21: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

FS ve GS segment yazaçları 80386 ve üst sürümlerinde yer alır.◦ Bu yazaçlar ek bellek segmentlerine erişilmesine izin

verir.

Windows bu segmentleri internal işlemlerinde kullanıyor fakat nasıl kullandıkları konusunda bir açıklama yok.

Page 22: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

80286 ve üst sürümler gerçek ve korumalı moddaçalışabilirler. 8086, 8088 ve 80186 ise sadece gerçek modda çalışabilirler

Gerçek mod (Real mode) belleğin ilk 1M bayt’lık kısmını adresleyebilir. Pentium 4 ve Core2 mikroişlemcilerde de aynıdır.◦ Belleğin ilk 1M baytlık kısmına farklı kaynaklarda real

memory, conventional memory, veya DOS memory gibi isimler verilmiştir.

Page 23: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Gerçek mode çalışmada belleğin adresi iki kısımdan oluşur. Segment yazaçlarında olan kısım ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur.◦ segment yazacında bulunan kısma segment adres adı

verilir ve 64K’lık bellek parçasının herhangi bir yerinde işlem yapılacak belleğin başlangıç adresini belirler.

◦ offset adres işlem yapılacak bellek segmentindeki satır numarasını belirler.

Page 24: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

– Segment başlangıç

adresi 10000H, bitiş

adres IFFFFH

• 64K bayt uzunluğunda

– Ofset yazacının içeriği

F000H işlem yapılacak

bellek adresi 1F000H

Page 25: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Segment yazacının içeriği bilindiğinde başlangıç adresi bellidir. Bitiş adresi bulmak için FFFFH toplanır.◦ Gerçek modda belleğin segmenti 64K’dır.

İşlem yapılacak adresi bulmak için segmetyazacının içeriğine ofset yazacının içeriği toplanır.

Segment ve ofset adresleri yazılırken 1000:2000şeklinde gösterilebilir.◦ a segment address of 1000H; an offset of 2000H

Page 26: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

– Segmenti pencere

olarak düşünün bu

pencereyi belleğin her

alanına hareket

ettirebilirsiniz.

– Bir program 4 veya

6’dan daha fazla

segmente sahip olabilir.

• Aynı anda sadece 4 veya

6 segmente erişebilir.

Page 27: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

– Program belleğin en altında

yer alan DOS ve Driver

kodlarının hemen üstüne

yerleştirilir.

– Programın belleğe yerleşimi

DOS tarafından yapılır.

Page 28: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Segment ve ofset adresleme DOS’a programlarınbellekte yeniden yerleştirilmesine (relocatableprogram) izin verir.

relocatable program belleğin her hangi bir yerine yerleştirilebilir ve değişiklik gerektirmeden işletilebilir.

Relocatable data belleğin herhangi bir yerine yerleştirilebilir ve veriyi işleyen programda değişiklik yapılmadan kullanılabilir.

Page 29: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Segment ve ofset adresleme kullanıldığında belleğin başka alanına program veya data taşımak istediğimizde sadece segment yazacının içeriğini değiştirmek yeterlidir ofsette değişikliğe gerek yoktur.

segmentin içeriğini değiştirme görevi işletim sistemine bırakılmıştır.

Windows programları yazılırken ilk 2G’lık bellek alanınn kullanılabileceği kabul edilerek yazılır.

Page 30: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

1M bayt belleğin 80286 itibaren yetmemesi üzerine daha geniş bellek alanlarının kullanımı için geliştirilmiş bir yöntemdir.

Segment yazacı adres tanımlayıcı tablodan bir satır seçer ve seçilen satırın içinde yazılı bilgi adreslenecek belleğin başlangıç adresini ve kullanım koşullarını belirler.

Bu toblo 8192 satırdan oluşur ve her bir satır 64K’lık boyutunda belleği adresler.

Windows sadece Protected modda çalışabilir.

Page 31: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Global adres tanımlama tablosu (Global discriptors) tüm programlar tarafından kullanılan segment adreslerini içerir. Bu nedenle sistem adres tanımlama tablosu adı da verilir.

Lokal adres tanımlama tablosu (Localdiscriptors) uygulama programları tarafından kullanılacak segment adreslerini içerir. Bu nedenle uygulama adres tanımlama tablosu adı da verilir.

Global ve lokal adres tanımlama tablosunun her bir satırı 64 bit genişliğindedir.

Page 32: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 33: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Adres tanımlayıcıda yer alan base bilgisi segmentin başlangıç adresini içerir. Segmentiistediğiniz adresten başlatabilirsiniz.

G veya öğe boyut biti segmentin boyutunu belirler. 4K’lık adımlarla 64K ile 4G arasından boyut belirleyebilirsiniz

Page 34: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 35: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 36: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Bellek sayfalama yapısı her fiziksel belleğe bir doğrusal adres atar.

Doğrusal adres (Iinear address); program tarafından belirlenen adrestir.

Fiziksel adres (Physical address); programın belleğe erişmek için kullandığı gerçek adres.

Bellek sayfalamada doğrusal adres görünmez şekilde fiziksel adrese dönüştürülür.

Sayfalama görevi Mikroişlemci kontrol yazaçlarına verilmiştir. CR0-CR4

Page 37: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 38: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 39: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında
Page 40: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında

Flat bellek yapısında segment ve ofset yoktur.

İlk adres 00 0000 0000H; son adres FF FFFF FFFFH.

Belleği erişmek için 40 bit adres bilgisi kullanılır.

Segment yazacı yazılımın önceliğini seçmek için kullanılır.

Page 41: 8086’dan core2’ya yazaç yapısını tanımak. · ve ofset yazaçlarında olan kısım. Bu iki kısım birleştirilerek işlem yapılacak bellek adresi bulunur. segment yazacında