X86 Assembly Adresleme Modları

layef

Üye
28 Mar 2020
135
46
nowhere

Bu haftaki konumuz X86 Assembly Adresleme Modları hakkında olacak. İlk olarak X86 ve X86 Assembly terimlerine ayrı ayrı değinmemiz gerekiyor.

X86 Nedir?

İntel'in 8086 işlemcisini merkez alan bir işlemci mimarisidir. İntel ve AMD işlemciler bu mimariyi kullanmaktadır. Bu yüzden pazarın %90'ını bu mimari oluşturmaktadır.

X86 mimarisini kullanan işlemciler genelde aynı komut setlerini kullanır.

X86 Assembly Nedir?

X86 mimarisine sahip işlemcilere uyumlu olan Assembly dili demektir. Assembly hakkında biraz detaya inecek olursak Assembly, alt seviye dillerden biridir yani makine diline yakındır ve İngilizce sözcüklerin kısaltmasından oluşmuştur. Assembly genellikle karmaşık programlar yazmak için kullanılıyor. Performans odaklıdır ve hafıza üzerinde az yer kaplar.

Assembly platformdan bağımsız, hedef bilgisayar mimarisine sıkı sıkıya bağlı bir dildir. Bilgisayar üzerinde direkt müdehale imkanı tanır.

Assembly diğer programlama dilleri ile genellikle yapamayacağımız bir çok şeyi yapma imkanı sunar. Özellikle siber güvenlik alanında;

  • Program ve işletim sistemlerinin güvenlik açıklarını görmek,
  • Şifre kırma, hacking işlemleri,
  • Malware ve anti-malware programları yazmak için kullanılabiliyor.
Ayrıca Assembly dilini makine koduna çeviren programlara Assembler denir. Assembler birebir dönüşüm yapmaktadır. Bu yüzden derleyicilerden ayrılırlar.

Konumuza dönecek olursak.. Adresleme modları memory'nin nasıl kullanıldığının, memory'ye nasıl erişileceğini ve verilerin memory'ye nasıl yerleştirileceğini belirler.

X86 Assembly'de doğru bir yazılım geliştirmek ve işleyişi tam olarak anlamak için her bir komut için adresleme modunu bilmek gerekir.

Adresleme yöntemlerinin fazla olması high-level dillerdeki karmaşık işlemlerin daha kolay bir şekilde yerine getirilmesine olanak tanır.

Adresleme modlarını 3 farklı kategoride inceleyebiliriz.

  1. Veri Adresleme Modları,
  2. Program Adresleme Modları,
  3. Yığın Hafıza Adresleme Modları
Veri Adresleme Modları

Register'lar arasında ve register ile memory arasında yapılan 8,16 veya 32 bitlik veri aktarımı işlemlerinde MOV komutunun kullanıldığı adresleme yöntemidir. Kendi içerisinde yediye ayrılır.

  1. Register Addressing(Saklayıcı/kaydedici Adresleme)
  2. Immediate Addressing(İvedi Adresleme)
  3. Direct Addressing(Doğrudan Adresleme)
  4. Register Indirect Addressing(Kaydediciye Dayalı Adresleme)
  5. Base-Plus-Index Addressing(Baz-Artı-İndis Adresleme)
  6. Register Relative Addressing(Kaydediciye Dayalı Göreceli Adresleme)
  7. Base Relative-Plus-Index Addressing(Baz Göreceli-Artı-İndis Adresleme)
Bunlara başlamadan önce MOV komutunu hatırlayalım;
Kod:
MOV  AX,BX  >  AX ve BX'in herbiri bir operand'dır,

MOV  >  Opcode(Operasyon kodu) mikroişlemciye hangi operasyonun çalıştırılacağını belirtir,

AX  >  Destionation(Hedef),

BX  >  Source(Kaynak)
Notlar: Veri aktarım yönü hedef > kaynak şeklindedir. Operand = işlem fonksiyonu

1.Register Addressing(Saklayıcı/kaydedici Adresleme)

Bu adresleme modunda kaynak ve hedef operand'ın her ikisi de 8086 register'larıdır. Yani mikroişlemcinin iç register'ları arasında işlemler gerçekleştirilir.

