Komut kümesi mimarisi

Donanım Sistemi Mimarisi donanım aygıtlarının (G/Ç, Bellek, MİB vs.) bağlı olduğu alt sistemi oluşturur. Buyruk Kümesi Mimarisi ise bu elemanlara yön verecek programlar yazılırken kabul edilecek öngörülerdir. Dolayısıyla Buyruk Kümesi Mimarisi (ISA) yazılım ile donanım arasında iş gören bir birimdir.

Merkezî işlem birimine yön verecek program bazı adımlardan oluşur ve her adımda, MİB’ne yapması gereken işlem ve yapacağı işlemin hangi büyüklükler üzerinde olacağı belirtilmektedir. MİB’nin her bir program adımında yapması gereken işlemleri belirtmek amaçlı kullanılan açıklamaya buyruk denilir. Buyruk içinde yapılacak işlemi ve adresleme yöntemini belirten ise komuttur. İşlenen, üzerinde işlem yapılacak büyüklüğü ya da büyüklüğün yerini (bellek gözünü) belirtir.

Yüksek seviye dilleri bilgisayar mimarisinden bağımsızdır. Bu diller derleyici tarafından mimariye bağımlı olan makine diline çevrilir. Bir diğer çevirici (assembler) bu çevrilen makine dili buyruklarını işlenebilir ikili kodlara çevirir. Buyruk Kümesi Mimarisi (BKM) işlemcinin programcı'ya ve derleme yapan kişiye görünen yüzüdür. Yüksek seviye dilleri ise mimarinin detaylarını programcı'dan saklar.

İşlenen alanı işlenene gerek duyan buyrukların veri veya adres tanımladıkları yerdir. İşlenenin başına veya sonuna konulan işaretlerden ne tür bir bilgi olduğu anlaşılır. Aşağıdaki tabloda bu işaretler anlamlarıyla birlikte gösterilmiştir.

Açıklama alanı programcı tarafından bir başkası tarafından programın izlenmesi veya yürütülmesi maksadıyla konulmuştur. İsteğe bağlıdır. Program satırlarında buyrukların ne yaptığını anlatmak için kullanılır. Derleyici tarafından dikkate alınmaz.

Bilgisayar mimarileri tasarım aşamasında oldukları zaman öncelikli olarak buyruk kümesi formatı belirlenmelidir. Bu formatı seçmek genellikle oldukça zordur çünkü buyruk kümesi mimariyle uyuşmalıdır ve mimari, eğer iyi tasarlanmışsa, yıllarca ömrünü sürdürebilmelidir. Tasarım aşamasında yapılan kararlar uzun süreli dallanmalara sahiptir.

Kısa buyruklar tipik olarak daha iyidir çünkü bellekte daha az yer kaplarlar ve daha hızlı yakalanırlar. Ancak bu buyruk sayısını kısıtlar çünkü ihtiyacımız olan buyrukların sayısını belirtmek için buyruk içinde yeterli sayıda bit olması gerekir. Kısa buyruklar ayrıca boyut ve işlenen sayısı üzerinde de daha sıkı kısıtlamalara sahiptir.

Bellek organizasyonu buyruk yapısını etkiler. Mesela eğer bellekte 16 veya 32 bitlik sözcükler varsa ve bellek baytla adreslenebilir değilse basit bir karaktere ulaşmak zordur. Bu sebepten dolayı 16, 32 veya 64 bitlik sözcüklere sahip olan makineler bayt adreslenebilir olsalar bile ve sözcükler 1 baytdan büyük olsalar dahi her bir bayt tek bir adrese sahiptir.

Sabit uzunluktaki bir buyruk belirli sayıda işlenene sahip olmayabilir. Buyruğun bütünü açısından sabit uzunlukta buyruk tasarlayabilmemiz gerekir, fakat işlenen kısmındaki bitler gerektiği zaman değişebilmeli (buna genişletilmiş işlem kodu denir).

Eğer baytlar katlı sayıda baytlardan oluşuyorsa, bu baytlar baytla adreslenebilir bir makinede nasıl sıralanırlar? En önemsiz bayt en yüksek bayt adresinde mi yoksa en düşük bayt adresinde mi saklanmalı? Burada soldan ve sağdan anlamlı bellek adresleri devreye girer.

