TEKNOLOJİ FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ

Slides:



Advertisements
Benzer bir sunumlar
X86 Assembly Programlama Dilinde
Advertisements

Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Karar Verme: Eşitlik ve Karşılaştırma Operatörleri
Değişkenler ve bellek Değişkenler
OPERATÖRLER Programlama dillerinde tanımlanmış sabit ve değişkenler üzerinde işlemler yapmayı sağlayan karakter ya da karakter topluluklarına operatör.
TEMEL C PROGRAMLAMA DERSİ - 1
Zeynep Çelik Sunar….
Programlama-II (Java ile Bilgisayar Programlama)
C PROGRAMLAMA DİLİNE GİRİŞ
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
Atama ve Girdi/Çıktı Komutları
Numbers of Opcodes Nihal Güngör.
Bölüm 2: Program Denetimi
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
C++ STACK SINIFI.
Bölüm 10 Yapılar ve Birleşimler
Programlar Sabit diskte saklanır Sabit diskten veri okumak çok yava ş oldu ğ u için programlar çalı ş tırılmadan önce RAM’e yüklenir.
Operatörler.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Fonksiyonlar.
Değişkenler veri tipleri operatörler
NESNE TABANLI PROGRAMLAMA -METOTLAR-
METODLAR Canan Işıl. 1 İçindekiler Açıklamalar, Örnekler, Sorularınız? Kaynakça, Teşekkürler..
Bilgisayar Programlama
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Bilgisayar Organizasyonu
C ile Programlamaya Giriş
FONKSİYONLAR.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
SECURITY, AUDIT & CONTROL OF INFORMATION SYSTEMS CONFERENCE 2007 Smart Valley Alt Seviye Programlama Hatalarından Kaynaklanan Güvenlik Zaafiyetleri ve.
JAVA’DA DİZİLER Dr.Galip AYDIN.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
C# Veri Tipleri ve Değişkenler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Bilgisayar programlarının en büyük avantajı, kullanıcının işini kolaylaştırmalarıdır. Her bilgisayar programı bunu değişik metotlar kullanarak sağlar.
Görsel C# ile Windows Programlama
8086 Programlama – Kısım III Prosedürler
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
ENDÜSTRİYEL GÖMÜLÜ BİLGİSAYAR SİSTEMLERİ
Amaçlar Assembly dilinin genel özelliklerini tanımak
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Dili Çağdaş Hakan Aladağ.
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
8086 Programlama – Kısım IV Stack’ler, Makro’lar
8086 Programlama – Kısım III Prosedürler
DİL ÇEVRİMİ Yüksek düzeyli bir dilde yazılmış bir program ancak makine diline çevrilerek bir bilgisayarda çalıştırılabilir.
Mikroişlemciler Adresleme Modları.
Bilgisayar Donanım ve Sistem Yazılımı
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
Bölüm 2 C Dilinin Temelleri
ACTIONSCRIPT TEMELLER İ SAVAŞ TUNÇER
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Veri Tipleri 12/4/2018.
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
Bilgisayar Mühendisliğine Giriş
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
Bir Döngünün Bölümleri (hatırlatıcı)
C ile Programlamaya Giriş
Sunum transkripti:

TEKNOLOJİ FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ KARABÜK ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ MTM 305 MİKROİŞLEMCİLER Arş. Gör. Emel SOYLU Arş. Gör. Kadriye ÖZ

C Dili İçinde Assembly Kullanımı

C/C++ kodu içinde assembly kod yazma C dili içinde assembly dili programa hız kazandırmak için sıklıkla kullanılan bir yöntemdir. Asm kelimesini kullanarak C/C++ program satırları arasına assembly kodları yerleştirebiliriz ve C/C++ değişkenleri ile değerleri gösterebiliriz.

Avantajları Assembly dilinde fonksiyonları yazma. Hız kritik bölümlerin optimize edilmesi. Aygıt sürücüleri için doğrudan donanım erişimi.

Microsoft Inline Assembly: C dili içerisinde Assembly dili birkaç farklı şekilde kullanılabilmektedir. C kaynak kodu içerisinde herhangi bir yerde asm ifadesi ile assembly kodları kullanılabilir. Kullanım şekli şöyledir. __asm <komut> <operand> <; veya yeni satır> __asm mov al, 01H __asm mov bl, 02H __asm add al, bl  

Bu kullanım şeklinde assembly programını oluşturan tüm komut satırlarının başına asm ifadesini yazmak gereklidir. Ama daha kolay bir yolu vardır. Asm bloğu oluşturmak. __asm { mov al, 01H mov bl, 02H add al, bl } __asm bir deyim ayracı olduğunda, assembly kodları aynı satırda da kullanılabilir: __asm mov al, 2 __asm mov dx, 0xD007

__asm Blocklarında Değişken Kullanımı int joe=1234, fred; __asm { mov eax,joe ; eax = joe; add eax,2 ; eax += 2; mov fred,eax ; fred = eax }; return fred;