Bu yüzden memory ile erişim yapılmaz. Memory ile erişim yapılmadığı için çok hızlıdır.
Kod:
MOV  AL,BH  >  BH, AL'ye kopyalanır.(İkisi de 8-bit register'dır.)

MOV  AX,DX  >  DX, AX'e kopyalanır.(İkisi de 16-bit register'dır.)

8,16 veya 32-bit register'lar olabilir ama karışık kullanılamaz.
Kod:
MOV  AL,BX  >  Şeklinde kullanılamaz. Sebebi AL 8-bit register, 
BX ise 16-bit register olmasıdır.

8,16 ve 32-bit register'ları hatırlayalım(Not: Aşağıdakilerden daha fazlası var)
Kod:
8-bit Register  >  AH,AL,BH,BL,CH,CL,DH,DL

16-bit Register  >  AX,BX,CX,DX,SP,BP,SI,DI

32-bit Register  >  EAX,EBX,ECX,EDX

Bir segment register'ından diğerine adres aktarımı için MOV komutu kullanılamaz.
Kod:
MOV  ES,DS  >  Şeklinde kullanılamaz. Sebebi segment'den segmente bir aktarım vardır.

CS registerı hedef konumda olamaz. Yani MOV komutu ile değiştirilemez. Sebebi yürütülecek olan bir sonraki komutun adresi CS:IP çifti tarafından belirlenmektedir. CS registerı değiştirilirse yürütülecek bir sonraki komutun adresi belirsiz olacaktır.
Kod:
MOV  CS,AX  >  Şeklinde kullanılamaz. CS registerı hedef konumda.

2.Immediate Addressing(İvedi Adresleme)

Kaynak operand sabit bir veri olmalıdır. Bu sabit veri hedef registera aktarılır. Immediate(hemen, acil anlamı vardır.) kelimesi heksadesimel opcode'dan(Operasyon kodu, buradaki örneklerde mov) hemen sonra gelen hafıza satırındaki verinin kullanılmasını ifade eder.

Immediate veriler sabittir, zaten yukarıda bahsetmiştik. Register'dan veya hafıza satırından okunan veriler, değişken verilerdir.

Not: Herhangi bir sabit, ilk operand'ın(yani hedef operand) uzunluğundan daha büyük bir veri olamaz, ama daha küçük olabilir.

Segment register'lar ve flag register'lar ilk operand'da(hedef operand'da) kullanılamaz.
Kod:
MOV  AL,23  >  23(Decimal) AL register'ına kopyalandı.

MOV  BX,77H  >  77H(Hex veriler sonunda h harfiyle belirtilir.) BX register'ına kopyalandı.

3.Direct Addressing(Doğrudan Adresleme)

Doğrudan bir adres değeri kullanılır. Bir adresten bir registera veri aktarımı gerçekleştirilir. Özet olarak operand'lardan birisi adres belirtir.

MOV Register,Memory veya Memory,Register
Kod:
MyAddress  DW,32H  >  MyAddress bir adrestir. 32H bu adresin içindeki değerdir.

MOV  AX,MyAddress  >  MyAddress içerisindeki değeri AX register'ına at

; Bu işlemi direkt olarak şu şekilde de yapabilirdik

MOV  AX,[32H]

Not: [..] sembolü Assembly dilinde dolaylı adresleme için kullanılır.

4.Register Indirect Addressing(Kaydediciye Dayalı Adresleme)

BX,BP,DI,SI register'ları ile hafızanın herhangi bir yerinde bulunan bir veri adreslenir.

BX,DI,SI > DS'de bulunan veriyi adreslemektedir,

BP ise > SS'de bulunan bir hücre adreslenmiş olur.

Kod:
MOV  AL,[BX]  >  DS alanında bulunan ve BX ile adreslenen veriyi AL'ye kopyala

MOV  [BP],CL  >  BP ile adreslenen SS alanindaki hafıza hücresine CL'ye kopyala

5.Base-Plus-Index Addressing(Baz-Artı-İndis Adresleme)

Baz register'da(BP veya BX) bulunan değere indis register'larda(DI veya SI) bulunan değer ilave edilerek, bulunan değerin işaret ettiği hafıza adresindeki veri ile register'da bulunan veri arasında yapılan transferi gerçekleştirir.