Bilgisayarın ve bilgisayar mimarisinin çok baytlı (katmanlı bayt) verileri nasıl sıralayacağıyla ilgili bir kavramdır. Soldan anlamlılık ve sağdan anlamlılık da denilmektedir. Bugünkü çoğu mimariler bayt-adreslenebilir olduklarından çok sayıda baytın bellekte nasıl sıralanacağıyla ilgili bir standarda sahip olmalılar. Eğer sıralanmış bir sözcükte en büyük baytın adresi sözcük adresi ise bu sıralamaya soldan anlamlı (big endian) denir. Eğer en küçük baytın adresi sözcük adresine eşitse bu sıralanmaya sağdan anlamlı (little endian) denir. UNIX makinelerinin çoğu soldan anlamlıdır (ayrıca IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA da soldan anlamlıdır). PC lerin çoğu ise sağdan anlamlıdır. (ayrıca Intel 80x86, DEC Vax, DEC Alpha da sağdan anlamlıdır). İşlemci üreticileri de bu konuda iki gruba ayrılır. Örneği Motorola devamlı soldan anlamlılığı kullanırken İntel sağdan anlamlılığı kullanlır (Bazı işlemciler ise hem soldan anlamlılığı hem de sağdan anlamlılığı birlikte kullanır).

Bayt adreslenebilir bir makinede 32-bit onaltılı 12345678 değerinin 0 adresinde depolandığını varsayalım. Her bir rakam yarım bayt’a ihtiyaç duymaktadır, böylece bir bayt iki rakam tutabilir. Bu onaltılı değer aşağıdaki şekilde gösterildiği gibi hafızada depolanır (rakamsal hücreler hafızanın güncel içeriğini belirtmektedir).

İki metodunda avantajları ve dezavantajları vardır, fakat birini diğerinden daha iyi olması da gerekmez. Soldan anlamlı (big endian) insanlara alışıldık gelir, bu yüzden özellikle yığınları okuması daha kolaydır. Yüksek seviyedeki baytın önce gelmesi sebebiyle ofset sıfırdaki bayta bakarak her zaman sayının pozitif veya negatif olduğu bulunabilir (sağdan anlamlıda işareti belirlemek için sayının uzunluğu bilinmelidir ve işaret bilgisini içeren bayt bulunmalıdır). Soldan anlamlı makineler tam sayıları ve dizileri aynı şekilde sıralar ve dizi işlemlerinde daha hızlıdır. Çoğu bit eşli grafikler “en anlamlı bit soldaki” ilkesine göre eşlenmiştir. Bu sağdan anlamlı makineler için bir performans kısıtlaması getirir çünkü bir baytdan daha büyük grafik elemanlarıyla çalışırken sürekli baytların sırasını ters çevirmek zorundadır.

Ancak soldan anlamlılığın dezavantajları da vardır. 32 bit tam sayı adresinden 16 bit tam sayı adresine çeviride toplama yapmak için sağdan anlamlı bir makine gereklidir. Yüksek kesinlikte aritmetik işlemler sağdan anlamlılık kullanarak daha kolay ve hızlıdır. Soldan anlamlılığı kullanan çoğu mimarî sözcüklere adreslenemeyen alanlara sözcüklerin yazılmasına izin vermez (örneğin eğer sözcük 2 veya 4 baytsa adres her zaman çift sayı olmak zorundadır). Bu boşluk israfına sebep olur. Sağdan anlamlı mimariler, intel gibi, tek sayılı adreslerin okunup yazılmasına izin verir, bu yüzden bu makineler üzerinde programlama daha kolay olur.

Bilgisayar ağları soldan anlamlıdır. Sağdan anlamlı bilgisayarlar ağ üzerinden tam sayıları geçirecekleri zaman bunları ağ bayt sıralamasına çevirmek zorundadırlar. Aynı şekilde, tam sayıları alacakları zaman ise kendi ifadelerine çevirmek zorundadırlar.

