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
Eren Erener
Eren Erener
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
12 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: aslinda b800:0000 bayragini burada formatlari islemleri isletim komutu kullanim mantiksal oldugunu paralel sifreleme tekrar windows X86 Assembly Eren Erener
 
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 : 14.4.2006
Okunma Sayısı : 49883
Yorum Sayısı : 3     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 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.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 4)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu makalemde 80x86 mantıksal (logical) komutlarından bazılarını anlatmaya çalışacağım. Ayrıca VGA 80x25 text mode ekraın hafız alanına direk erişim yapacağız. 

80x86 KOMUT SETİ (Bölüm 4)

Mantıksal (logical) komutlar AND, OR, XOR ve NOT adıyla bilinen ve matematiksel hesaplamalarda çok kullanılan komutlardır.

AND komutu

Yapı olarak AND (VE) mantığı 1 ve 0’lar ile ifade edilirse;

1 ve 1 = 1
1 ve 0 = 0
0 ve 1 = 0
0 ve 0 = 0

sonuçlarını üretir.

Bu komutu assembly programcıları genelde maskeleme işlerinde kullanırlar. Örneğin 1 byte’lık değerin 7, 6, 5, ve 4. bitlerini göz ardı etmek için aşağıdaki gibi bir program parçası yazılabilir.

mov al, A5h
and al, 0Fh

bu işlemlerden sonra AL’in yüksek değerli 4 biti (nibble) sıfırlanacaktır yani AL binary olarak ifade edersek 0000 0101 olacaktır. Buna düşük değerlikli 4 bite dokunmadan diğer bitleri sıfırlamakta denilebilir.

Bu komutu elektronikçiler çok kullanırlar, mesela paralel porttan alınacak olan verinin sadece 5 bitini kontrol etmek için;

            mov  dx,378h            ; paralel port adresi
            in     al, dx                ; bu adresten bilgiyi al
            and  al, 0010 0000b    ; 5. biti kontrol et (maskele)
            jnz   devam               ; 5. bit 1 ise "devam" a dallan
            .
            .
            .
            .
devam:   .
            ;devam komutları
            .

Diyelim ki AL’ye IN komutu ile alınan byte 1011 0001 olsun, bu durumda;

  1011 0001
  0010 0000
v__________
  0010 0000

yukarıdaki işlem yapılır ve AND komutu bayrak kaydedicisinin Z bitini 0 olarak kurar, çünkü sonuç 0’dan farklıdır. İşte burada maske olarak sadece 5. biti 1 olan bir byte seçilmiştir.

Not: Windows XP altında paralel port’a doğrudan erişim işletim sisteminin kerneli tarafından engellendiğinden bu programı windows XP öncesi işletim sistemlerinde çalıştırabilirsiniz. IN ve OUT komutlarının kullanımı sonraki makalelerin konusudur.

AND komutunun kullanım formatları;

        and    hedef, kaynak     ;hedef := hedef & kaynak

        and     reg, reg
        and     mem, reg
        and     reg, mem
        and     reg, imm
        and     mem, imm
        and     eax/ax/al, imm

OR komutu

Mantıksal veya işlemini gerçekleştirir,

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

doğruluk tablosu yukarıdaki gibidir. Kullanım formatları AND komutundaki gibidir.

XOR komutu

XOR olmadan şifreleme işlemleri sanırım çok zor yapılırdı. Çok fazla kullanım alanı olmakla beraber veri paketleme ve şifreleme işlemleri için hayat kurtarıcı bir komuttur. eXclusiveOR (özel veya) kelimesinin kısaltmasıdır. Doğruluk tablosu;

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Ben genelde öğrencilerime bu komutun yaptığı işi anlatırken "aynılarda 0 farklılarda 1" sonucunu veren mantıksal ifade derim.

XOR komutu ile şifreleme ve paketleme işlemleri için örnekler şu anda belki de sizin için biraz ağır kaçabilir, bunun yerine swap (yer değiştirme) ve kaydedici sıfırlama örneklerini XOR komutunu ile neler yapılabildiğine örnek teşkil edeceğini düşünüyorum.

xor    ax,ax    ; ax=0 olur ve "mov ax,0" dan kat kat hızlı çalışır


;AX = 1234h ve BX=9876h olsun

xor    ax, bx
xor    bx, ax
xor    ax, bx

; bu 3 komut sonrasında AX = 9876h ve BX = 1234h olur.

XOR komutunun kullanım formatları AND ve OR komutlarınınkiyle aynıdır.

Bayrakların Durumu

Yukarıda anlattığım bu üç komut bayrak kaydedicisini aşağıdaki gibi etkiler;