Buradaki baz register'lar, bir hafıza dizisinin başlangıç adresini, indis register'lar ise dizideki verinin göreceli pozisyonunu tutar.

MOV Register,[Baz Register + İndis Register]
Kod:
MOV  CL,[BP+SI]  >  SS alanında bulunan ve BP + SI toplamı ile adreslenen veri CL'ye kopyalanır.

MOV  [BX+DI],CL  >  CL'de bulunan veri BX+DI toplamı ile adreslenen alana kopyalanır.

6.Register Relative Addressing(Kaydediciye Dayalı Göreceli Adresleme)

İndis veya baz register'larından herhangi birine bir sayı ilave edilmesiyle oluşan değerin hafıza bölgesi ile işaret ettiği(hedef registera) registera kopyalanmasıdır.

MOV Register,[indis or baz + sayı]
Kod:
MOV  AX,[BX+50]  >  DS alanında bulunan BX+50 toplamı ile adreslenen veri AX'e kopyalanır.

7.Base Relative-Plus-Index Addressing(Baz Göreceli-Artı-İndis Adresleme)

Register Relative benzemektedir. Buradaki fark indis ve baz register'larının ikisinin de bulunmasıdır. Bunların üzerine bir de sayı eklenmesiyle oluşan değerin işaret ettiği hafıza bölgesi ile register arasındaki kopyalama işlemidir.

MOV Register,[Baz + İndis + Sayı]
Kod:
MOV AX,[BX+DI+5]  >  DS'de bulunan ve BX+DI+5 ile ifade edilen yerdeki veriyi 
AX register'ına kopyalar.

Program Adresleme Modları

Programa karar verme özelliği sağlayarak program akışını kontrol eden veya değiştiren adresleme modlarıdır. JMP komutu sıkça kullanılır.

JMP komutu Nedir?

Programı belirtilen etiketin olduğu yere dallandırmakta ve program buradan çalışmaya devam etmektedir.

JMP HEDEF

Kendi içerisinde üçe ayrılır.

  1. Doğrudan(Direct) Program Hafıza Adresleme
  2. Göreceli(Relative) Program Hafıza Adresleme
  3. Dolaylı(Indirect) Program Hafıza Adresleme
1.Doğrudan(Direct) Program Hafıza Adresleme

Segment'ler arası bir işlemdir. Mevcut kod segment'inden farklı bir kod segmentine geçiş sağlar. Eğer doğrudan bir program adresine ulaşmak istiyorsak kullanabiliriz.

Bu adreslemede CS:IP çifti uygun şekilde değiştirilir.
Kod:
JMP  200H:300H  >  CS <- 200H , IP <- 300H

2.Göreceli(Relative) Program Hafıza Adresleme

Mevcut IP register'ın değerine göre hangi program hafızasının adresleneceğini ifade eder.
Kod:
JMP  100
JMP  0FFH	
JMP  1000H

3.Dolaylı(Indirect) Program Hafıza Adresleme

16-bit register'lardan(AX,BX,CX,DX,SP,BP,SI,DI..) herhangi biri, göreceli bir registerı veya bir yer değişim değeri ile beraber kullanılabilir.
Kod:
JMP  CX  >  o an hangi kod segmenti içindeysek, BX ile adreslenen hafıza bölgesine dallan

JMP  [BX]  >  o an hangi kod segmenti içindeysek, BX ile işaretli DS'de yer alan bir ofset ile adreslenen yere dallan

Yığın Hafıza Adresleme Modları

Yığın hafıza verileri geçici olarak saklar. Yığın hafıza 8086/8088 ve diğer bir çok mikroişlemcide LIFO(Last in First Out) prensibine göre çalışır. PUSH ve POP komutlarını kullanılır.

PUSH komutu ile veri yığın üstüne yerleştirilir.

POP ile de veri yığından çekilir.

CS hariç tüm register'lar yığından veri çekebilir.
Kod:
POP  CS  >  Assembler hatası verir.

Yığın hafızadaki veri SS:SP çifti ile gösterilir.
Kod:
PUSH  AX  >  AX içeriğini yığına sakla

POP  BX  >  Yığından BX register'ına oku

PUSH  DS  >  DS'nin bir kopyasını yığına sakla 

PUSHF  >  Flag register'ına yığına sakla

POPF  >  Yığından flag register'ına oku

