Standart C Programlama Dili


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.