Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Mustafa Arkan
Mustafa Arkan
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
4 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: bayragina belirlenen bitleri degeri degerini depola hafiza komutu oldugu operand operandi operandin pozisyondaki register sonrasinda X86 Assembly Mustafa Arkan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : X86 Assembly
Yayınlanma Tarihi : 11.12.2006
Okunma Sayısı : 42477
Yorum Sayısı : 5     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 23.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 23.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 23.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 23.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
80x86 KOMUT SETİ (BÖLÜM 6)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Makalemizde, 80X86 komut sistemine ait, CMPXCHG, CMPXCHG8B, SAL, SAR, SHLD, SHRD, ROL, ROR, BT, BTS, BTR, BTC, BSF, BSR  aritmetik lojik komutlarını açıklamaya devam edeceğiz.


CMPXCHG
ve CMPXCHG8B Komutu:

CMPXCHG Komutu ,CMP ve XCHG komutlarinin islevlerini birlikte gerçekleştirir. İlk operandı, boyutuna bağlı olarak al,ax veya eax registerindeki değerle karşılaştırır. Eğer değerler eşit ise, ikinci operandın değeri ilk operanda yüklenir. Eşit olmaması halinde ise, ilk operandın değeri ikinci operanda aktarılır. Sign, Zero, Auxiliary, Parity, Carry ve Owerflow bayraklarını etkiler.

Komut Anlamı İşlem
CMPXCHG CMPXCHG r/m8,al al ile r/m8’i karşılaştır. Eşitse ZF değeri 1 olur ve al değeri r/m8’e yüklenir. Değilse ZF değeri 0 olur ve r/m8 değeri al’ye yüklenir.
CMPXCHG CMPXCHG r/m16,ax ax ile r/m16’yı karşılaştır. Eşitse ZF değeri 1 olur ve ax değeri r/m16’ya yüklenir. Değilse ZF değeri 0 olur ve r/m16 değeri ax’e yüklenir.
CMPXCHG CMPXCHG r/m32,eax eax ile r/m32’i karşılaştır. Eşitse ZF değeri 1 olur ve eax değeri r/m32’ye yüklenir. Değilse ZF değeri 0 olur ve r/m32 değeri eax’e yüklenir.
CMPXCHG8B Komutu, ile 64 bitlik sayılar üzerinde işlemler yapabilmek için kullanıyoruz, kendisine gelen adresteki değeri EDX:EAX içindeki değer ile karşılaştırır. Eşit ise, ECX:EBX’deki değeri 64 bitlik operanda yerleştirilir. Eşit olmaması halinde ise, hedef operand değeri EDZ:EAX’e yerleştirilir. Hedef operand 8 byte hafıza alanına sahiptir. EDX:EAX ve ECX:EBX 64 bitlik registerlerinin; EDX ve ECX yüksek seviyeli 32 bitini, EAX ve EBX ise düşük seviyeli 32 bitini paylaşır.Hedef operand ve EDX:EAX’in değerleri eşit olursa zero bayrağı etkilenir.  

Komut Anlamı İşlem
CMPXCHG8B CMPXCHG8B m64 m64 ile EDX:EAX değerini karşılaştır. Eşitse ZF değeri 1 olur ve ECX:EBX’teki değer m64’e yüklenir. Değilse ZF değeri 0 olur ve m64 değeri EDX:EAX’e yüklenir.

SAL
ve SAR Komutu:

SAL Komutu ,ile soldaki operandın en yüksek seviyeli biti carry bayrağına kopyalanır ve operandın tüm bitleri sola doğru 1’er bit kayar. En soldaki bitin değeri 0 yapılır. Bu işlem SAL ile verilen ikinci operandın değeri kadar tekrarlanır.


 Şekil 1 - Sal komutu ile bitlerin sola kaydırılması

SAR komutu ,ile soldaki operandın en düşük seviyeli biti carry bayrağına kopyalanır ve operandın tüm bitleri sağa doğru 1’er bit kayar. En soldaki bitin değeri de kaydırılır fakat eski değeri korunur. Bu bit işaretli sayılarda sign biti olarak kullanılır. Bu işlem SAR ile verilen ikinci operandın değeri kadar tekrarlanır.


 

Şekil 2 - Sar komutu ile bitlerin sağa kaydırılması

 


SHLD ve SHRD Komutu:
 


