EYLÜL_PC_SHOP
Would you like to react to this message? Create an account in a few clicks or log in to continue.

EYLÜL_PC_SHOP

EYLÜL_PC_SHOP
 
AnasayfaAnasayfa  Latest imagesLatest images  AramaArama  Kayıt OlKayıt Ol  Giriş yapGiriş yap  

 

 Assembly dili ve mikroişlemciler

Aşağa gitmek 
YazarMesaj
Admin
Admin



Mesaj Sayısı : 99
Kayıt tarihi : 29/12/08

Assembly dili ve mikroişlemciler Empty
MesajKonu: Assembly dili ve mikroişlemciler   Assembly dili ve mikroişlemciler EmptyPerş. Ocak 01, 2009 8:05 pm

Esasında yaptığımız işin hexadecimal editör kullanımından hiçbir farkı yok. Debug ile Assembly dilini kullanarak .COM uzantılı dosyalar yapacağımızdan, bu tarz bir alıştırmanın kolay anlaşılır olacağı inancındayım. Aynı zamanda bir dosya biçeminin nasıl oluştuğu konusundaki soru işaretlerini silecek şekilde .BMP formatı üzerinde işlem yapacağız.

Öncelikle bitmap formatı üzerinde biraz beyin jimnastiği yapmak gerekli. Bitmap biçemi yada formatı, bildiğimiz MS Windows’un arka plan resimlerinin sahip olduğu formattır. ".bmp " veya "."dib" uzantılı olabilirler. MSDN (Microsoft Devolopers Network)’in içindeki Visual C++ programcıları için BMP biçemi hakkında bir açıklama mevcut. Bunun biz Assembly kullanıcıları için tercümesi ise şu şekilde.

Öncelikle gösterdiğim her x bir Bayt’ı (sekizli) temsil ediyor. Debug’a ise verileri, HexaDecimal yani 16’lık tabanda gireceğiz



BİTMAP DOSYA BAŞLIĞI (BITMAP FILE HEADER)

|xx| Dosya tipini tanımlar. BM olmalı
|xxxx| Dosya boyutunu tanımlar
|xx| Rezerve
|xx| Rezerve
|xxxx| Resmin başlangıç Offset adresi

BİTMAP BİLGİ BAŞLIĞI (BITMAP INFO HEADER)

|xxxx| info header uzunluğu
|xxxx| Genişlik
|xxxx| Yükseklik
|xx| Düzlem adeti : 1 olmalı
|xx| Resimin kaç bit olduğunu belli eder.
|xxxx| Sıkıştırma
|xxxx| Sıkıştırılmış ise resmin boyutu
|xxxx| Metre Başına Xdeki piksel miktarı (DPI Çözünürlük)
|xxxx| Metre Başına Ydeki piksel miktarı (DPI Çözünürlük)
|xxxx| Renk indexi kullanıldı mı?
|xxxx| Önemli renkler
Şimdide kağıt kalem alıp BMP dosyamızı oluşturalım:
İlk iki bayt, Bitmap’i temsil eden BM karakterleri olmalı yani onaltılık tabanda ;

0x42 0x4D
Dosya boyutunu en son yazmamız mantıklı olacak. Şimdilik onlar için 0x00 (NULL) koymakta faide var.

0x00 0x00
4 bayt ayrılmış, rezerve edilmiş veri var. Yani BMP dosya biçeminin ilerideki versiyonlarında bir işleve sahip olabilir ama şimdilik değil.

0x00 0x00
Şimdi resim verisinin hangi adresten başlıyacağını girelim. İpucu : Yukarıdaki tüm x leri sayarsak 54 yapar bunun onaltılık tabanda karşılığı 36’dır.

0x36 0x00 0x00 0x00
Bitmap Info Header uzunluğu için ise Bitmap Bilgi Başlığındaki x’leri saymalıyız. 40 adet yani 0x28.

0x28 0x00 0x00 0x00
Resmin pixel olarak genişliği 16 pixel.

0x10 0x00 0x00 0x00
Resmin pixel olarak yüksekliği 16 pixel.

0x10 0x00 0x00 0x00
Resim, kaç adet düzlem içeriyor. Veri 1 olmalı.

0x01 0x00
Resim kaç bit? 24 bitlik bir resim oluşturacağız. RGB formatında.

0x18 0x00
Resim herhangi bir sıkıştırma işlemine tabi olmayacağı için sıkıştırma verilerini 0 girebiliriz.

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Resmin X eksenindeki çözünürlüğü 72 DPI (Inch), metre için 2834 nokta: onaltılık B12.