Yazılım uygulamaları açısından soldan ve sağdan anlamlılık son derece önemlidir. Bir dosyadan veri okuyacak veya veri yazacak olan herhangi bir program makinenin bayt sıralamasına göre hareket etmelidir. Soldan anlamlı bir makinede sağdan anlamlılığı kullanan bir programı açmak için öncelikli olarak bayt sıralaması tersine çevrilmelidir. Mesela Adobe Photoshop, JPEG, MacPaint ve Sun raster dosyaları soldan anlamlı, GIF, PC Paint brush, RTF (Mikrosoft tarafından) sağdan anlamlıdırlar. Microsoft WAV ve AVI dosyaları, TIFF dosyaları, XWD ise her iki sıralamayı destekler.

Yığın mimarisinin komutlarını işletmek için bir yığın kullanır ve işlenenler yığının en üstüne aşağıdan yukarı doğru dizilirler. Yığın yapılı makineler iyi bir kod yoğunluğuna ve ifadelerin değerlendirilmesi için sade bir modele sahip olmalarına rağmen, istenilen bir yığına rastgele erişilemez, bu sebepten dolayı yığınlı yapılarda etkili kod oluşturulması zordur.

Bir işlenenin tamamı biriktiricinin içinde olan biriktirici mimarileri, makinenin karmaşıklığını en aza indirir ve çok kısa komutlara izin verir. Ancak biriktirici yalnız geçici depolama yaptığından dolayı hafıza trafiği (erişimi) oldukça yüksektir.

Genel amaçlı yazmaç kullanan mimariler, günümüzün makine mimarileri içerisinde en çok tercih edilen modelidir. Bu yazmaç kümeleri bellekten çok daha hızlıdır, derleyici tarafından kullanılması çok kolay, çok etkin ve çok verimlidir. Ayrıca son yıllarda donanım fiyatları önemli ölçüde düştü ve böylece en az maliyetle çok sayıda yazmaç eklenebilir oldu. Eğer bellek erişimi hızlı ise, yığın tabanlı tasarım iyi bir seçenek olabilir. Eğer bellek erişimi yavaşsa, yazmaçları kullanmak çok daha iyidir. Bu sebepten dolayı son 15 yılda çıkan pek çok bilgisayar sistemleri genel yazmaç tabanlıdır. Uzun buyruklarda tüm işlenenler yazmaçların sonuçları kullanılarak isimlendirilmelidir, bu sebeple daha uzun getirme, yakalama ve çözme zamanları ve döngüleri oluşur. (Kısa buruklar BKM tasarımcıları için çok önemli bir amaçtır.) Tasarımın BKM seçimi aşamasında tasarımcılar belirli bir ortamda en iyi hangi mimarinin çalışacağına karar vermelidirler ve vazgeçilecek (taviz verilecek) şeyleri dikkatle tetkik etmelidirler. (İyi tasarım fedakârlık gerektirir).

Genel amaçlı mimari, işlenenlerin bulundukları yerlere göre üçe ayrılabilir. Bellek-bellek mimarilerinde bellekte iki ya da üç işlenen birlikte bulunur. Böylece bir yazmaçta herhangi bir işlenene ihtiyaç duyulmadan buyruğun işlem yapmasına izin verilir. Yazmaç-bellek mimarileri en az bir işlenenin yazmaçta, bir işlenenin de bellekte olmasını gerektiren bir yapıya ihtiyaç duyar. Yükle depola mimarileri veri üzerinde herhangi bir işlem yapılmadan önce verinin yazmaçlara gönderilmesini sağlar. Intel ve Motorola yazmaç bellek mimarilerine örnektir; Digital Equipment'in VAX mimarisi bellek-bellek işlemlerine izin verir; MIPS, SPARC, PowerPC ve ALPHA yükle-depola makinelerine örneklerdir.

Günümüzde birçok mimarî GPR tabanlıdır. Şimdi GPR mimarilerini ikiye bölen ana buyruk kümesi karakteristiklerini inceleyelim. Bunlar adresleme biçimleri ve işlenenlerin sayıları olarak iki grupta incelenirler.