SHLD Komutu hedef operand değeri, 3. operand ile belirlenen değer kadar sola kaydırılır. 2. operand sağdan gelen bitleri tutar. Hedef operand, register yada hafıza alanı, 3. operand ise register olabilir. Sayaç operandı byte olarak tanımlanan işaretsiz tamsayı yada CL registerinin değeridir. Eğer sayaç değeri operand değerinden fazla ise hedef operand içerisinde sonuç tanımlanamaz. Sign, Zero, Auxiliary, Parity ve Carry bayraklarını etkiler.

Komut Anlamı İşlem
SHLD SHLD r/m16,r16,opr3 r/m16 değerini, opr3 ile belirlenen değer kadar sola kaydırırken, r16 sağdan gelen bitleri tutar.
SHLD SHLD r/m16,r16,CL r/m16 değerini, CL ile belirlenen değer kadar sola kaydırırken, r16 sağdan gelen bitleri tutar.
SHLD SHLD r/m32,r32,opr3 r/m32 değerini, opr3 ile belirlenen değer kadar sola kaydırırken, r32 sağdan gelen bitleri tutar.
SHLD SHLD r/m32,r32,CL r/m32 değerini, CL ile belirlenen değer kadar sola kaydırırken, r32 sağdan gelen bitleri tutar.
SHRD Komutu hedef operand değeri, 3. operand ile belirlenen değer kadar sağa kaydırılır. 2. operand soldan gelen bitleri tutar.Hedef operand, register yada hafıza alanı, 3. operand ise register olabilir. Sayaç operandı byte olarak tanımlanan işaretsiz tamsayı yada CL registerinin değeridir.  Eğer sayaç değeri operand değerinden fazla ise hedef operand içerisinde sonuç tanımlanamaz.  Sign, Zero, Auxiliary, Parity ve Carry bayraklarını etkiler.

Komut Anlamı İşlem
SHRD SHRD r/m16,r16,opr3 r/m16 değerini, opr3 ile belirlenen değer kadar sağa kaydırırken, r16 soldan gelen bitleri tutar.
SHRD SHRD r/m16,r16,CL r/m16 değerini, CL ile belirlenen değer kadar sağa kaydırırken, r16 soldan gelen bitleri tutar.
SHRD SHRD r/m32,r32,opr3 r/m32 değerini, opr3 ile belirlenen değer kadar sağa kaydırırken, r32 soldan gelen bitleri tutar.
SHRD SHRD r/m32,r32,CL r/m32 değerini, CL ile belirlenen değer kadar sağa kaydırırken, r32 soldan gelen bitleri tutar.
SHL ve SHR ile aynı şekilde çalışmalarına rağmen, bit alanları 64 bite kadar çıkabildiklerinden dolayı SHLD ve SHRD komutları kullanılır.

ROL ve ROR komutu:

ROL komutu ile, operandın tüm bitleri sola doğru 1’er bit kayar. En soldaki bitin değeri, carry bayrağına ve düşük seviyeli bit pozisyonuna aktarılır. Bu işlem ROL ile verilen ikinci operandın değeri kadar tekrarlanır.


Şekil 3 - Rol komutu ile bitlerin sola kaydırılması


ROR komutu ile, operandın tüm bitleri sağa doğru 1’er bit kaydırılır. En sağdaki bitin değeri, carry bayrağına ve yüksek seviyeli bit pozisyonuna aktarılır. Bu işlem ROR ile verilen ikinci operandın değeri kadar tekrarlanır.

 
Şekil 4 - Ror komutu ile bitlerin sağa kaydırılması


Genel olarak kaydırma komutları gibi çalışırlar, fakat adında anlaşılacağı gibi bit değerleri kaybolmaz, dönerek yer değiştirirler.

BT
ve BTS Komutu:

BT komutu ile, bit ofset operandı ile gösterilen pozisyonda, bit dizisi içerisinde bulunan bit seçilir ve carry bayrağına depolanır. Temel bit operandı register ya da hafıza alanı, ofset operand ise register yada registere yakın bir değer olabilir. Eğer temel bit  operand register ise, registerin boyutuna bağlı olarak komutun değeri, ofset operandın 16 veya 32’ye göre mod’u alınarak bulunur. Eğer temel bit  operand hafıza alanı ise, temel bit değerinin olduğu hafıza içerisinde baytın adresi gösterilir. Carry bayrağı etkilenir.

Komut Anlamı İşlem
BT BT  r/m16, r16 r16 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola.
BT BT  r/m32, r32 r32 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola.
BT BT  r/m16, opr2 opr2 dizisi içinde,r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola.
BT BT  r/m32, opr2 opr2 dizisi içinde,r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola.
BTS komutu ile, bit ofset operandı ile gösterilen pozisyonda, bit dizisi içerisinde bulunan bit seçilir, carry bayrağına depolanır ve 1 olarak ayarlanır. Temel bit operandı register ya da hafıza alanı, ofset operand ise register yada registere yakın bir değer olabilir.Eğer temel bit  operand register ise, registerin boyutuna bağlı olarak komutun değeri, ofset operandın 16 veya 32’ye göre mod’u alınarak bulunur. Eğer temel bit  operand hafıza alanı ise, temel bit değerinin olduğu hafıza içerisinde baytın adresi gösterilir. Carry bayrağı etkilenir.

Komut Anlamı İşlem
BTS BTS r/m16, r16 r16 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 1 olarak ayarla.
BTS BTS r/m32, r32 r32 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 1 olarak ayarla.
BTS BTS r/m16, opr2 opr2 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 1 olarak ayarla.
BTS BTS r/m32, opr2 opr2 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 1 olarak ayarla.
BTR ve BTC Komutu:

BTR komutu ile, bit ofset operandı ile gösterilen pozisyonda, bit dizisi içerisinde bulunan bit seçilir, carry bayrağına depolanır ve 0 değeri atanır.Temel bit operandı register ya da hafıza alanı, ofset operand ise register yada registere yakın bir değer olabilir.Eğer temel bit  operand register ise, registerin boyutuna bağlı olarak komutun değeri, ofset operandın 16 veya 32’ye göre mod’u alınarak bulunur. Eğer temel bit  operand hafıza alanı ise, temel bit değerinin olduğu hafıza içerisinde baytın adresi gösterilir. Carry bayrağı etkilenir.

Komut Anlamı İşlem
BTR BTR r/m16, r16 r16 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 0 olarak ayarla.
BTR BTR r/m32, r32 r32 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 0 olarak ayarla.
BTR BTR r/m16, opr2 opr2 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 0 olarak ayarla.
BTR BTR r/m32, opr2 opr2 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve değerini 0 olarak ayarla.
BTC komutu ile, bit ofset operandı ile gösterilen pozisyonda, bit dizisi içerisinde bulunan bit seçilir, carry bayrağına depolanır ve tersi alınır.Temel bit operandı register ya da hafıza alanı, ofset operand ise register yada registere yakın bir değer olabilir.Eğer temel bit  operand register ise, registerin boyutuna bağlı olarak komutun değeri, ofset operandın 16 veya 32’ye göre mod’u alınarak bulunur. Eğer temel bit  operand hafıza alanı ise, temel bit değerinin olduğu hafıza içerisinde baytın adresi gösterilir. Carry bayrağı etkilenir.

Komut Anlamı İşlem
BTC BTC r/m16, r16 r16 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve tersini al.
BTC BTC r/m32, r32 r32 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve tersini al.
BTC BTC r/m16, opr2 opr2 dizisi içinde, r/m16 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve tersini al.
BTC BTC r/m32, opr2 opr2 dizisi içinde, r/m32 ile gösterilen pozisyondaki biti seç ve Carry bayrağına depola ve tersini al.

BSF ve BSR Komutu:

BSF komutu , kaynak (2.) operand içerisindeki en anlamsız biti, 1 yapmak için arar. Eğer bulursa, hedef (1.) operand içerisinde index biti olarak kullanılır. Kaynak operand register ya da hafıza alanı, hedef operand ise register olabilir. Eğer kaynak operandın değeri 0 ise, hedef operandın değeri tanımlanamaz.

Komut Anlamı İşlem
BSF BSF r16, r/m16 r/m16 içerisinde en anlamsız biti ara ve değerini 1 olarak ayarla.
BSF BSF r32, r/m32 r/m32 içerisinde en anlamsız biti ara ve değerini 1 olarak ayarla.
BSR komutu ,kaynak (2.) operand içerisindeki en anlamlı biti, 1 yapmak için arar. Eğer bulursa, hedef (1.) operand içerisinde index biti olarak kullanılır. Kaynak operand register ya da hafıza alanı, hedef operand ise register olabilir. Eğer kaynak operandın değeri 0 ise, hedef operandın değeri tanımlanamaz.

