|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir
Would you like to react to this message? Create an account in a few clicks or log in to continue.

|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir


 
AnasayfaLatest imagesAramaKayıt OlGiriş yap

 

 Assembly Dili Ve Mikroişlemciler -2

Aşağa gitmek 
YazarMesaj
FaTaL
Yönetici
Yönetici
FaTaL


Ruh Hali : Assembly Dili Ve Mikroişlemciler -2 Manyak10
Başak Mesaj Sayısı : 626
Rep Puanı : 12268
Teşekkür Aldı : 18
Kayıt tarihi : 24/10/09
Nerden Nerden : Kocaeli
İş/Hobiler İş/Hobiler : 3D / Maya / After Efect
Lakap Lakap : Fatal

Assembly Dili Ve Mikroişlemciler -2 Empty
MesajKonu: Assembly Dili Ve Mikroişlemciler -2   Assembly Dili Ve Mikroişlemciler -2 EmptyCuma Ekim 30, 2009 9:16 am

Debug ile mutluluğun resmi

Eski DOStumuz Debug’ın on parmağında on marifet var. Assembler,
Disassembler, debugger, hexadecimal editör olmasının yanında şimdi de
farklı bir kullanımı ile tanışacağız. Debug’ı sanat icra etmekde
kullanacağız. Assembly Dili Ve Mikroişlemciler -2 7

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.
Debug kullanımı

Debug’ı başlatmak için MS-DOS Komut istemini açıp debug yazıyoruz

Assembly Dili Ve Mikroişlemciler -2 10yf3

Şimdi oluşturacağımız dosyanın adını giriyoruz. n (NAME) komutundan sonra yeni dosyanın adını giriyoruz

Assembly Dili Ve Mikroişlemciler -2 20uj

3. adım olarak RAM’in 0000h offsetine dosyamızın içeriğini girmeye
başlıyalım. Her girdiğimiz onaltılık adresten sonra space tuşuna basıp
bir sonraki karaktere geçebiliriz. İşlemi bitirmek için ise enter
tuşuna basmak yeterli olacaktır. BMP dosyasını ilk bayttan itibaren
giriyoruz. İlk bayttan B (0x42) daha sonraki M(0x4D).. ve böyle devam
etmekte.e (ENTER) yazıp daha sonra da yazılacak hafıza adresini
girmeliyiz.

Assembly Dili Ve Mikroişlemciler -2 35kz

"B" harfini girip space tuşuna basıyoruz

Assembly Dili Ve Mikroişlemciler -2 41nd

Tüm bilgi üst başlıklarını girip, daha sonra da resim matrisini ters
olarak giriyoruz. Buradaki mavi renk için kullandığımız onaltılık değer
"0080C0". Gri renk için ise "CCCCCC" dir.

Assembly Dili Ve Mikroişlemciler -2 58yf

Daha önce hesapladığımız gibi bütün üst bilgi başlıklarını girdik ve
imleç 36h adresine kadar geldi. Şimdi devam edip resim matrisini ters
olarak girmeliyiz. sol alt köşeden başlayıp sağ üst köşeden
bitireceğiz. RGB formatındaki renkleri ise ters girmeliyiz yani BGR
şeklinde. Bu takdirde Gri renk "CCCCCC", mavi renk ise "C08000"
olmalıdır. Ilk satır için girilen veriler;

Assembly Dili Ve Mikroişlemciler -2 62ls

Tüm verileri girdikten sonra mikroişlemcinin cx registerine 338 yazmamız gerekir. Bu dosya boyutunun onaltılık karşılığıdır.

Assembly Dili Ve Mikroişlemciler -2 72lq

Şimdi dosyamızı sıfırıncı offsetten itibaren yazdırıp debugdan çıkabiliriz

Assembly Dili Ve Mikroişlemciler -2 82lq

Alıntıdır.
Sayfa başına dön Aşağa gitmek
http://www.refleksforum.com
 
Assembly Dili Ve Mikroişlemciler -2
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Assembly Dili Ve Mikroişlemciler
» Assembly Programlama Dili
» Assembly Nedir?
» Assembly Giriş
» Assembly Giriş-2

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir :: Bilgisayar Dersleri :: Assembly-
Buraya geçin: