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.