Komut Anlamı İşlem
BSR BSR r16, r/m16 r/m16 içerisinde en anlamlı biti ara ve değerini 1 olarak ayarla.
BSR BSR r32, r/m32 r/m32 içerisinde en anlamlı biti ara ve değerini 1 olarak ayarla.

Şekil 5 - Programın Ekran Görüntüsü                            

Örneğimizde; CMPXCHG komutuyla al=14h ve cl=20h registerindeki değerler karşılaştırılıyor, değerler farklı oluğu için, Şekil 6’da CMPXCHG komutunun sonrasında cl registerin’deki değerin al’ye aktarıldığını görüyoruz.


Şekil 6 - CMPXCHG komutu öncesi ve sonrasında al,cl registerlerinin almış olduğu değerler

SAL/SAR komutu ile al ve cl registerlerinde sola ve sağa doğru ikinci operand değeri kadar kaydırıyoruz, Şekil7’de SAL komutu sonrasında al’nin , SAR komutunun ardından cl registerinin yeni değeri görülmektedir. 


Şekil 7 - SAL ve SAR komutları öncesi ve sonrasında al,cl registerlerinin almış olduğu değerler

ROL/ROR komutu ile bl ve dl registerlerinde sola ve sağa doğru ikinci operand değeri kadar kaydırıyoruz. Şekil8’de ROL komutu sonrasında en soldaki bitin değerini carry bayrağına ve düşük seviyeli bit pozisyonuna,ROR komutu sonrasında en sağdaki bitin değerini carry bayrağına ve yüksek seviyeli bit pozisyonuna aktarıyoruz.


Şekil 8 - ROL ve ROR komutları öncesi ve sonrasında bl,dl registerlerinin almış olduğu değerler

BTS komutu ile ax registerinin 3. bitini set ediyoruz. Şekil9’da BTS komutu sonrasında seçilen bitin değerini carry bayrağına aktarıp 1 yapıyoruz.


Şekil 9 - BTS komutu öncesi ve sonrasında al,ah registerlerinin almış olduğu değerler

BTR komutu ile ax registerinin 2. bitini seçiyoruz. Şekil10’da BTR komutu sonrasında seçilen bitin değerini carry bayrağına aktarıp 0 yapıyoruz.


Şekil 10 - BTR komutu öncesi ve sonrasında al,ah registerlerinin almış olduğu değerler

 


asm {

mov al, 0X14          //desimal 20’ye eşit
mov cl, 0X20         //desimal 32’ye eşit

cmpxchg cl, al         //al değeri ile cl değerlerini karşılaştır.
                            //değerler farklı olduğu için, cl değerini, al’ye at

mov cmpal,al          //cmpxchg komutu için değerleri sakla
mov cmpcl,cl

//----------------------------------------------------------------
sal al,1                 //al değerini sal komutu ile sola doğru kaydır
sar cl,1                //cl değerini sar komutu ile sağa doğru kaydır

mov slal,al           //sal ve sar komutu için değerleri sakla
mov srcl,cl

//----------------------------------------------------------------
mov bl,0X88        // desimal 136’ya eşit
mov dl,0X88

rol bl,1             //al değerini rol komutu ile sola doğru kaydır
ror dl,1            //cl değerini ror komutu ile sola doğru kaydır

mov rlal,bl        //rol ve ror komutu için değerleri sakla
mov rrcl,dl

//----------------------------------------------------------------
mov ax,0X14    // desimal 20’ye eşit

bts ax,3        //bts komutu ile ax registerinin 3. bitini 1 yap

mov btal,al     //bts komutu için ax (al , ah) değerleri sakla
mov btah,ah

//----------------------------------------------------------------
mov ax,0X14    // desimal 20’ye eşit

btr ax,2         //btr komutu ile ax registerinin 2. bitini 0 yap

mov btral,al      //btr komutu için ax (al , ah) değerleri sakla
mov btrah,ah


}


C++ Builder içerisinde assembly kullanarak gerçekleştirdiğim programın kodlarını buradan indirebilirsiniz. Programı bilgisayara aktarmadan, kendi belirlediğiniz değerler ile kağıt üzerinde işlemleri gerçekleştirirseniz komutların çalışma mantığı daha kalıcı olacaktır. Herkese iyi çalışmalar...

Makale:
80x86 KOMUT SETİ (BÖLÜM 6) Assembly ve X86 Programlama Mustafa Arkan
  • Yazılan Yorumlar
  • Yorum Yaz
ARA
7
2010
teşekürler
ARA
13
2006
Teşekkürler
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor