Browsing the blog archives for October, 2008.

Assembly ile PGM Dosyasında Kontrast Ayarı

Açık Kaynak, Kategorilenmemiş, Programlama, Uzun Kod İçerikli, ytulinux

Evet arkadaşlar birkaç hafta önce Gnu Assembler ile yapmış olduğum görüntü işleme ödevimi buraya atıyorum. Öncelikle Gnu Assembler için tanımlama/açıklama tarzı birşey yazmam sanırım konuyu açıklığa kavuşturmak açısından iyi olacaktır.

Gnu Assembler, gcc nin de kullandığı, daha çok unix türevi işletim sistemlerinde kullanılan assemblerdır. Terminalden as komutu ile erişilebilir. Yazmış olduğunuz Gnu Assembler imlasına uygun programı derlemek için, önce
as program.s -o program.o
veya gdb ile debug etmek istiyorsanız
as -gstabs program.s -o program.o
diyerek object dosyasına çevirip, sonra da
ld program.o -o program.out
Komutuyla çalıştırılabilir hale çevirebilirsiniz.
Gnu Assembler imlasına gelince, öncelikle default olarak 32 bit mantığına göre yazmamız gerekiyor. Yani 8086 assemblerlarda alıştığımız ax, bx yerine eax, ebx kullanıyoruz ki bunlar dört baytlık hafıza büyüklüğüne sahip. Tabi bu ax, bx ya da bl, ah gibi küçük kısımları kullanamayacağımız anlamına gelmiyor. Örneğin
movl %eax,8(%esp)

evet yazmaçlardan önce yüzde işareti, adres göstermek için parantez kullanılır. esp nin başındaki 8 ise esp+8 anlamına gelir(bu arada esp bizim stack pointerımız, yani sp). l ise long tipi işlem olduğunu belirtir. Sağdaki sola değil,soldaki sağa atanır. (hızlı bir özet oldu, hiç assembler bilmeyene gnu assembler anlatmak değil zaten niyetim, daha önce 8086 masm veya nasm kullananlara yönelik, yoksa bu açıklama uzar gider)

Continue Reading »

Bu yazı toplamda 2486, bugün ise 1 kez görüntülenmiş

6 Comments

Gdb kullanımı üzerine

Açık Kaynak, Programlama, tutorial, ytulinux

Gdb, gnu debuggerın kısaltılmış halidir. Linux ve unix türevi çeşitli işletim sistemlerinde karşılaşabileceğiniz bu debugger ile, assembly ve c ile yazılmış programlarınızı debug edebilirsiniz. Debug işlemini yapmanız için öncelikle gcc veya as ye -gstabs parametresini vermeniz gerekiyor, böylece derleyicimiz veya assemblerımız programa ait kodları da derlenmiş hale ekliyor. Assembler ile yazılmış bir program için

as cevir.s -o cevir.o -gstabs
ld cevir.o -o cevir.out

C ile yazılmış bir program için

gcc hede.c -o hedehodo.out -gstabs

şeklinde.

Artık programlarımızı debug edebiliriz.

gdb hedehodo.out yazıp, bu komutu çalıştırmamızla debug konsoluna düşeriz. l komutu ile kodları listeleyebiliriz, l komutunu çalıştırırsak sıradan kodları listelemeye başlar (şu eski commodore lardaki list komutu gibi) l 100 dediğimizde ise 100 den başlayarak belli bir kısmı listeler.

Debuggerda amacımız, hatanın nereden kaynaklandığını araştırmak. Öncelikle bir tahminimiz olmalı. “ülen kesin burada patlıyo bu” şeklinde bir tahminle başlamak bizim açımızdan daha mantıklı olacaktır. Sonraki adımda ise, öne sürdüğümüz bu teze neden olan etkenleri denetlemek için programın nerelerde durması gerektiğini düşünmek. Örneğin sıfıra bölme hatamız var, sıfıra bölmeyi yaptığımız yer belli, hatayı burada arıyoruz. O zaman bölen değişkenimizi nerede atadığımızı ve bu atamaya neden olan diğer değişkenlerin nerelerde atandığını araştırmamız lazım. İşin teorik boyutunu geçtikten sonra, gdb de bunu nasıl yapacağımızı öğrenelim.

Continue Reading »

Bu yazı toplamda 3193, bugün ise 0 kez görüntülenmiş

11 Comments

Site Açılışı Münasebetiyle Günün Anlam ve Önemini Belirten Konuşma

Kategorilenmemiş

Ne yazayım şimdi ya :) Açtım işte :)

Bu yazı toplamda 2237, bugün ise 0 kez görüntülenmiş

16 Comments