Çoğu zaman, gerçek hayatta uzlaşma, kolay görülebilen ve kod çözümü daha kolay olan bit kalıplarını sağlayan iki-üç buyruk uzunluğunu kullanmayı gerektirir. Buyruk uzunluğunu makinedeki sözcük uzunluğuyla karşılaştırmamak lazım. Eğer buyruk uzunluğu sözcük uzunluğuna eşitse, buyruklar ana bellekte saklandıklarında mükemmel bir şekilde hizalanırlar. Buyruklar, adreslemeden dolayı daima hizalanmalıdır. Bundan dolayı, bir sözcüğün iki katı, üç katı, yarısı ya da çeyreği büyüklüğündeki buyruklar boşa alan israf edebilir. Değişken uzunluktaki buyruklar aynı boyutta olmadıklarından hizalanmaları gerekir, bu da yine alan israfına yol açar.

Bütün mimariler buyruk başına işlenen sayısında izin verilen bir sınıra sahiptir. Sıfır, bir, iki ve üç işlenenli buyrukların çok yaygın olduğunu söylemiştik. Bir, iki ve üç işlenenli buyrukları anlamak kolaydır, ancak tamamıyla sıfır işlenenli buyruklar üzerine yapılmış bir buyruk kümesi mimarisi bir hayli karmaşıktır.

Yığın tabanlı mimarilerde, birçok buyruk yalnızca işlem kodlarından oluşur. Bununla birlikte sadece bir işleneni olan özel buyruklar da vardır (yığına eleman ekleyen veya yığından eleman çıkaran tipi buyruklar). Yığın mimarileri, her biri bir işlenene sahip olan push ve pop buyruklarına ihtiyaç duyarlar. Push X buyruğu, X bellek konumundaki veri değerini yığının üstüne yerleştirir. Pop X buyruğu, yığının en üstteki ögesini siler ve X bellek konumuna yazar. Belleğe erişme izni sadece bâzı buyruklara verilir; diğer bütün buyruklar yürütme esnasında herhangi bir işlenen için yığını kullanmak zorundadır.

İki işlenene ihtiyaç duyulan işlemlerde, yığının en üstteki iki elemanı kullanılır. Mesela bir ADD komutu çalıştırırsak, MİB yığının en üstteki iki elemanını alır, ikisini de yığından atar ve yığının en üstüne toplama işleminin sonucunu yerleştirir. Çıkarma işlemi gibi değişmeli olmayan işlemlerde, en üstteki öge bir altındaki ögeden çıkarılır, ikisi de yığından atılır ve yığının en üstüne çıkarma işleminin sonucu yerleştirilir.

Bütün aritmetik ifadelerin bu gösterimleri kullanarak yazılması mümkündür. Fakat, bir yazmaç yığını ile birleştirilmiş postfix gösterimi, aritmetik ifadelerin hesaplanmasında en etkili yoldur. Aslında bâzı elektronik hesap makineleri kullanıcıdan ögeleri postfix gösteriminde girmesini ister. Bu hesap makinelerinde biraz alıştırma yapıldığında, iç içe dizilmiş birçok parantez içeren uzun ifadeleri, terimlerin nasıl gruplandığını bile düşünmeden, daha hızlı bir şekilde hesaplamak mümkündür.

Sıfır, bir, iki ve üç işlenen kavramlarıyla ilgili bir örnek verelim. Her bir kavramı kullanarak, bir aritmetik hesap yapan basit bir program yazalım.

Buyruk başına izin verilen işlenen sayısı azaldı, fakat kodu çalıştırmak için gerekli olan buyruk sayısı arttı. Bu durum, mimarî tasarımında tipik bir boşluk ya da zamandan taviz verme örneğidir. Daha kısa buyruklar oluşur, fakat programlar uzar.

Buyruğun uzunluğu, işlem kodunun uzunluğundan ve izin verilen işlenen sayısından etkilendiğni yukarıda vurguladık. Eğer işlem kodunun uzunluğu sabit ise, çözme işlemi çok daha kolay olur. Fakat geriye dönük uyumluluk ve esneklik sağlayabilmek için, işlem kodunun uzunluğu değişken olabilir. Değişken uzunluktaki işlem kodlarında, değişken uzunluktaki buyruklarda görülen problemlere benzer sorunlar söz konusu olabilir. Birçok tasarımcı işlem kodlarını genişletme konusunda uzlaşmaya varmıştır.

