Asm ornekteki gibi yapiyi C de kurabilirmiyiz?

Başlatan bunalmis, 23 Şubat 2011, 03:04:01

z

Asagida asm ile yazilmis Funk1 ve Funk2 labelleri iceren 2 fonksiyon goruyoruz.

Fonk1 cagrilirsa, ilgili kodlari ardindan Funk2 isletiliyor.
Istersek sadece Fonk2 cagrilabiliyor.

Fonk1:  ......
Fonk2:  ......
             ......
             ret

C yazimda ise fonk1 icinden fonk2 ye gitmek icin mecburen  call  kodu isletilecek, Fonk2 deki ret ile geri Fonk1e donulup buradaki ret ile de cagrilan yere donulecek.
Asm ornekteki sadeligi (sadece eksik 2 makina kodlu yazimi) C'de de elde etmenin yolu varmi?

void fonk1()
{
    .....
    fonk2();
}

void fonk2()
{
   ....
   ....
}


           
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RcALTIN

switch içindeki case bloklarında bahsettiğiniz gibi bir durum olabiliyor, ama metodlar düzeyinde ben ne gördüm ne de duydum... Belki de derleyici alttaki şekilde kullanırsanız da onu asm'ye çevirirken belirttiğiniz gibi derliyor olabilir; denediyseniz bilemem...

KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

tyildizak

Alıntı yapılan: bunalmis - 23 Şubat 2011, 03:04:01
Asagida asm ile yazilmis Funk1 ve Funk2 labelleri iceren 2 fonksiyon goruyoruz.

Fonk1 cagrilirsa, ilgili kodlari ardindan Funk2 isletiliyor.
Istersek sadece Fonk2 cagrilabiliyor.

Fonk1:  ......
Fonk2:  ......
             ......
             ret

C yazimda ise fonk1 icinden fonk2 ye gitmek icin mecburen  call  kodu isletilecek, Fonk2 deki ret ile geri Fonk1e donulup buradaki ret ile de cagrilan yere donulecek.
Asm ornekteki sadeligi (sadece eksik 2 makina kodlu yazimi) C'de de elde etmenin yolu varmi?

void fonk1()
{
    .....
    fonk2();
}

void fonk2()
{
   ....
   ....
}


           

Öncelikle  "void fonk2()"  "void fonk1()"den önce yazılmalı.

1 bit flag değişkeni kullanılarak fonk1 çağrılırken bu flag set edilirse fonk2  işletilsin şeklinde bir çözüm kullanılabilir:



void fonk1()
{
    .....
   if(flag)  fonk2();
}