Carry bayrağını 0 yaparlar,
Overflow bayrağını 0 yaparlar
Zero bayrağını şayet sonuç 0 ise 1 yaparlar ve aksi durumlarda bu bayrağı 0 yaparlar
En Yüksek değerlikli bit’i Sign bayrağına kopyalarlar
Parity bayrağını (sonuçtaki 1’lerin sayısı çift ise) 1 yaparlar
Auxiliary carry (Ara Elde) bayrağının durumunu değiştirirler.

NOT komutu

NOT komutu operandının mantıksal tersini alır.

Kullanım formatları aşağıdaki gibidir;

    not reg
    not mem

; BL kaydedicisinin değeri 15h olsun;

    not bl

;bl = 0001 0101b iken bu komuttan sonra 1110 1010b olur.

NOT komutu hiçbir bayrağı etkilemez.

Şimdi Uygulama Zamanı

Bu makalemde sizlere örnek teşkil etmesi için konsol ekranındaki görüntüyü (tüm yazıları) önce karma karışık bir hale getiren daha sonrada tekrar orijinal haline çeviren bir programı anlatmayı düşünüyorum. Öncelikle Windows’un cmd.exe yada komut istemi ile açılan pencerenin görüntüsünün aslında B800:0000 adresinin bir yansıması olduğunu hatırlatmak isterim. Debug ile bu alana göz atalım.


Şekil 1 - Aslında ekran yansıması da hafızadaki byte’lardan ibarettir.

Konsol penceresi açılınca şayet işletim sisteminiz Windows XP ise "Microsoft Windows XP....." ile başlayan bir yazı görülür. Debug’ı çalıştırıp b800:0000 adresini ekrana döktüğümüzde bu yazı hala aynı yerindedir. B800h segmenti de burada görünen yazının bulunduğu text video alanıdır. Şekilde B800:0000 adresindeki 4Dh değerinin aslında M harfi olduğunu ve C karakterininde yine aynı segmentte bir değer olduğunu görüyorsunuz. Yukarıdaki resimdeki hafıza dökümü, en üst satırın tamamını ve sonraki satırın yarısından biraz fazlasını gözler önüne seriyor. Hafıza dökümünde tek numaralı her offsette (0001h,0003h,00F3h gibi) 07h değerini görüyorsunuz. Bu text mode özelliği olup siyah zemin üzerine beyaz yazı anlamına gelir. Gerçektende ekrandaki karakterlerin hepsi beyaz ve zemin siyah değil mi?

Konsol ekranının tamamı karakterlerle dolsa, ekranda kaç karakter görürüz? Tabi ki 80x25=2000 adet. Şimdi bu karakterlerin tek tek adreslerine erişip (özellik içeren 07h byte’larını atlayarak) bunları lojik bir işlemden geçirsem ekranın o anki görüntüsü değişir, hem de bizim boş olarak tabir ettiğimiz ama aslında 20h olan yerler bile. Böyle bir durumda ekranda karman çorman anlaşılmaz bir görüntünün belirmesi olası bir durumdur.

Peki değiştirdiğim her byte’ı tekrar eski haline getirebilir miyim? Bütün bunların cevabı aşağıdaki programda saklı.


Şekil 2 - 80x25 text mode da görünen ekrana müdahele.


Şekil 3 - Program çalıştırılmadan önceki durum.


Şekil 4 - Ekrandaki yazılara ne oldu böyle?


Şekil 5 - Klavyeden bir tuşa basıldığında görüntü tekrar normale döner.

Aslında video işlemleri için daha pratik interrupt’lar mevcuttur, burada anlatmaya çalıştığım, "şayet assembly dili ile hafızanın her yerine erişebilecek deneyime sahipseniz yapamayacağınız şey yoktur" gerçeğiydi.

Bu programda özellikte, text video alanının segment adresini DS kaydedicisine yüklenişini ve bu alanın kaydedici dolaylı (register indirect) adresleme modu ile sanki kendi tanımladığımız bir data alanı gibi kullanılışını incelemenizi tavsiye ederim.

Düşük seviyede sağlam ve hızlı kodlar yazmanız dileğiyle...  :)

Makale:
80x86 KOMUT SETİ (Bölüm 4) Assembly ve X86 Programlama Eren Erener
  • Yazılan Yorumlar
  • Yorum Yaz
TEM
11
2006
iyi günler dilerim benim aslında bu alanı kaplamam fuzuli ama Buraya yorum yazmış olan Tamer Abi ye ulaşmam gerek ve de başka yol yok sanbırım eğer kendisi bu maili görürse [email protected] a kendi mailini bildirsin lütfen
MAY
3
2006
Eline sağlık hocam sen bize bu işi öğreteceksin
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