İşlem kodlarını genişletme, işlem kodlarının geniş bir kümesini ve kısa işlem kodları, dolayısıyla kısa buyrukları elde etme amacıyla ortaya çıkmıştır. Amacı bâzı işlem kodlarını kısaltmak, ancak ihtiyaç olduğunda uzun işlem kodları da sağlamaktır. İşlem kodu kısa olduğunda, bitlerden birçoğu işlenenleri tutar (buyruk başına iki ya da üç işlenen bulunabilirdi). İşlenenler için alana ihtiyaç duyulmadığında (Halt gibi bir işlem sırasında ya da makine bir yığın kullandığında), tüm bitler işlem kodu için ayrılabilir, bu durum birçok benzersiz buyruğa izin verir. Az işleneni olan uzun işlem kodları olduğu gibi çok işleneni olan kısa işlem kodları da mevcuttur.

Bu buyruk kümesini 16 bitle şifreleyebilir miyiz? İşlem kodlarını genişletme işlemini kullandığımız sürece cevap “evet” olur. Şifreleme aşağıdaki gibi yapılır;Genişleyen işlem kodu yapısı, çözme işlemini daha karmaşık hale getirir. Basit şekilde bir bit kalıbına bakıp hangi buyruk olduğuna karar vermek yerine, buyruğu aşağıda belirtildiği gibi çözmemiz gerekir;if (leftmost four bits!= 1111) (Execute appropriate three-address instruction) else if (leftmost seven bits!= 1111 111) (Execute appropriate two-address instruction) else if (leftmost twelve bits!= 1111 1111 1111) (Execute appropriate one-address instruction) else (Execute appropriate zero-address instruction) Her adımda, daha fazla bite bakmamız gerektiğini bildiren yedek bir kod bulunur. Bu durum, donanım tasarımcılarının sürekli karşılaştıkları taviz vermelerin (trade-off) diğer bir örneğidir. Burada biz işlem kodu alanını işlenen alanıyla yer değiştirmiş oluyoruz.

Veri hareket buyrukları en sık kullanılan buyruk türlerinden birisidir. Veri bellekten yazmaçlara, yazmaçlardan yazmaçlara ve yazmaçlardan belleğe taşınabilir, birçok makine kaynak ve hedefe bağlı olarak farklı buyruklar sağlar. Mesela bir MOVE komutu her zaman iki yazmaçlı işlenene ihtiyaç duyabilir, oysa MOVE komutu bir yazmaç ve bir bellek işlenine izin verir. RISC gibi bâzı mimariler, işletimi hızlandırmak için belleğe veya bellekten veri taşıyan buyrukları sınırlandırır. Birçok makine, farklı boyutlardaki veriyi işlemek için değişik load, store ve move komutlarına sahiptir. Mesela bayt işlemek için bir LOADB komutu, sözcük işlemek için de bir LOADW komutunun kullanılması gibi. Bellekten belleğe doğrudan veri aktarım komutu yoktur. Bu durumda MİB gibi aracı elemana ihtiyaç duyulur. Veri önce bellekten biriktiriciye alınır, daha sonra da diğer bellek alanlarına aktarılır.

Veri aktarım işlemleri kendi arasında üç alt gruba ayrılırlar: Aktarım bellekle yazmaç arasında, yazmaçtan yazmaca ve yığına veri atıp geri alma şeklinde yapılabilir.

Komutların sonunda bulunan harfler belirli kaydedicileri hedefler. Mesela A kaydedicisini, X indis kaydedicisini ve Y indis kaydedicisini hedefleyebilir. Verinin alındığı bellek konumları, buyruğun işlenen kısmında belirtilir. Bu adresler, indisli, mutlak ve veri tanımlı olabilirken, bayraklardan Z ve N bayrakları etkilenirler.