Selam ve Sevgilerle layef...


 
Son düzenleme:

jplace

Yeni üye
7 Nis 2022
33
9


Bu haftaki konumuz X86 Assembly Adresleme Modları hakkında olacak. İlk olarak X86 ve X86 Assembly terimlerine ayrı ayrı değinmemiz gerekiyor.



X86 Nedir?




İntel'in 8086 işlemcisini merkez alan bir işlemci mimarisidir. İntel ve AMD işlemciler bu mimariyi kullanmaktadır. Bu yüzden pazarın %90'ını bu mimari oluşturmaktadır.



X86 mimarisini kullanan işlemciler genelde aynı komut setlerini kullanır.



X86 Assembly Nedir?




X86 mimarisine sahip işlemcilere uyumlu olan Assembly dili demektir. Assembly hakkında biraz detaya inecek olursak Assembly, alt seviye dillerden biridir yani makine diline yakındır ve İngilizce sözcüklerin kısaltmasından oluşmuştur. Assembly genellikle karmaşık programlar yazmak için kullanılıyor. Performans odaklıdır ve hafıza üzerinde az yer kaplar.



Assembly platformdan bağımsız, hedef bilgisayar mimarisine sıkı sıkıya bağlı bir dildir. Bilgisayar üzerinde direkt müdehale imkanı tanır.



Assembly diğer programlama dilleri ile genellikle yapamayacağımız bir çok şeyi yapma imkanı sunar. Özellikle siber güvenlik alanında;


  • Program ve işletim sistemlerinin güvenlik açıklarını görmek,
  • Şifre kırma, hacking işlemleri,
  • Malware ve anti-malware programları yazmak için kullanılabiliyor.


Ayrıca Assembly dilini makine koduna çeviren programlara Assembler denir. Assembler birebir dönüşüm yapmaktadır. Bu yüzden derleyicilerden ayrılırlar.



Konumuza dönecek olursak.. Adresleme modları memory'nin nasıl kullanıldığının, memory'ye nasıl erişileceğini ve verilerin memory'ye nasıl yerleştirileceğini belirler.



X86 Assembly'de doğru bir yazılım geliştirmek ve işleyişi tam olarak anlamak için her bir komut için adresleme modunu bilmek gerekir.



Adresleme yöntemlerinin fazla olması high-level dillerdeki karmaşık işlemlerin daha kolay bir şekilde yerine getirilmesine olanak tanır.



Adresleme modlarını 3 farklı kategoride inceleyebiliriz.


  1. Veri Adresleme Modları,
  2. Program Adresleme Modları,
  3. Yığın Hafıza Adresleme Modları


Veri Adresleme Modları



Register'lar arasında ve register ile memory arasında yapılan 8,16 veya 32 bitlik veri aktarımı işlemlerinde MOV komutunun kullanıldığı adresleme yöntemidir. Kendi içerisinde yediye ayrılır.


  1. Register Addressing(Saklayıcı/kaydedici Adresleme)
  2. Immediate Addressing(İvedi Adresleme)
  3. Direct Addressing(Doğrudan Adresleme)
  4. Register Indirect Addressing(Kaydediciye Dayalı Adresleme)
  5. Base-Plus-Index Addressing(Baz-Artı-İndis Adresleme)
  6. Register Relative Addressing(Kaydediciye Dayalı Göreceli Adresleme)
  7. Base Relative-Plus-Index Addressing(Baz Göreceli-Artı-İndis Adresleme)


Bunlara başlamadan önce MOV komutunu hatırlayalım;

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  AX,BX  >  AX ve BX'in herbiri bir operand'dır,



MOV  >  Opcode(Operasyon kodu) mikroişlemciye hangi operasyonun çalıştırılacağını belirtir,



AX  >  Destionation(Hedef),



BX  >  Source(Kaynak)


Notlar: Veri aktarım yönü hedef > kaynak şeklindedir. Operand = işlem fonksiyonu



1.Register Addressing(Saklayıcı/kaydedici Adresleme)



Bu adresleme modunda kaynak ve hedef operand'ın her ikisi de 8086 register'larıdır. Yani mikroişlemcinin iç register'ları arasında işlemler gerçekleştirilir.



