Satıriçi Sembolik Makina Dili
Önceki Linux için Satıriçi Sembolik Makina Dili (Inline Assembly) Sonraki
Satıriçi Sembolik Makina Dili
GCC Satıriçi Sembolik Makina Dili için aşağıda gösterilen özel "asm" yapısını kullanır:
GCC'nin "asm" yapısı
    asm (
        assembler şablonu
        : çıktı terimleri                         (isteğe bağlı)
        : girdi terimleri                         (isteğe bağlı)
        : geri dönen yazmaçlar                    (isteğe bağlı)
        );
Bu örnekte sembolik makina dili şablonu sembolik makina dili komutlarından ibarettir. Girdi terimleri, girdi terimleri gibi çalışan C deyimleridir. Çıktı terimleri sembolik makina dili komutlarının çıktılarının uygulanacağı C deyimleridir.
Satıriçi Sembolik Makina Dili yönetim yeteneği ve çıktılarını C değişkenleri ile görülebilir kılması ile birinci dereceden önem kazanır. Yeteneği sayesinde "asm" sembolik makina dili komutları ile onları içeren C programı arasında bir arayüz niteliğindedir.
Aralarındaki temel ve önemli fark Temel Satıriçi Sembolik Makina Dili komutlardan, İleri Sembolik Makina Dili terimlerden ibarettir. Örneklendirme için aşağıdaki örneğe bakın:
Örnek 10.1. Satıriçi Sembolik Makina Dili temel yapısı
{
        int a=10, b;
        asm ("movl %1, %%eax;
              movl %%eax, %0;"
                :"=r"(b)        /* çıktı */
                :"r"(a)         /* girdi */
                :"%eax");       /* geri dönen yazmaç */
}
Örneğimizde Sembolik Makina Dili komutları ile b'nin değerini a'ya eşitledik. Aşağıdaki noktaları not edin.
  • b çıktı terimidir, %0 ile gösterilmiştir ve a girdi terimidir, %1 işe gösterilmiştir.
  • r, a ve b'nin yazmaçlarda kalmasını sağlayan belirteçtir. Şu unutulmamalıdır ki çıktı teriminin belirtecinin her zaman = ile çıktı terimi olduğu belirtilmelidir.
  • "asm" yapısı içinde %eax yazmacını kullanmak için bir tane daha % kullanılmalıdır, diğer bir deyişle %%eax, "asm" %0 %1 vb. değişkenleri tanımlamak için kullanır. Tek %'li herşey girdi/çıktı terimi olarak muamele görür.
  • Geri dönen yazmaç, %eax, üçüncü iki noktanın sonunda GCC'ye %eax'in "asm" içinde değiştirildiğini söyler, bundan dolayı GCC diğer değerleri tutmak için %eax'i kullanmayacaktır.
  • movl %1, %%eax, a'nın değerini %eax'e taşır ve movl %%eax,%0, %eax'in değerini b'ye taşır.
  • "asm" yapısının çalıştırılması bitince b çıktı terimi, güncellenmiş değeri yansıtacaktır. Yani b'nin "asm" içindeki değişikliklerinin "asm" dışına da yansıması beklenir.
Şimdi bu maddeleri biraz daha ayrıntılı olarak inceleyelim.
Önceki Üst Ana Başlık Sonraki
Kısaca GNU Assembler sözdizimi Başlangıç Sembolik Makina Dili Şablonu
Bir Linux Kitaplığı Sayfası