Kaydedicilerden belleğe depolama veya saklama yapmak için STA, STX ve STY komutları kullanılır. Bu kaydedicilerdeki bilgi işlenen üzerinden hedeflenen bellek konumuna aktarılır. Bu aktarım işlemleri sırasında bayraklarda bir değişme olmaz. Veri aktarım işlemlerinde kaynağın içeriği değişmez, fakat hedefin içeriği değişir.

Burada adres konumundaki veri (verinin değerinin ne olduğu önemli değil) biriktiriciye alınarak tekrar başka bir yere, adres konumuna gönderilmektedir. adresinde bulunan daha önceki veri yeni değer aktarılırken silinir, fakat adresindeki veri aynen kalır.

Bu komutlar bellekte bir baytlık yer kaplarlar. Komut yanında işlenene gerek duyulmaz. Kaydediciden kaydediciye veri aktarım komutları; TAX, TAY, TXA, TYA, TSX ve TXS'dir.

Burada komutun ortasındaki harf daima kaynak kaydedicisini, sondaki harf ise hedef kaydedicisini gösteririr. TXS'nin dışında diğer komutlar N ve Z bayraklarını etkiler.

Veri, biriktiriciden yığına, yığından biriktiriciye ve durum (P) bilgileri yığına, yığından tekrar duruma aktarılır. Yığına atılan bir veri, yığın işaretçisinin değerini bir azaltır, yığından geri çekilen bir veriyle de yığın işaretçisi tekrar bir artar.

Aritmetik işlemler tam sayıları ve kayan nokta sayılarını kullanan komutlara sahiptir. Buyruk kümelerinde çeşitli veri boyutları olduğundan farklı aritmetik komutlar bulunur. Veri aktarım komutlarıyla, değişik adresleme biçimlerinde yazmaç ve bellek erişiminin çeşitli kombinasyonlarını sağlamaya yarayan farklı komutlar olabilir.

Buradaki [M], ADC ve ADD komutlarının işlenen kısımlarında bulunan veriyi veya bellekle bulunan bir veriyi göstermektedir. Toplama işlemi, durum bayrağındaki D'nin durumuna göre ikili sayı kodunda ya da BCD kodunda olabilir. Veriler toplama ve çıkarma işlemlerinde işaretli veya işaretsiz şekilde birlikte kullanılabilir. Programcının ne tür bir veri kullandığını bilmesi gerekir.

Yukarıdaki programda ilk satırda CLC bir önceki programdan kalan ve şu anki programa etki edebilecek eldelerden kurtulmak için C bayrağını temizlenir. Daha sonra A'ya 25H verisi yüklenir. Bir altındaki adımda A'daki veri no' lu bellek konumundaki veri ve elde toplanarak sonuç yine A'ya yazılıyor.

Çıkarma işlemi, toplama işlemindeki gibi hem ikili sayılarla hem de BCD modunda yapılabilir. Burada c = (1 - C) ifadesi çok baytlı çıkarma işlemlerinde kullanılır. C = 0 ise sonuca etki edilmez. Çünkü C = 1 ise, tersi 0 olur.

Bu komutlar, biriktiricideki değerle bellek konumundaki değeri bit bit mantık işlemine sokarlar ve daha sonra sonuç biriktiriciye yazılır. Bütün bu işlemler N (Negatif) ve Z (Sıfır) bayraklarını etkiler. Bu komutlardan en yaygın kullanılanları AND ve OR komutlarıdır.

AND komutu başka bitlere etki etmeden istenen bitin maskelenmesinde de kullanılır. Programcı bellek konumundaki temizlemek istadiği veriye göre A'ya değer atmalıdır.

Bit işleme komutları, verilen bir veri sözcüğün içindeki bitleri veya bit gruplarını 1(set) veya 0(reset) yapmada kullanılır. Bunlar sola veya sağa aritmetik ve mantıksal kaydırma ve döndürme komutlarını içerir. Mantıksal kaydırma komutları, bitleri belirtilen miktarda sola ya da sağa kaydırırmada kullanılır (left shift and right shift).