Bu yüzden memory ile erişim yapılmaz. Memory ile erişim yapılmadığı için çok hızlıdır.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  AL,BH  >  BH, AL'ye kopyalanır.(İkisi de 8-bit register'dır.)



MOV  AX,DX  >  DX, AX'e kopyalanır.(İkisi de 16-bit register'dır.)




8,16 veya 32-bit register'lar olabilir ama karışık kullanılamaz.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  AL,BX  >  Şeklinde kullanılamaz. Sebebi AL 8-bit register, 

BX ise 16-bit register olmasıdır.




8,16 ve 32-bit register'ları hatırlayalım(Not: Aşağıdakilerden daha fazlası var)

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]8-bit Register  >  AH,AL,BH,BL,CH,CL,DH,DL



16-bit Register  >  AX,BX,CX,DX,SP,BP,SI,DI



32-bit Register  >  EAX,EBX,ECX,EDX




Bir segment register'ından diğerine adres aktarımı için MOV komutu kullanılamaz.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  ES,DS  >  Şeklinde kullanılamaz. Sebebi segment'den segmente bir aktarım vardır.




CS registerı hedef konumda olamaz. Yani MOV komutu ile değiştirilemez. Sebebi yürütülecek olan bir sonraki komutun adresi CS:IP çifti tarafından belirlenmektedir. CS registerı değiştirilirse yürütülecek bir sonraki komutun adresi belirsiz olacaktır.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  CS,AX  >  Şeklinde kullanılamaz. CS registerı hedef konumda.




2.Immediate Addressing(İvedi Adresleme)



Kaynak operand sabit bir veri olmalıdır. Bu sabit veri hedef registera aktarılır. Immediate(hemen, acil anlamı vardır.) kelimesi heksadesimel opcode'dan(Operasyon kodu, buradaki örneklerde mov) hemen sonra gelen hafıza satırındaki verinin kullanılmasını ifade eder.



Immediate veriler sabittir, zaten yukarıda bahsetmiştik. Register'dan veya hafıza satırından okunan veriler, değişken verilerdir.



Not: Herhangi bir sabit, ilk operand'ın(yani hedef operand) uzunluğundan daha büyük bir veri olamaz, ama daha küçük olabilir.




Segment register'lar ve flag register'lar ilk operand'da(hedef operand'da) kullanılamaz.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  AL,23  >  23(Decimal) AL register'ına kopyalandı.



MOV  BX,77H  >  77H(Hex veriler sonunda h harfiyle belirtilir.) BX register'ına kopyalandı.




3.Direct Addressing(Doğrudan Adresleme)



Doğrudan bir adres değeri kullanılır. Bir adresten bir registera veri aktarımı gerçekleştirilir. Özet olarak operand'lardan birisi adres belirtir.



MOV Register,Memory veya Memory,Register


Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MyAddress  DW,32H  >  MyAddress bir adrestir. 32H bu adresin içindeki değerdir.



MOV  AX,MyAddress  >  MyAddress içerisindeki değeri AX register'ına at



; Bu işlemi direkt olarak şu şekilde de yapabilirdik



MOV  AX,[32H]




Not: [..] sembolü Assembly dilinde dolaylı adresleme için kullanılır.



4.Register Indirect Addressing(Kaydediciye Dayalı Adresleme)



BX,BP,DI,SI register'ları ile hafızanın herhangi bir yerinde bulunan bir veri adreslenir.



BX,DI,SI > DS'de bulunan veriyi adreslemektedir,



BP ise > SS'de bulunan bir hücre adreslenmiş olur.



Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  AL,[BX]  >  DS alanında bulunan ve BX ile adreslenen veriyi AL'ye kopyala



MOV  [BP],CL  >  BP ile adreslenen SS alanindaki hafıza hücresine CL'ye kopyala




5.Base-Plus-Index Addressing(Baz-Artı-İndis Adresleme)



Baz register'da(BP veya BX) bulunan değere indis register'larda(DI veya SI) bulunan değer ilave edilerek, bulunan değerin işaret ettiği hafıza adresindeki veri ile register'da bulunan veri arasında yapılan transferi gerçekleştirir.



Buradaki baz register'lar, bir hafıza dizisinin başlangıç adresini, indis register'lar ise dizideki verinin göreceli pozisyonunu tutar.



