Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: z - 23 Şubat 2011, 03:04:01

Başlık: Asm ornekteki gibi yapiyi C de kurabilirmiyiz?
Gönderen: z - 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()
{
   ....
   ....
}


           
Başlık: Ynt: Asm ornekteki gibi yapiyi C de kurabilirmiyiz?
Gönderen: RcALTIN - 23 Şubat 2011, 03:11:53
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...

Başlık: Ynt: Asm ornekteki gibi yapiyi C de kurabilirmiyiz?
Gönderen: tyildizak - 23 Şubat 2011, 08:56:03
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();
}