Genellikle ikiyle çarpma ya da bölme işlemleri için kullanılan aritmetik kaydırma komutları en soldaki bit sayının işaretini gösterdiğinden bu biti kaydırma. Sağa doğru yapılan aritmetik kaydırmada, işaret biti yanındaki bite kopyalanır. Sola doğru yapılan aritmetik kaydırmada bitler sola kaydırılır, sağdan sıfırlar içeriye girerler, ancak işaret biti sabit kalır, hareket ettirilmez. Döndürme komutları kaydırılmış bitlere kaydırma yapan komutlardır. Mesela sola 1 bit döndürmede en soldaki bit dışarı kaydırılır ve en sağdaki bit haline getirmek için de döndürme yapılır.

Giriş/Çıkış komutları, mimariden mimariye pek çok değişiklik gösterir. G/Ç’ı kontrol etmek için bâzı temel düzenler kullanılır. Bunlar programlanmış G/Ç, kesinti sürümlü (interrupt-driven) G/Ç ve DMA aygıtlarıdır.

Kontrol komutları dallanmalardan, atlamalardan ve yordam çağırmalarından oluşur. Dallanmalar koşullu ya da koşulsuz olabilir. Atlama komutları dallanma komutlarına benzer. Dallanma komutlarının adres içeren bir şeklidir. Atlama komutları farklı durumları belirtmek için genellikle bellek adres konumunun bitlerini kullanır, çünkü işlenene ihtiyaç duymaz. Yordam çağırmaları dönüş adresini otomatik olarak saklayan özel dallanma komutlarıdır. Geri dönüş adresini kaydetmek için farklı makineler farklı uygulamalar kullanırlar. Bâzı makineler adresi bellekte belirli bir yere kaydeder, bazıları bir yazmaca kaydeder, bazıları da adresi yığına bir veri gibi kaydeder. Yığınların farklı amaçlar için kullanılabildiğini daha önce de söylemiştik. Genellikle en çok kullanılan yöntem de yığına atmaktır (PUSH ve PULL komutlarıyla atılır ve alınır).

Şartsız herhangi bir adrese gitme işlemini JUMP komutu gerçekleştirir. Eğer bu komutunun devamındaki komut veya komutlar işlenmeyecekse bu komut kullanılır. JUMP komutu, mutlak adresleme veya dolaylı adresleme modlarından birisini kullanır.

JUMP komutu işleneniyle birlikte bellekle üç baytlık yer tutar, mutlak adres kullandığında üç çevrim, dolaylı adresleme kullandığında ise beş çevrim tutar. Yerine göre ikisinden birisi tercih edilir.

JUMP komutu kontrolü bellekte belirli bir adrese aktarır, sapma komutları kontrolü, komut işlendikten sonra bir sonraki komutun bulunduğu yerden ilerideki veya gerideki belirli bir bellek konumuna aktarır. Dalma komutu ile sapma komutu arasındaki diğer bir fark ise, sapma komutları karar verme komutlarıdır.

Özel amaçlı komutlar arasında dizi işleme, yüksek seviye dil desteği, koruma, bayrak kontrolü ve ön bellek yönetimi de vardır. Birçok mimarî dizi işlemek için özel komutlara sahiptir. Bu özel komutlar için mimarilerde özel yazmaçlar bulunabilir.

Makine buyruklarını işleten ve diğer birimlerin faaliyetlerini düzenleyen işlem birimi genellikle Buyruk Kümesi Mimarisi ya da kısca işlemci olarak adlandırıldığını daha önce de belirtmiştik. Bu mimariye göre bir buyruğun işlenirken geçtiği belirli aşamalar vardır. Bunlar: dahili yapısını ve bir programın buyruklarını alıp getirme (fecthing), çözme (decoding), işletme (execution), sonucun saklanması ve bir sonraki buyruğun yakalanması.

