80×86 Assembly Dersleri 3 – Register (Yazmaçlar)

Register (Yazmaçlar)

80x86 ailesi yazmaçları
80×86 ailesi yazmaçları

80×86 Assembly Dersleri 2 yani Segment (Kesim) Yapısı dersinde Kesim grubu içerisindeki bazı (CS, SS, DS, ES) yazmaçlara değinmiştik. Bu dersimizde tüm yazmaçları işleyeceğiz, gruplandırmak gerekirse;

  • Veri Grubu Yazmaçları (Data Register)
  • İşaret Grubu Yazmaçları (Pointer Register)
  • Sıra Grubu Yazmaçları (Index Register)
  • Kesim Grubu Yazmaçları (Segment Register)

Yazmaç; işlemci içinde, belirli bir amaç için tasarlanmış, sınırlı kapasiteye sahip, hızlı veri saklama veya işleme birimidir.

Her yazmacın farklı türde kendine has özellikleri vardır. Yapılan işlemin gereklerine göre byte veya word (veya double word) olarak kullanılabilirler. Bellek hiyerarşisinin en üstünde yer aldıkları için diğer bellek birimleri ile karşılaştırdıklarında en hızlı bellek birimidir.

Yazmaçlar en hızlı bellek birimleridir ve her birinin kendilerine has özellikleri vardır.

Veri Grubu Yazmaçları – Data Register

Veri grubu yazmaçları (data register) byte (8 bit) veya word (2 byte) olarak kullanılabilirler. Her birinin farklı özelliği olduğunda hangi şekilde kullanılması gerektiği ihtiyaca göre değişiklik göstermektedir. 80386 ya da 80486 işlemciler 32 bit olup double word yazmaçlara sahiptir. Bu yazmaçlar duruma göre 32, 16 veya 8 bit olarak kullanılabilirler.

  • 8 Bit işlemlerde: AL, AH, BL, BH, CL, CH, DL, DH
  • 16 Bit işlemlerde: AX, BX, CX, DX
  • 32 Bit işlemlerde: EAX, EBX, ECX, EDX
  • 64 Bit işlemlerde: RAX, RBX, RCX, RDX

Şeklinde isimlendirilerek kullanılırlar.

AX: Accumulator

Giriş/Çıkış (I/O) işlemlerinde, aritmetik, string işlemlerinde kullanılır.
16 Bit tek parça AX olarak kullanıldığı gibi 8 bitlik iki parça, AH ve AL olarak da kullanılabilir.

H (High): yüksek anlamlı kısmı ifade eder. AH, AX yazmacının yüksek anlamlı byte’nı belirtir.

L (Low): düşük anlamlı kısmı ifade eder. AL, AX yazmacının düşük anlamlı byte’nı belirtir.

İşlenen olarak yazmaçları kullanan bazı komutlar, işlenen olan AX yazmacı kullanılması durumunda daha az yer kapsayacak ve çok daha hızlı çalışacak şekilde geliştirilmiştir. Bu sebepten dolayı, AX yazmacı en çok kullanılan yazmaçtır.

BX: Base Register

Genel amaçlı hesaplamalarda ve dizi şeklindeki veri yapılarına erişmek için indis (index) olarak kullanılır.

16 Bit tek parça BX olarak kullanıldığı gibi 8 bitlik iki parça, BH ve BL olarak da kullanılabilir.

CX: Count Register

Çevrim sayılarını belirtmek üzere kullanılır. Kaydırma (shift) ve döndürme (rotate) işlemlerinde tekrar sayısını belirtir.

16 Bit tek parça CX olarak kullanıldığı gibi 8 bitlik iki parça, CH ve CL olarak da kullanılabilir.

DX: Data Register

Giriş/Çıkış (I/O) işlemlerinde, çarpma gibi büyük sayıların oluşabileceği (AX ile birlikte DX:AX çifti olarak), bölme gibi bölüm ve kalan şeklinde iki ayrı sonucun oluştuğu işlemlerde (AX: bölüm, DX: kalan) kullanılır.

16 Bit tek parça DX olarak kullanıldığı gibi 8 bitlik iki parça, DH ve DL olarak da kullanılabilir.

