ullanmaya ihtiyaç duyarlar. Yığın tabanlı mimarî genel amaçlı yazmaçları kullanmak yerine işlenenleri yığının en üstünde saklar ve en üstteki ögeye merkezî işlem biriminin ulaşmasını sağlar. (Makine mimarilerindeki en önemli veri yapılarından biri yığındır. Yığın yapısı karmaşık hesaplamalar sırasında ara değerleri verimli bir şekilde saklar, yordam çağırıldığı anda parametrelerin geçişini verimli bir şekilde sağlar, bununla birlikte yerel blok yapısının korunmasını da sağlar, değişkenlerin ve altyordamların kapsamlarını belirler.)
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. 
Bu yığın organizasyonu uzun aritmetik ifadeler için çok etkili ve verimlidir(RPN). Diğer bir adı Postfix gösterimi olan bu gösterime göre işleç işlenenlerden sonra yer alır (infix gösteriminde işleç işlenenlerin arasında yer alır, prefix gösteriminde ise işleç işlenenlerden önce gelir.).

Örnek olarak;
X + Y infix gösterimidir
+ X Y prefix gösterimidir
X Y + postfix gösterimidir

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.

(X + Y) x (W - Z) + 2

Denklemi RPN’de yazılırsa aşağıdaki gibi olur

XY + WZ - x2+

Dikkat edilecek olursa, RPN’de öncelikleri korumak amacıyla kullanılan parantezlere ihtiyaç duyulmaz.

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.


Aşağıdaki ifadeyi hesaplayalım;

Z = (X x Y) + (W x U)

Genelde, üç işlenene izin verildiğinde, en az bir işlenen yazmaç olur ve ilk işlenen genellikle hedef olur. Üç adresli buyrukları kullanırken, Z’nin hesaplanması için gereken kodu aşağıdaki gibi yazabiliriz;

Mult R1, X, Y
Mult R2, W, U
Add Z, R2, R1

Eğer iki adresli buyruklar kullanılıyorsa, bir adres genellikle bir yazmacı ifade eder (iki adresli buyruklar iki işlenenin de bellek adresi olmasına pek izin vermez). Diğer işlenen, bir yazmaç ya da bir bellek adresi olabilir. İki adresli buyruklar kullanırsak kodumuz aşağıdaki gibi olur;

Load R1, X
Mult R1, Y
Load R2, W
Mult R2, U
Add R1, R2
Store Z, R1
İlk işlenenin hedef mi yoksa kaynak mı olduğunu bilmek önemlidir, burada hedef olduğunu öngörüyoruz. (Bu noktada, Intel çevirici dili ile Motorola çevirici dili arasında geçiş yapmak zorunda kalan programcıların kafası karışabilir. Çünkü Intel çeviricisi ilk işleneni hedef alır, Motorola çeviricisi ise ilk işleneni kaynak alır.) 
Tek adresli buyruklar kullanıldığında, bir yazmaç (genellikle biriktirici ) buyruğun sonucu için hedef olarak gösterilir. Z’nin hesaplanmasındaki kod aşağıdaki gibi olur;

Load X
Mult Y
Store Temp
Load W
Mult U
Add Temp
Store Z

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. 
Sıfır adresli buyruklara sahip olan yığın tabanlı bir makinede bu programın ne yaptığını araştıralım şimdide. Yığın tabanlı mimariler Add, Subt, Mult veya Divide komutları için işlenen kullanmazlar. Bir yığına ve bu yığında pop ve push işlemlerine ihtiyaç duyulur. Yığına erişim gerçekleştiren işlemler, işlenenin yığına eklendiğini ya da yığından çıkarıldığını belirten bir adres alanına sahip olmalıdırlar (diğer bütün işlemler sıfır adreslidir). Push komutu işleneni yığının en üstüne iter. Pop komutu yığının en üstündeki elemanı yakalar ve işlenene yerleştirir. Bu mimari, Z’yi hesaplayacak olan programın çok uzun olmasına sebep olur. Aritmetik işlemlerin yığının en tepesindeki iki işleneni kullandığını, onları yığından çıkardığını ve daha sonra işlemin sonucunu yığının en tepesine eklediğini öngörelim, kodumuz aşağıdaki gibi oluşur;

Push X
Push Y
Mult
Push W
Push U
Mult
Add
Store Z
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. 
16-bit buyruklara ve 16 yazmaca sahip olan bir makine düşünelim. Bu kez basit bir ya da iki biriktirici yerine bir yazmaç kümesi bulunur, benzersiz bir yazmaç tanımlamak için 4 bit kullanırız. Her biri 3 yazmaç işlenenine sahip olan ya da işlem kodu için 4 bit, bellek adresi için 12 bit kullanan (4K boyutunda bir bellek olduğunu varsayıyoruz) 16 buyruğu şifreleyebiliriz. Bellek kaynağı 12 bite gereksinim duyar, diğer amaçlar için 4 bit kalır. Fakat, eğer bellekteki bütün veri ilk olarak bu yazmaç kümesindeki bir yazmaca yüklenirse, komut yalnızca 4 bit kullanarak (16 yazmaç olduğunu varsayarsak) gerekli veri ögesini seçebilir. Bu iki seçim aşağıdaki şekilde gösteriliyor;
Şekil : 16-bit buyruk biçimi için iki olasılık

Aşağıdaki buyrukları şifrelemek istediğimizi varsayalım;


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 ) {
else if (leftmost seven bits != 1111 111 ) {
else if (leftmost twelve bits != 1111 1111 1111 ) {
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.

Birçok bilgisayar buyruğu veri üzerinde yürütülür, ancak yürütülmeyen buyruklar da vardır. Bilgisayar üreticileri buyrukları aşağıdaki kategorilere ayırır; 

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.

Mesela belleğin bir konumundaki veri alınarak başka bir konumuna atılma işlemi için basit bir program yapılırsa;

LDA $0200; A «— [0200]
STA $2025 ; [2025] «— A

Burada [0200] adres konumundaki ve