1 BM-311 Bilgisayar Mimarisi Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Operand türleri Assembly dili
2 İşlemcinin yapacağı iş makine komutlarıyla belirlenir. İşlemcinin tüm komutlarına komut kümesi (instruction set) denir. Makine komutunun bileşenleri Operation code: kısaca opcode olarak adlandırılır ve gerçekleştirilecek işlemi belirler. Source operand(s): Gerçekleştirilecek işlem için girişleri belirler. Result operand(s): İşlem sonucu oluşan sonucu gösterir. Next instruction: Şimdiki instruction dan sonra hangi instruction a geçileceğini belirler. Source ve result operand lar aşağıdakilerden birisi olabilir: Memory: hafızada bir adres referans gösterilebilir. CPU register: CPU içindeki register lar referans gösterilebilir. I/O device: Bir I/O cihazı referans olarak gösterilebilir.
3 Komut gösterimi Bir komut farklı alanlardan oluşur. ADD R, Y Bir çok komut kümesi birden fazla farklı formata sahiptir. Kısaltmalar kullanılarak opcode ların ifade edilmesi mnemonics olarak adlandırılır. ADD Add SUB Subtract MPY Multiply DIV Divide LOAD Load data from memory STOR Store data to memory Komut türleri Data processing: Aritmetik ve mantık komutlar Data storage: Hafıza işlemleri Data movement: I/O komutları Kontrol: Test ve atlama komutları
4 Adres sayısı Aritmetik ve mantık komutlar daha çok adrese ihtiyaç duyar. 0, 1, 2 ve 3 operandlı komutlar kullanılabilir. Farklı operand sayıları için işlemler görülmektedir. Adres sayısı Sembolik gösterim İşlem 3 OP A, B, C A B OP C 2 OP A, B A A OP B 1 OP A AC AC OP A 0 OP T (T - 1) OP T Adres sayısı - devam Aritmetik ve mantık komutlar daha çok adrese ihtiyaç duyar. 0, 1, 2 ve 3 operandlı komutlar kullanılabilir. Y = (A - B) / (C + (D x E)) işlemi 3, 2, 1 ve 0 operandla gerçekleştirilebilir. 3 operand Komut Açıklama SUB Y, A, B Y A B MPY T, D, E T D x E ADD T, T, C T T + C DIV Y, Y, T Y Y / T
5 Adres sayısı - devam Y = (A - B) / (C + (D x E)) 2 operand Komut Açıklama MOVE Y, A Y A SUB Y, B Y Y - B MOVE T, D T D MPY T, E T T x E ADD T, C T T + C DIV Y, T Y Y / T Adres sayısı - devam Y = (A - B) / (C + (D x E)) 1 operand Komut Açıklama LOAD D AC D MPY E AC AC x E ADD C AC AC + C STOR Y Y AC LOAD A AC A SUB B AC AC - B DIV Y AC AC / Y STOR Y Y AC
6 Y = (A - B) / (C + (D x E)) 0 operand Komut Açıklama PUSH A T A PUSH B T B, (T - 1) A SUB (T) (T - 1) T PUSH D T D PUSH E T E MPY (T) (T - 1) * T PUSH C T C ADD (T) (T - 1) + T DIV (T) (T - 1) / T POP Y Y T Adres sayısı - değerlendirme Adres arttıkça Daha karmaşık (güçlü) komutlar. Operandlar register adresleme yapıyorsa daha çok register Programlarda daha az sayıda komut Adres azaldıkça Daha basit komutlar Programlarda daha çok sayıda komut Komutların daha hızlı fetch / execution yapılması
7 Komut kümesi tasarımı Operation repertoire: Kaç tane ve hangi işlemlerin yapılacağını belirler. Data types: Komutların işlem yapacağı veri türlerini belirler. Instruction format: Komut boyutu (bit), adres sayısı, field boyutunu belirler. Registers: Komutların kullanacağı CPU register larını belirler. Addressing: Komutlardaki operand ların adresleme modlarını belirler. Konular Operand türleri Assembly dili
8 Operand türleri Temel operand türleri aşağıdaki gibidir: Adresler: Adresleme modlarıyla operand adresleri belirlenir. Sayılar: Integer veya fixed point, floating point, decimal olabilir. Karakterler: ASCII (American Standart Code for Information Interchange) (Her karakter 7-bit, 128 karakter, 8.bit parity bit), EBCDIC (Extended Binary Coded Decimal Interchange Code) (8-bit kod kullanır) Mantıksal data: Data 1-bit 0 veya 1 lerle ifade edilir. Konular Operand türleri Assembly dili
9 Temel işlem türleri aşağıdaki gibidir: Data transfer: Veri aktarım komutları kullanılır (Load, Store). Arithmetic: Aritmetik mantık komutlar kullanılır (Add, Sub). Logical: Mantıksal işlem komutları kullanılır (And, Or, ). Conversion: Formatlar arasında dönüştürme yapan komutlar kullanılır (Translate, Convert, ) Input / Output: Giriş/çıkış cihazlarıyla veri alışverişi yapan komutlar kullanılır (Input, Output, ). System control: İşletim sistemi fonksiyonları kullanılır (multiprogramming system, control register, ). Transfer of control: Şartlı ve şartsız atlama komutları kullanılır (Jump, Branch, ).
10
11 Data transfer Data transfer komutları kaynak ve hedef operandları belirler. Aktarılacak verinin boyutu belirlenir. Operandların adresleme modları belirlenir. Kaynak ve operandlar register ise CPU register lar arasında veri aktarımı yapar. Eğer 1 veya 2 operand hafızada ise adresleme moduna göre adres hesaplanır. Hesaplanan adres değerine göre cache belleğe önce bakılır, yoksa hafızadan alınır.
12 Arithmetic Çoğu makine temel aritmetik işlemleri sağlar (add, subtract, multiply, divide). Diğer aritmetik işlemler ise aşağıdakiler olabilir: Absolute: Operand ın mutlak değeri alınır. Negate: Operand ın işareti terslenir. Increment: Operand a 1 eklenir. Decrement: Operand dan 1 çıkartılır. Logical Boolean işlemlerine göre operanlara mantıksal işlemler (OR, AND, XOR, NOT) uygulanır. Aşağıdaki AND ve XOR işlemler verilmiştir. (R1) = 10100101 (R2) = 00001111 (R1) AND (R2) = 00000101 (R1) = 10100101 (R2) = 11111111 (R1) XOR (R2) = 01011010
13 Logical - devam Logical - devam Bitwise logical işlemlerin yanında bir çok makinede shift ve rotate işlemleride yapılabilir.
14 Conversion Bir formattan diğer formata dönüştürme işlemi yapılır. Aşağıdaki komut R1 formatından R2 formatına L adet dönüştürme yapar. TR R1, R2, L R1 adresinden başlar L tane adresin içeriğini R2 adresindeki tablodaki değerle değiştirir. Input / Output I/O cihazlarından veri almak veya I/O cihazlarına veri yazmak için kullanılan komutlardır. Okunan veri hafızaya veya register a yazılabilir. System Control İşletim sistemi tarafından kullanılan komutlardır. Multiprogramming veya control register larına erişim yapılabilir. (x86 için CR0, CR1,, AMD için Extended Feature Enable Register (EFER)) Yapılan işlemler, global olarak memory cache aktif/pasif, global olarak write-back/write-through aktif/pasif,
15 Transfer of Control Programlar çalışırken her zaman komutlar sıralı çalışmazlar. Programların çalışma akışını değiştiren komutlardır. Bir çok makinede branch, skip ve procedure call komutları bulunmaktadır. Branch komutları, şartlı (conditional) veya şartsız (unconditional) atlama yapar. Son yapılan aritmetik işlemin (add, sub, div,..) sonucuna göre aşağıdaki örneklerdeki atlamalar yapılabilir: BRP X ; Sonuç pozitifse X adresine atla BRN X ; Sonuç negatifse X adresine atla BRZ X ; Sonuç sıfırsa X adresine atla BRO X ; Overflow oluşmuşsa X adresine atla BRE R1, R2, X ; R1 = R2 ise X adresine atla Transfer of Control - branch
16 Transfer of Control - skip Skip komutları PC değerini 1 artırır ve sonraki komut yerine ondan sonraki komutu çalıştırır. 301... 309 ISZ R1 310 BR 301 311 ISZ (Increment and skip if zero), sonraki komutu atlar. R1 negatif bir değerden başlar 0 olana kadar artırılır. R1 = 0 olduğunda BR 301 komutu atlanır ve 311 adresine geçilir. Böylece döngüden çıkılmış olur. Transfer of Control - procedure call Prosedürler programlarda modülerlik sağlar.
17 Transfer of Control - procedure call Prosedür çağırmalarda dönüş adresiyle birlikte parametrelerinde gönderilip alınması gerekir. Register, start of procedure ve top of stack yöntemleri kullanılır. Register RN PC + Δ PC X Burda Δ komut uzunluğuna eşittir. RN dönüş adresinin saklandığı register, X ise atlanacak adrestir. İçiçe çağırmalarda tek register ile sorun oluşur daha fazla register gereklidir. Transfer of Control - procedure call Start of procedure X PC + Δ PC X + 1 Burda Δ komut uzunluğuna eşittir. X procedure başlangıç adresi, X + 1 ise atlanacak adrestir. Recursive çağırmalarda sorun oluşur.
18 Transfer of Control - procedure call Top of stack Hafızada oluşturulan bir alanda stack yapısı oluşturulur. İçiçe ve recursive çağırmalarda sorun olmaz. Stack içerisinde her çağırma için bir frame oluşturularak parametrelerde aktarılabilir. Konular Operand türleri Assembly dili
19 Assembly dili CPU makine komutlarını anlar ve çalıştırır. Makine komutları binary ifade edilir. Makine komutlarıyla program yazmak ve hata kontrolü çok zordur. Binary sayılar yerine hexadecimal sayılar kullanılabilir. Hexadecimal sayılarda program yazmak yine zordur. Hexadecimal komutlar yerine kısaltılmış ve daha kolay anlaşılabilen sembolik ifadeler (mnemonics) kullanılabilir (Sembolik programlama). Sembolik programlamada program hafızaya tekrar yüklendiğinde tüm adreslerin update edilmesi gerekir. Assembly programlama, adresleri etiketlerle göstererek programın tekrar yüklenmesinde veya güncelleştirilmesinde kolaylık sağlamıştır. Assembly dili