0x12 0x0B 0x00 0x00
Resmin Y eksenindeki çözünürlüğü.

0x12 0x0B 0x00 0x00
Renk indeksi ve önemli renk kullanmayacağımız için bunlar da 0 olmalı.

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
24 bit RGB resimler
Eğer bir yağlı boya resim yapıyorsanız, ana renklerin karışımından oluşan bir çok renk kullanıyorsunuzdur. Sarı ile kırmızıyı karıştırdığınıza kavun içi elde edersiniz. Sarı ile maviyi karıştırdığınız da ise yeşil’i elde edersiniz. Fizikte ise resimde kullanılandan farklı üç adet ana renk bulunur; Kırmızı-Mavi-Yeşil. Bu ana renklerin kullanıldığı kodlamaya ise RGB kodlama denir. (RGB : ingilizce Red-Green-Blue (Kırmızı-Mavi-Yeşil) kelimelerinin baş harfleridir.) CRT (Cathode Ray Tubes), katod ışınlı tüpler, başka bir değişle bilgisayar monitörleri, TV monitörleri bu mantık ile çalışır. Şimdi her ana rengin yalnızca 1 ara değer aldığı bir renk tuvali yapalım. Örneğin karanlık bir odada 3 adet lambamız var. Bunlardan biri kırmızı ışık veriyor, diğeri yeşil, ötekisi ise mavi. Kırmızıyı söndürüp diğerlerini yaktığımızda ortamda hakim olan renk.; cyan dediğimiz açık maviye benzer bir renkdir. Maviyi söndürüp diğerlerini yaktığımızda ise oluşacak renk ; magenta dediğimiz pembeye yakın bir renkdir. Bu şekilde 23 = 8 adet farklı renk tanımlayabiliriz. Hepsini yaktığımızda ise ortamda beyaz renk hakim olacaktır. Kımızı ışığı bir lamba ile ifade ettik, lamba açık veya kapalı olabilir. Yani 1 veya 0’lık bir önerme. Kısacası 1 bit ile göstemiş olduk. Toplamda ise 3 bit bir kodlama yapmış olduk. Lambaların açık veya kapalı oldukları durumlar şöyle olabilir;
000-001-010-011-100-101-110-111
Bu şekilde 8 farklı renk oluşturabiliriz. Peki her ana renk için 8 lambamız olduğunu varsayalım yani toplamda 24 lamba, 28 = 256 adet farklı kırmızı renk olabilir manasına gelir. 256x256x256 = 28 = 16.7 milyon renk üretmiş oluruz. işte 24 bit kodlama bu demektir. Web programcılığı ile uğraşmış olanlar bilirler orada renkleri ifade etmek için böyle bir kodlama kullanılır. Mesela beyaz renk "#FFFFFF"dir. FF onaltılık değeri 255 değerine karşılık gelir. "#FFFFFF"in manası 24 lambanın da açık olması demektir. Bu da beyaz rengi oluşturur.

Resim matrisi
Şimdi yapacağımız resim için bir resim matrisi oluşturacağız. Ama BMP formatında bu resimi kullandığımızda yani dosyaya yazarken baş-aşağı bir şekilde yazmak zorundayız.



Dosya boyutu hesaplama
Genelde resim matrisi .BMP dosyasına aktarılırken her satırın sonuna belli miktarda NULL yani onaltılık 0x00 konulur. Bunu formülleştirirsek; resim genişliğinin Mod 4’ü kadardır. Yani 16 pixel resim genişliği olan bir resimin satırlarının sonuna hiçbir NULL ifadesi konulmazken, 17 pixel olunca 1 adet NULL, 19 pixelde ise 3 adet NULL koyulur. isterseniz Photoshop benzeri bir programla yaptığınız resimleri, bir hexadecimal editör yardımıyla inceleyebilirsiniz. Dosya sonuna ise veri girişinin bittiğini göstermek için 2 adet NULL koyulur. O zaman dosya boyutumuz 54 + (16 * 3 * 16) + 2 = 824 bayt kadar olur.
Sayfa başına dön Aşağa gitmek
http://fetle.yetkinforum.com
 
Assembly dili ve mikroişlemciler
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Assembly dili ve mikroişlemciler
» Assembly Programlama Dili
» Assembly Nedir?
» Assembly bize ne sağlar
» Neden assembly kullanmalıyız ?

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
EYLÜL_PC_SHOP :: Programlama :: Assembly-
Buraya geçin: