folder Tahribat.com Forumları
linefolder Assembly - Reverse Engineering
linefolder Asm"De Ozyinelemeli Fonksiyon Tasarimina Ornek



Asm"De Ozyinelemeli Fonksiyon Tasarimina Ornek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    tasarlayacagimiz fonksiyon yalnizca parametre olarak aldigi onluk(decimal) sistemdeki sayiyi ekrana yazmaya yariyor.Tabiki burda fonksiyonun yaptigindan cok mantigi onemli cunku amac ogrenmek ;):)

    oncelikli olarak bu isi C programlama dilinde en basit haliyle nasil yapariz.

    printf("%d",Sayimiz);

    printf bu is icin yazilmis standart bi c metodu ve sayi, karakter, karakter katari vs gibi cesit cesit veriyi ekrana yazabiliyor.

    Ekrana bir sayi yazdirma isi c'de en basit haliyle asagidaki sekilde yapilabilir

    void dprint(int nm)

    {

     printf("%d",nm);

    }

     

    Ancak amac ozyinelemeli bir fonksiyon yazmak oldugu icin yukardaki fonksiyonu eledik.

    O yuzden hemen ozyinelemeli olarak yazilicak dprint fonksiyonunu tasarlayalim.Cunku daha assembly'e kadar inicez :)

    C'de bu sekilde bi fonksiyon tasarlamak icin putchar fonksiyonundan faydalanabiliriz

    putchar(int ch);

    putchar yalnizca bir karakteri ekrana basmak icin tasarlanmis standart c metodu

     Iste ozyinelemeli fonksiyomuz

    void dprint(int nm)
    {
        if(!nm)
            return;
        dprint(nm / 10);
        putchar(nm % 10 + '0');
    }

    fonksiyondaki

    if(!nm)    sorgusunun ne yaptigi son derece acik.(tabikide kendi kendini cagirma olayinin bi yerde bitmesi gerekiyor.Bu nokta, degiskenimizin 0 oldugu noktadir)

     

    Evet bu isi C'de yapmak bu kadar kolay :)

    simdide asm kodunu asagiya yaziyorum

     model small

    .data

    .stack

    .code

    main proc

    mov ax,@data    ;data segment
    mov ds,ax    ;ayarlandi

    mov ax,456    ;parametre
    push ax        ;birakildi
    call dprint

    mov ax,4C00h    ;dos icin cikis fonk kodu
    int 21h        ;kesme cagrildi

    main endp


    dprint proc

    push bp        ;bp stack'te saklaniyor
    mov bp,sp    ;bp sp ile kilitlendi
    mov ax,bp[4]    ;fonk parametresi ax'e alindi

    TEST ax,ax    ;0 kontrolu
    jz dprint@1    ;sifirsa cikisa zipla

    mov bl,10    ;bolunucek deger
    div bl        ;bolme islemi yapildi

    xor dh,dh    ;dh sifirlandi
    mov dl,ah    ;bolmeden kalan deger dl'ye alindi
    add dl,'0'    ;0 ascii kodu ile toplandi
    push dx        ;stack'e atildi

    xor ah,ah    ;ah sifirlandi
    push ax        ;parametre stack'e atildi
    call dprint    ;fonksiyon cagrildi

    pop dx        ;saklanan ve yazilacak deger cekildi
    mov ah,2    ;fonk kodu
    int 21h        ;kesme cagrildi karakter yazildi
    dprint@1:
    pop bp        ;bp eski degeriyle yuklendi
    ret 2        ;fonksiyondan donuldu

    dprint endp


    end main

     

    aslinda fonksiyonumuzn girisinde bp'yi stack'e atip saklamamizin bir anlami yok.Cunku bp'yi degistirmis olsakda programimizda kullanmiyoruz.Yinede standartlara uyum saglamak acisindan bunu yapmakta yarar var.En azindan el aliskanligi olsun :)

    Umarim yararli olmustur.


    ..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Allura
    Allura's avatar
    Kayıt Tarihi: 17/Mayıs/2009
    Erkek
    sitede asm bilen pek adam kalmadı teşekkürler emeye saygı olsun =)

    "
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    evet dogru soyluyosun ama bu durum yalnizca tahribatta degil,genelde de boyle..

    ama su bilinmeli ki asm dili yazilimin en temel dilidir ve bana kalirsa her programcinin asm dilini bilmesi gerekir.


    ..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Allura
    Allura's avatar
    Kayıt Tarihi: 17/Mayıs/2009
    Erkek
    bazıları öle düşünmüyor hatta vb gibi basit tabanlı dillerin en kral dil oldugunu savunan bile var

    "
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    bazi insanlar elindekiyle yetinemez.Her zaman daha fazlasini ister.

    bazilari elindekiyle yetinmesini bilir.

    diger bazilari ise elindekiyle yetinir ve ayni zamanda kendini mutlu edebilmek icin en iyisinin kendinde oldugunu savunur.:)

    Arkadaslar konu bilgisayar oldugunda elimizdekilerle yetinmeyelim ..!

    sosyal mesajida verdigimize gore yolumuza devam edebiliriz :)


    ..
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    duygusal_serseri
    duygusal_serseri's avatar
    Kayıt Tarihi: 15/Haziran/2009
    Erkek
    Eyvallah hoca,dökümanlara ekleriz artık bunu,ama nedense asm bende dahil çok soğuk geliyo insana,okulda asm dersini geçene kadar anam ağladıydı :)

    hani baharlarda sen gelecektin..
Toplam Hit: 3115 Toplam Mesaj: 6