MOV Register,[Baz Register + İndis Register]


Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  CL,[BP+SI]  >  SS alanında bulunan ve BP + SI toplamı ile adreslenen veri CL'ye kopyalanır.



MOV  [BX+DI],CL  >  CL'de bulunan veri BX+DI toplamı ile adreslenen alana kopyalanır.




6.Register Relative Addressing(Kaydediciye Dayalı Göreceli Adresleme)



İndis veya baz register'larından herhangi birine bir sayı ilave edilmesiyle oluşan değerin hafıza bölgesi ile işaret ettiği(hedef registera) registera kopyalanmasıdır.



MOV Register,[indis or baz + sayı]


Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV  AX,[BX+50]  >  DS alanında bulunan BX+50 toplamı ile adreslenen veri AX'e kopyalanır.




7.Base Relative-Plus-Index Addressing(Baz Göreceli-Artı-İndis Adresleme)



Register Relative benzemektedir. Buradaki fark indis ve baz register'larının ikisinin de bulunmasıdır. Bunların üzerine bir de sayı eklenmesiyle oluşan değerin işaret ettiği hafıza bölgesi ile register arasındaki kopyalama işlemidir.



MOV Register,[Baz + İndis + Sayı]


Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]MOV AX,[BX+DI+5]  >  DS'de bulunan ve BX+DI+5 ile ifade edilen yerdeki veriyi 

AX register'ına kopyalar.




Program Adresleme Modları



Programa karar verme özelliği sağlayarak program akışını kontrol eden veya değiştiren adresleme modlarıdır. JMP komutu sıkça kullanılır.



JMP komutu Nedir?



Programı belirtilen etiketin olduğu yere dallandırmakta ve program buradan çalışmaya devam etmektedir.



JMP HEDEF




Kendi içerisinde üçe ayrılır.


  1. Doğrudan(Direct) Program Hafıza Adresleme
  2. Göreceli(Relative) Program Hafıza Adresleme
  3. Dolaylı(Indirect) Program Hafıza Adresleme


1.Doğrudan(Direct) Program Hafıza Adresleme



Segment'ler arası bir işlemdir. Mevcut kod segment'inden farklı bir kod segmentine geçiş sağlar. Eğer doğrudan bir program adresine ulaşmak istiyorsak kullanabiliriz.



Bu adreslemede CS:IP çifti uygun şekilde değiştirilir.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]JMP  200H:300H  >  CS <- 200H , IP <- 300H




2.Göreceli(Relative) Program Hafıza Adresleme



Mevcut IP register'ın değerine göre hangi program hafızasının adresleneceğini ifade eder.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]JMP  100

JMP  0FFH    

JMP  1000H




3.Dolaylı(Indirect) Program Hafıza Adresleme



16-bit register'lardan(AX,BX,CX,DX,SP,BP,SI,DI..) herhangi biri, göreceli bir registerı veya bir yer değişim değeri ile beraber kullanılabilir.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]JMP  CX  >  o an hangi kod segmenti içindeysek, BX ile adreslenen hafıza bölgesine dallan



JMP  [BX]  >  o an hangi kod segmenti içindeysek, BX ile işaretli DS'de yer alan bir ofset ile adreslenen yere dallan




Yığın Hafıza Adresleme Modları



Yığın hafıza verileri geçici olarak saklar. Yığın hafıza 8086/8088 ve diğer bir çok mikroişlemcide LIFO(Last in First Out) prensibine göre çalışır. PUSH ve POP komutlarını kullanılır.



PUSH komutu ile veri yığın üstüne yerleştirilir.



POP ile de veri yığından çekilir.



CS hariç tüm register'lar yığından veri çekebilir.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]POP  CS  >  Assembler hatası verir.




Yığın hafızadaki veri SS:SP çifti ile gösterilir.

Kod:
[/COLOR][/SIZE][/FONT][/CENTER]
[FONT=Arial Black][SIZE=3][COLOR=White]
[CENTER]PUSH  AX  >  AX içeriğini yığına sakla



POP  BX  >  Yığından BX register'ına oku



PUSH  DS  >  DS'nin bir kopyasını yığına sakla 



PUSHF  >  Flag register'ına yığına sakla



POPF  >  Yığından flag register'ına oku




Selam ve Sevgilerle layef...





bakalımm
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.