İşaret Grubu Yazmaçları – Pointer Register

Tanımlı oldukları kesim içindeki göreli konum değerini göstermek amacıyla kullanılırlar.

Genel kullanılan komutların değerlerini otomatik olarak değiştirirler. Bu sebepten işaret grubuna dahil olan yazmaçların (BP hariç) değerlerinin kullanıcı tarafından değiştirilmesi pek rastlanan bir durum değildir. IP yazmacının değerindeki değişiklik doğrudan çalışacak komutu, SP yazmacının değerindeki değişiklik ise stack (yığın) üzerinde yapılacak işlemleri etkileyeceğinden kullanıcı tarafından bilinçsiz değişiklik sonucu program kontrolden çıkabilir ve kitlenebilir.

SP: Stack Pointer

Yığın (Stack) üzerinde yapılan işlemlerde, verinin nereye yerleşeceğini veya nereden alınacağını belirler.

Yığına (Stack) erişim PUSH (veri yerleştirir) ve POP (veri çeker) komutları ile yapılır. Bu komutların çalışması sonucu olarak SP yazmacının değeri sırasıyla azaltılmakta veya arttırılmaktadır.

BP: Base Pointer

Yığından (Stack) istenen verilere erişimi kolaylaştırmak için kullanılır.

SP yazmacından farkı, değeri kullanıcı tarafından belirlenir. Öyle ki, kullanıcı BP yazmacını kullanarak yığındaki herhangi bir veriye rahatlıkla ulaşabilir. Bu özelliği sebebiyle farklı program parçacıkları arasında yığın (stack) kullanılarak yapılan parametre aktarımlarında parametrelere erişmek için kullanılır.

Parametreleri herhangi yüksek seviyeli bir dildeki, fonkisyonlara benzetebilirsiniz, yığında benzer bir görevi görüyor, ileride daha detaylı değineceğim zaten.

BP yazmacı, sadece yığından veriyi çekip almaz. Verinin ne olduğunu görür, kopyalar ve değiştirilmesine olanak sağlar.

IP: Instruction Pointer

IP yazmacı işlemcinin o anda çalıştıracağı komutun kod kesimi içindeki yerini belirtir.

IP yazmacının değeri işletilen komutun uzunluğuna göre değişiklik gösterir. Ek olarak programın içerisindeki koşullu veya koşulsuz dallanma hareketleri, CALL veya INT gibi komutlara bağlı olarak da IP yazmacının değeri değişebilir.

 

Sıra Grubu Yazmaçları – Index Register

SP ve BP yazmaçları, yığım kesimi (stack segment), IP yazmacı ise kod kesimi içeirsinde kullanılmaktadır. Benzer şekilde sıra grubu yazmaçları da kod kesimi (code segment) içinde kullanılır. İşaret Grubu Yazmaçlarından farkı değerleri kullanıcılar belirler.

SI ve DI yazmaçlarının yanında BX yazmacı da veri kesimi erişimlerinde göreli konum belirlemek üzere kullanılmaktadır.

SI: Source Index

Veri kesiminde (Data Segment) tanımlanmış veriye ulaşmak için göreli konum değeri olarak kullanılır. String işlemlerinde, kaynak noktasının göreli konumunu gösterir.

DI: Destination Index

SI (Source Index) ile aynı olup, eğer Ek kesim (Extra Segment) içerisinde veri varsa veriye erişmek için kullanılır. String işlemlerinde ise yine ek kesim içerisindeki kaynak noktasının göreli konumunu gösterir.

Kesim Grubu Yazmaçları – Segment Register

Tanımlı kesimlerin başlangıç adreslerini göstermek üzere kullanılan 16 bitlik yazmaçlardan oluşmaktadır. Herhangi verinin bellek üzerindeki yeri, kesim ve göreli konum değerleri yardımıyla belirtilir.

Göreli konum değeri verinin kesim başından kaç byte ileride olduğunu gösteren değerlerdir.

Göreli konum değeri, kesim içerisindeki tüm bellek gözlerine erişim sağlar yani kesim büyüklüğünü belirler.

kesim ve göreli konum çiftleri
kesim ve göreli konum çiftleri

Leave a Reply

Your email address will not be published. Required fields are marked *