KASIRGA -4 Buyruk Tasarımı Belgesi 30.04.2008 Ankara 1
İŞLEMLER 00000000 SYSCALL 00000001 HLT 00000010 DEBUG 00000011 CONTINUE S-TİPİ 00000100 NOP 00000101 IN 00000110 OUT 00000111 BRET 00001000 ADD 00001001 SUB 00001010 AND YYY-TİPİ 00001011 OR 00001100 XOR 00001110 INC 00001111 DEC Y-TİPİ 00010001 ADD 00010010 SUB 00010011 AND YYA-TİPİ 00010100 OR 00010101 XOR 00100001 MUL 00100010 MULU 00100011 DIV 00100100 NOT 00100101 SLL 00100110 SRL YY-TİPİ 00100111 SLA 00101000 SRA 00101001 MOV 00101010 LW 00101011 SW 00101100 CMP 01000000 ADD 01000001 SUB 01000010 MUL 01000011 MULU 01000100 DIV 01000101 AND 01000110 OR 01000111 XOR 01001000 NOT YA-TİPİ 01001001 SLL 01001010 SRL 01001011 SLA 01001100 SRA 01001101 MOV 01001110 LW 01001111 SW 01010000 CMP 10000000 ADDI 10000001 SUBI 10000010 MULI 10000011 DIVI 10000100 ANDI 10000101 ORI 10000110 XORI 10000111 MOVI A-TİPİ 10001000 BEQ 10001001 BNE 10001010 BA 10001011 BL 10001100 BGT 10001101 BLT 10001110 BGTE 10001111 BLTE 11000000 SW AY-TİPİ 2
BUYRUK TÜRLERİ A-TİPİ İşlem (8) Anlık Değer (16) Boş(8) YYY-TİPİ İşlem (8) Ra (4) Rb (4) Rc (4) Boş(12) YYA-TİPİ İşlem (8) Ra (4) Rb (4) Anlık Değer (16) YA-TİPİ İşlem (8) Ra (4) Anlık Değer (16) Boş(4) YY-TİPİ İşlem (8) Ra (4) Rb (4) Boş (16) AY-TİPİ İşlem (8) Anlık Değer (16) Rb (4) Boş(4) Y-TİPİ İşlem (8) Ra (4) Boş(20) S-TİPİ İşlem (8) Boş(24) A-TİPİ: Buyruktaki ilk 8 bit işlem için, 16 bit ise anlık değer için ayrılmıştır. Anlık değer ile yapılan tüm işlemlerde bu buyruk türü kullanılmaktadır. YYY-TİPİ: Buyruktaki ilk 8 bit işlem için, 3 adet 4 er bit ise Ra, Rb ve Rc yazmaçları için ayrılmıştır. Ra ya Rb ve Rc yazmaçlarındaki veriler ile yapılan işlemin sonucu yazılır. Aritmetik işlemler için kullanılmaktadır. YYA-TİPİ: Buyruktaki ilk 8 bit işlem için, 2 adet 4 er bit Ra ve Rb yazmaçları için geriye kalan 16 bir ise anlık değer için ayrılmıştır. YA-TİPİ: Buyruktaki ilk 8 bit işlem için, 4 bit Ra yazmacı için ve 16 bit de anlık değer için ayrılmıştır. YY-TİPİ: Buyruktaki ilk 8 bit işlem için, 2 adet 4 er bit Ra ve Rb yazmaçları için ayrılmıştır. 3
AY-TİPİ: Buyruktaki ilk 8 bit işlem için, 16 bit anlık değer için ve 4 bit Ra yazmacı için ayrılmıştır. Y-TİPİ: Buyruktaki ilk 8 bit işlem için, 4 bit Ra yazmacı için ayrılmıştır. S-TİPİ: Sistemin yürütülmesini etkileyecek ve giriş çıkış işlemlerini kontrol eden buyruklar için kullanılmaktadır. 8 bit işlem için kullanılmaktadır. İŞLEMLERİN AÇIKLAMALARI SYSCALL (S Tipi) Sonra belirlenecektir. HLT (S Tipi) PS PS Program sayacı sabitlenerek programın durması(ilerlememesi) sağlanır. DEBUG (S Tipi) Sonra belirlenecektir. CONTINUE (S Tipi) Sonra belirlenecektir. NOP (S Tipi) PS PS+1 Hiçbir işlem yapılmaz ve program sayacı 1 artırılarak bir sonraki buyruğa geçilir. IN(S Tipi) Brkç= Anlık Değer İşlemcinin kapısına verilen 16 bitlik değer birikece yazılır. OUT (S Tipi) Birikecin son 8 biti(brkç<7:0> ) dışarı verilir. BRET (S Tipi) PS PS_ret BL buyruğuyla birlikte PS_ret yazmacına saklanmış olan değer PS ye atılır. 4
ADD (YYY Tipi) Ra Rb + Rc B ile C yazmacındaki değer toplanıp A yazmacına yazılır. SUB (YYY Tipi) Ra Rb Rc B yazmacındaki değerden C yazmacındaki değer çıkarılıp sonuç A yazmacına yazılır. AND (YYY Tipi) Ra Rb Rc AND buyruğu YYY tipi buyruklarla gerçekleştirilebilir. YYY tipi buyrukla gerçekleştirilirse c ve b yazmaçlarındaki değerler VE lenerek a yazmacına yazılır. AND işlemi yazmaçlardaki 16 bitlik değerler arasında bit bit ve yapılması ile gerçekleştirilir. OR (YYY Tipi) Ra Rb Rc OR buyruğu YYY tipi buyruklarla gerçekleştirilebilir. YYY tipi buyrukla gerçekleştirilirse c ve b yazmaçlarındaki değerler OR lanarak a yazmacına yazılır. Yazmaçlardaki 16 bitlik değerler arasında bit bit veya işlemi yapılır. XOR (YYY Tipi) Ra Rb (XOR) Rc XOR buyruğu YYY tipi buyruklarla gerçekleştirilir. YYY tipi buyrukla gerçekleştirilirse c ve b yazmaçlarındaki değerler XOR lanarak a yazmacına yazılır. Yazmaçlardaki 16 bitlik değerler arasında bit bit xor işlemi yapılır. INC (Y Tipi) Ra Ra+1 A yazmacı bir artırılıp tekrar A yazmacına yazılır. DEC (Y Tipi) Ra Ra 1 A yazmacı bir azaltılıp tekrar A yazmacına yazılır. ADD (YYA Tipi) Ra Rb + Anlık değer 5
B yazmacındaki değer ile anlık değer toplanıp A yazmacına yazılır. SUB (YYA Tipi) Ra Rb Anlık değer B yazmacındaki değerden anlık değer çıkarılıp sonuç A yazmacına yazılır. AND (YYA Tipi) Ra Rb Anlık değer AND buyruğu YYA tipi buyruklarla gerçekleştirilebilir. YYA tipi buyrukla gerçekleştirilirse B yazmacındaki değer ve anlık değer VE lenerek A yazmacına yazılır. OR (YYA Tipi) Ra Rb Anlık değer OR buyruğu YYA tipi buyruklarla gerçekleştirilebilir. YYA tipi buyrukla gerçekleştirilirse B yazmacındaki değer ve anlık değer OR lanarak A yazmacına yazılır. XOR (YYA Tipi) Ra Rb (XOR) Anlık değer XOR buyruğu YYA tipi buyruklarla gerçekleştirilir. YYA tipi buyrukla gerçekleştirilirse B yazmacındaki değer ve anlık değer XOR lanarak A yazmacına yazılır. MUL (YY Tipi) Üst+Alt Ra * Rb A yazmacındaki değer B yazmacındaki değerle çarpılır. Sonuç 32 bitlik veri tutabilecek iki yazmaca bölünür. Çarpma işlemi işaretli sayılarla (2ye tümleyen) işlem yapar. İki tane 16 bitlik sayının çarpımı en fazla 32 bitlik bir değer olabileceği için sonuç üst ve alt yazmaçlarına bölünerek tutulur. MULU (YY Tipi) Üst+Alt Ra * Rb A yazmacındaki değer B yazmacındaki değerle çarpılır. Sonuç 32 bitlik veri tutabilecek iki yazmaca bölünür. İşaretsiz sayılarla işlem yapar. Yazmaçlardaki 16 bitin tümü sayıyı göstermek için kullanılır. DIV (YY Tipi) Üst Ra / Rb 6
Alt Ra % Rb A yazmacındaki değer B yazmacına bölünür. Bölüm üst yazmacına, kalan alt yazmacına yazılır. NOT (YY Tipi) Ra Rb 1 Ra yazmacına Rb nin değerinin tersi alınarak yazılır. SLL (YY Tipi) Ra nın değeri Rb kadar sola mantıksal kaydırılır. SRL (YY Tipi) Ra nın değeri Rb kadar sağa mantıksal kaydırılır. SLA (YY Tipi) Ra nın değeri Rb kadar aritmetik sola kaydırılır. SRA (YY Tipi) Ra nın değeri Rb kadar aritmetik sağa kaydırılır. MOV (YY Tipi) Ra Rb B yazmacındaki değeri A yazmacına kopyalar. LW (YY Tipi) Ra Bellek [Rb] Bellekte Rb yazmacında bulunan 16 bitlik değerin gösterdiği adresteki veri alınıp Ra yazmacına yüklenir. SW (YY Tipi) Bellek [Rb] Ra Ra yazmacındaki değeri Rb yazmacında bulunan 16 bitlik değerin bellekte gösterdiği adrese yüklenir. CMP (YY Tipi) Ra>Rb ise Büyük Bayrağı=1 Ra<Rb ise Küçük Bayrağı=1 7
Verilen iki değerden birincisi ikincisinden büyükse büyük bayrağı 1 olur. Eğer değerler eşitse sıfır bayrağı 1 olur. Değerlerden birincisi ikincisinden küçükse küçük bayrağı 1 olur. Ayrıca CMP buyruğu bayrak bitlerini de etkiler. Bayrak bitleri daha sonra gelecek bir dallanma komutunu yönlendirmek için kullanılır. ADD (YA Tipi) Ra Ra + Anlık değer A yazmacındaki değer ile anlık değer toplanır. Sonuç tekrar A yazmacına yazılır. SUB (YA Tipi) Ra Ra Anlık değer A yazmacındaki değerden anlık değer çıkarılır. Sonuç tekrar A yazmacına yazılır. MUL (YA Tipi) Üst+Alt Ra * Anlık değer A yazmacındaki değer anlık değerle çarpılır. Sonuç 32 bitlik veri tutabilecek iki yazmaca bölünür. Çarpma işlemi işaretli sayılarla (2ye tümleyen) işlem yapar. İki tane 16 bitlik sayının çarpımı en fazla 32 bitlik bir değer olabileceği için sonuç üst ve alt yazmaçlarına bölünerek tutulur. MULU (YA Tipi) Üst+Alt Ra * Anlık değer A yazmacındaki değer ve anlık değer çarpılır. Sonuç 32 bitlik veri tutabilecek iki yazmaca bölünür. İşaretsiz sayılarla işlem yapar. Yazmaçlardaki 16 bitin tümü sayıyı göstermek için kullanılır. DIV (YA Tipi) Üst Ra / Anlık değer Alt Ra % Anlık değer A yazmacındaki değer Anlık değere bölünür. Bölüm üst yazmacına, kalan alt yazmacına yazılır. AND (YA Tipi) Ra Ra Anlık değer AND buyruğu YA tipi buyruklarla gerçekleştirilebilir. YA tipi buyrukla gerçekleştirilirse A yazmacındaki değer ve anlık değer VE lenerek A yazmacına tekrar yazılır. OR (YA Tipi) 8
Ra Ra Anlık değer OR buyruğu YA tipi buyruklarla gerçekleştirilebilir. YA tipi buyrukla gerçekleştirilirse A yazmacındaki değer ve anlık değer OR lanarak A yazmacına tekrar yazılır. XOR (YA Tipi) Ra Ra (XOR) Anlık değer XOR buyruğu YA tipi buyruklarla gerçekleştirilir. YA tipi buyrukla gerçekleştirilirse A yazmacındaki değer ve anlık değer XOR lanarak A yazmacına tekrar yazılır. NOT (YA Tipi) Ra Anlık değer 1 Ra yazmacına Anlık değerin tersi alınarak yazılır. SLL (YA Tipi) Ra nın değeri Anlık değer kadar sola mantıksal kaydırılır. SRL (YA Tipi) Ra nın değeri Anlık değer kadar sağa mantıksal kaydırılır. SLA (YA Tipi) Ra nın değeri Anlık değer kadar aritmetik sola kaydırılır. SRA (YA Tipi) Ra nın değeri Anlık değer kadar aritmetik sağa kaydırılır. MOV (YA Tipi) Ra Anlık değer Anlık değeri A yazmacına kopyalar. LW (YA Tipi) Ra Bellek [Anlık Değer] Bellekte Anlık Değerin gösterdiği adresteki veri alınıp Ra yazmacına yüklenir. SW (YA Tipi) 9
Bellek [Anlık Değer] Ra Ra yazmacındaki değer Anlık Değerin bellekte gösterdiği adrese yüklenir. CMP (YA Tipi) Ra>Anlık değer ise Büyük Bayrağı=1 Ra<Anlık değer ise Küçük Bayrağı=1 Yazmaçtaki değer anlık değerden büyükse büyük bayrağı 1 olur. Eğer değerler eşitse sıfır bayrağı 1 olur. Yazmaçtaki değer anlık değerden küçükse küçük bayrağı 1 olur. Ayrıca CMP buyruğu bayrak bitlerini de etkiler. Bayrak bitleri daha sonra gelecek bir dallanma komutunu yönlendirmek için kullanılır. ADDI (A Tipi) Brkç Brkç + Anlık değer Anlık değer birikeçteki değerle toplanıp birikece gönderilir. SUBI (A Tipi) Brkç Brkç - Anlık değer Birikeçteki değerden anlık değer çıkarılıp birikece gönderilir. MULI (A Tipi) Üst+Alt Brkç * Anlık değer Anlık değer birikeçteki değerle çarpılıp 32 bitlik HI ve LO yazmaçlarına yazılır. DIVI(A Tipi) Üst Brkç / Anlık değer Alt Brkç % Anlık değer Anlık değer birikeçteki değere bölünür. Bölüm üst yazmacına, kalan alt yazmacına yazılır. ANDI (A Tipi) Brkç Brkç Anlık değer Anlık değer birikeçteki değerle ve işlemine sokup birikece gönderilir. ORI (A Tipi) Brkç Brkç Anlık değer Anlık değer birikeçteki değerle veya işlemine sokup birikece gönderilir. 10
XORI (A Tipi) Brkç Brkç (XOR) Anlık değer (Sıfırla Genişletilmiş) Anlık değer birikeçteki değerle xor işlemine sokup birikece gönderilir. MOVI (A Tipi) Brkç Anlık değer Buyrukla gelen anlık değer birikece yazılır. BEQ (A Tipi) Eğer Sıfır Bayrağı = 1 ise PS = PS + Anlık Değer BEQ genellikle bir CMP komutu sonrasında kullanılır. Buyruk sıfır bayrak bitine bakarak değer 1 e eşitse program sayacını anlık değer kadar artırır. Anlık değer eksi ya da artı olabilir. BNE (A Tipi) Eğer Sıfır Bayrağı = 0 ise PS = PS + Anlık Değer BNE genellikle bir CMP komutu sonrasında kullanılır. Buyruk sıfır bayrak bitine bakarak değer 0 a eşitse program sayacını anlık değer kadar artırır. Anlık değer eksi ya da artı olabilir. BA (A Tipi) PS = Anlık Değer Anlık değerin gösterdiği adrese gidilir. BL (A Tipi) PS_ret = PS PS = Anlık Değer Programın anlık değerle gösterilen noktadan devam etmesi sağlanırken daha sonra aynı noktaya (BRET buyruğuyla) dönüş için program sayacı ps_ret buyruğunda saklanır. BGT (A Tipi) Büyük Bayrağı = 1 ise PS =PS+ Anlık Değer Büyük bayrağı 1 olduğu zaman PS ve anlık değer toplanıp PS ye verilir. BLT (A Tipi) 11
Küçük Bayrağı = 1 ise PS =PS+Anlık Değer Küçük bayrağı 0 olduğu zaman PS ve anlık değer toplanıp PS ye verilir. BGTE (A Tipi) Büyük Bayrağı = 1 ve Sıfır Bayrağı = 1 ise Ps = Ps + Anlık Değer CMP de karşılaştırılan yazmaçlar birbirlerine eşitse veya A daki değer B dekinden büyükse anlık değer yüklenir. BLTE (A Tipi) Küçük Bayrağı = 1 ve Sıfır Bayrağı = 1 ise Ps = Ps + Anlık Değer CMP de karşılaştırılan yazmaçlar birbirlerine eşitse veya A daki değer B dekinden küçükse anlık değer yüklenir. SW (AY Tipi) Bellek [Rb] Anlık değer Anlık değer Rb yazmacında bulunan 16 bitlik değerin bellekte gösterdiği adrese yükler. BAYRAKLAR Sıfır Küçük Büyük İşaret Sıfır Bayrağı AMB, çarpma ve kaydırma biriminden çıkan sonucun 0 olup olmadığına dair bilgi verir. Küçük Bayrağı Karşılaştırılan iki değerden birincisinin küçük olup olmadığını bildirir. Büyük Bayrağı Karşılaştırılan iki değerden birincisinin büyük olup olmadığını bildirir. İşaret Bayrağı Çarpma birimi, AMB veya kaydırma biriminde yapılan işlemlerin sonucunun işaretinin negatif ya da pozitif olduğunu gösterir. YAZMAÇLAR Adres Yazmaç Adı 0000 Birikeç 0001 Üst 0010 Alt 0011 Genel Amaçlı Yazmaç 12
0100 Genel Amaçlı Yazmaç 0101 Genel Amaçlı Yazmaç 0110 Genel Amaçlı Yazmaç 0111 Genel Amaçlı Yazmaç 1000 Genel Amaçlı Yazmaç 1001 Genel Amaçlı Yazmaç 1010 Genel Amaçlı Yazmaç 1011 Genel Amaçlı Yazmaç 1100 Genel Amaçlı Yazmaç 1101 Genel Amaçlı Yazmaç 1110 Genel Amaçlı Yazmaç 1111 Genel Amaçlı Yazmaç PS_ret Dallanmaları bağlamak için PS yi tutan Y. 13