C.7.2. Satıriçi Birleştiricisinin Kullanılması
⚠
Uyarı
Kitabın bu kısmı
eski bilgiler içermektedir. Ancak, okuyucunun
yararına olabileceği düşünülerek aynen korunmuştur.
Microsoft C Derleyicisinin 8.00 uyarlamasını kullanıyorsanız, bir önceki kısımda anlatıldığı şekilde MASM gibi ayrı bir birleştirici kullanmanıza gerek kalmayabilir. Derleyici içine dahil edilmiş satıriçi birleştiricisini kullanabilirsiniz. Bu durumda, amaç dosyaların LINK işlemiyle de uğraşmanıza gerek kalmaz.
Satıriçi birleştiricisinin birçok avantajları vardır: tek bir kaynak dosya içinde hem C hem de birleştirici kodunu yazma; C değişmez, değişken, fonksiyon ve etiket isimlerine birleştirici kod içinden ulaşma; C deyimleri arasına istenilen yere birleştirici kodu ekleme gibi. Ancak, birleştirici kodun kullanılması taşınabilirlik sorunları ortaya çıkarabilir; bunun için birleştirici kodlarının, kaynak dosya içinde, ayrı bir yerde tutulması yararlı olur.
Satıriçi birleştiricisini kullanmak için bir C fonksiyonu içinde uygun yerlere
__asm {
…
}
şeklinde özel bir deyim kullanmanız gerekir. Örneğin
__asm { mov ah,2 mov dl,7 int 21h }
deyimi ekrana zil karakterinin yazılmasını sağlar.
Satıriçi birleştiricisinde birçok MASM ifadesi ve 80286 ile
80287 işlemci komutları kullanılabilir. İfadeler içinde kaynak dosyada
tanımlanmış C isimleri de kullanılabilir. Açıklamalar, normal olarak satırın
sonuna noktalı virgülün arkasına yazılır. Birleştirici kodu içinde
_emit
sözde komutu kullanılarak tek bir bayt tanımlanabilir.
Örneğin:
_emit 0x66 _emit 0x98
sözde komut sırası, satıriçi birleştiricisinin
anlamadığı, 80386 CWDE
komutunun yerine kullanılabilir.
Satıriçi birleştiricisi kodu içinde AX, BX, CX, DX, ES ve bayrak
yazmaçlarını istediğiniz gibi kullanabilirsiniz. Ancak, DI, SI, DS, SS, SP ve
BP yazmaçlarıyla (STD
ve CLD
komutuyla
değiştirilebilen) yön bayrağını eski halinde bırakmanız gerekir.