İşlemcilerin organizasyonu, son yıllarda teknolojide yaşanan gelişmeler ve diğer taraftan başarıma olan ihtiyaçtan dolayı oldukça gelişti. Yüksek başarımlı işlemcilerin geliştirilmesindeki yaygın bir yönteme göre çeşitli fonksiyonları yerine getiren birimler mümkün olduğunca paralel bir şekilde çalışmalıdır (Boru hattında olduğu gibi). Yüksek başarımlı işlemciler ardışık (pipelined) bir organizasyona ve yapıya sahiptir. Bir buyruğun işletilmesine önceki buyruğun işletilmesi bitmeden önce başlanır ve bir süre sonra her bir saat vuruşunda mükemmel bellek varsa bir buyruk içeriye alınır ve bir buyruğun işletilmesi sonuçlandırılır. Süper skalar işletim adı verilen bir başka yaklaşımda da aynı anda birçok sayıda buyruk getirilip işletilir.

Bir program işletmek için, işlemci birim zamanda bir buyruk getirir ve belirtilen işlemi uygular. Buyruklar, bir dallanma veya bir atlama buyruğuna rastlayana kadar ardışık bellek konumlarından getirilir. İşlemci, program sayacını kullanarak, getirilecek bir sonraki buyruğu içeren bellek konumunun adresini saklar. Bir buyruğu getirdikten sonra, program sayacının içeriği dizideki bir sonraki buyruğu gösterecek şekilde güncellenir. Bir dallanma buyruğu program sayacına farklı bir değer yükleyebilir.

Eğer bir buyruk bir sözcükten fazla yer kaplıyorsa 1. ve 2. adımlar tüm buyruk getirilene kadar tekrarlanmalıdır. Bu iki adım genellikle getirme evresi, 3. adım ise işletme evresi olarak adlandırılır.

Intel sağdan anlamlılığı, iki adresli mimariyi değişik uzunluktaki buyruklarla kullanan bir mimaridir. İntel işlemcileri, bütün buyrukların bir bellek mahalinde işlem görebilme anlamına gelen yazmaç-bellek mimarisini kullanır, fakat diğer işlenen bir yazmaç olmalı. Bu ISA mimarisi değişik uzunluktaki buyrukların veri üzerinde işlem görmesine izin verir, örneğin 1, 2 veya 4 bayt uzunluğundaki buyruklar.

MIPS sağdan anlamlılığı kullanan, bayt adreslenebilir, üç adresli, sabit buyruk ve hafıza uzunluklu bir mimaridir. Sadece load ve store komutlarının belleğe ulaşabildiği yükle ve sakla mimarisidir. Diğer bütün buyruklar işlenenler için yazmaç kullanmak zorundadırlar. Bu çok geniş bir yazmaç kullanımını gerektirir. MIPS aynı zamanda sabit uzunluklu işlemler kullanır.

JAVA platformdan bağımsız olması açısından son derece ilginç ve son zamanlarda popülerliği artan bir dildir. Yani, eğer bir mimarî üzerinde bir kod derlemişsek ve programımızı farklı bir mimaride çalıştırmak istiyorsak (Sun Workstation gibi) bunu kodumuzu modifiye etmeden ve yeniden derlemeden yapabiliriz.

JAVA derleyicisi program ilk çalıştırıldığında yazmaç sayısı, bellek boyutu, I/O girişleri gibi mimarî bağlanımları açısından bir kısıtlama getirmiyor. Fakat daha sonra programı çalıştırmak için bir JAVA Virtual Machine (JVM)’e ihtiyaç duyulur. JVM asıl olarak donanım mimarisine giden bir katlayıcı fonksiyonu görür ve platforma bağımlıdır. Fakat JVM belli bir mimarî üzerinde görüldüğü zaman herhangi bir ISA’de derlenmiş bir programı çalıştırabilir. Çalıştırma anında JVM’in görevi baytkodları yükleme, kontrol etme, bulma ve yürütmedir. JVM sanal olmasına rağmen iyi tasarlanmış bir buyruk kümesi mimarisidir.

Buyruk kümesi mimarileri değişik tasarım ilkelerini kullanırlar. Buyruk kümesi mimarisinde başlıca hedefler; daha güçlü işlemler sunmak, buyruk sayısını ve karmaşıklığını azaltmak, hızı arttırmaktır. Buna karşılık daha yavaş saat sıklığı ve yüksek BBÇ (buyruk başına çevrim) ise karşılaşılabilecek tehlikelerdir. Buyruk kümesi mimarisi için iyi bir soyutlama gerekir.