__asm Blocklarında Operator Kullanımı int array[10]; __asm mov array[6], bx ; Store BX at array+6 (not scaled) array[6] = 0; /* Store 0 at array+24 (scaled) */ Diziye ilk referans ölçekli, ancak ikincisi değildir. Eğer bir sabite dayalı ölçeklemeye ulaşmak istiyorsak TYPE operatörünü kullanabiliriz. Örneğin, aşağıdaki ifadeler eşdeğerdir: __asm mov array[6 * TYPE int], 0 ; Store 0 at array + 24

Assembler Fonksiyonu Yazma ; POWER.ASM ; Compute the power of an integer ; PUBLIC _power2 _TEXT SEGMENT WORD PUBLIC 'CODE' _power2 PROC push ebp ; Save EBP mov ebp, esp ; Move ESP into EBP so we can ; refer to arguments on the stack mov eax, [ebp+4] ; Get first argument mov ecx, [ebp+6] ; Get second argument shl eax, cl ; EAX = EAX * ( 2 ^ CL ) pop ebp ; Restore EBP ret ; Return with sum in EAX _power2 ENDP _TEXT ENDS END // Power2_inline_asm.c // compile with: /EHsc // processor: x86 #include <stdio.h> int power2( int num, int power ); int main( void ) { printf_s( "3 times 2 to the power of 5 is %d\n", \ power2( 3, 5) ); } int power2( int num, int power ) __asm mov eax, num ; Get first argument mov ecx, power ; Get second argument shl eax, cl ; EAX = EAX * ( 2 to the power of CL ) // Return with result in EAX

GCC Inline Assembly:

Kod İçi Assembly Yazım Kuralları Değişken adlandırma: Değişkenler %,öneki ile başlar. Örneğin eax ve ecx kaydedicileri %eax, %ecx şeklinde kullanılır. Operandların kullanımı: Intelden farklı olarak ilk operand kaynak ikinci operand hedeftir. Örneğin Intelde "mov eax, edx" c içinde kullanırken "mov %edx, %eax" şeklinde olacaktır. Operand büyüklüğü: Operandın büyüklüğü opcodun sonuna yazılan harf ile anlaşılmaktadır. “b” (8-bit) byte için,”w” (16-bit) word için,”l” (32-bit) doubleword için. Örneğin "movl %edx, %eax“.

Kod İçi Assembly Yazım Kuralları Acil Operand: Acil operandların önüne “$” öneki gelir. Örneğin "addl $5, %eax", acil doubleword sayı ile eax’i topla Hafıza operandları: Eksik operand öneki, bir bellek adresi olduğunu gösterir. Örneğin “movl $bar, %ebx” %ebx içine değişkeninin adersini yerleştirirken, “movl bar, %ebx” %ebx ‘e değişkenin değerini yükler. Indisleme: Indisleme parantezler kullanılarak yapılır. Örneğin, "movl 8(%ebp), %eax" (%ebp+8 adresi ile işaret edilen içeriği %eax’e taşır.). Tüm kodlar için, Intel x86 işlemciler üzerinde çalışıyor olacak. This information is necessary since all instructions may or may not work with other processors.

Temel kod içi programlama C içinde iki farklı şekilde assembly kullanılabilir. asm("assembly code"); ya da __asm__ ("assembly code"); Örnek: asm("movl %ebx, %eax"); /* eax =ebx */ __asm__("movb %ch, (%ebx)"); /* ch’ın değerini (byte ) ebx’in gösterdiği belleğe taşır */

Birden fazla Assembly komut satırı kullanılacaksa ,her birinin sonunda noktalı virgül konulur. #include <stdio.h> int main() { /*10 ve 20 toplanır, sonuç %eax kaydedicisinde saklanır. */ __asm__ ( "movl $10, %eax;" "movl $20, %ebx;" "addl %ebx, %eax;" ); /* 20, 10dan çıkarılır ve sonuç %eax kaydedicisinde saklanır. */ "subl %ebx, %eax;" /* 10 ile 20 çarpılır ve sonuç %eax kaydedicisinde saklanır. */ "imull %ebx, %eax;" return 0 ; }

Genişletilmiş Assembly Genişletilmiş assembly, biz de operand belirtebiliriz. Bu bize giriş kaydedicilerini, çıkış kaydedicilerini ve değeri değişen kaydedicilerin bir listesini belirlemenizi sağlar. asm ( "assembly code" : cıkış operandları /* seçimlik*/ : giriş operandları /* seçimlik */ : overwrite edilen operandların listesi /* seçimlik */ ); Örnek asm ("movl %%eax, %0;" : "=r" ( val )); In extended assembly, we can also specify the operands. It allows us to specify the input registers, output registers and a list of clobbered registers.

Örnek: int no = 100, val ; asm ("movl %1, %%ebx;" "movl %%ebx, %0;" : "=r" ( val ) /* çıktı */ : "r" ( no ) /* girdi*/ : "%ebx" /* overwrite */ ); Yukarıdaki örnekte, çıkış işleneni "val“ % 0 ile anılır, giriş işlenen “no“ % 1 ile anılır. “r" operantlar için bir kısıtlamadır, böylece GCC herhangi bir kaydediciyi kullanabilir. In the above example, "val" is the output operand, referred to by %0 and "no" is the input operand, referred to by%1. "r" is a constraint on the operands, which says to GCC to use any register for storing the operands.

Beni dinlediğiniz için teşekkür ederim.