MMIX - MMIX

MMIX
tasarımcı Donald Knuth
bitler 64 bit
tanıtıldı 1999
Tasarım RISC
kodlama Sabit
Dallanma Koşul Kodu
endianness Büyük
Açık Evet ve telifsiz
Kayıtlar
32 özel amaçlı kayıt
Genel amaç 256

MMIX (telaffuz em-karışım bir olan) 64 bit bilgi işlem azaltılmış komut seti (RISC) mimarisi ile tasarlanan Donald Knuth tarafından önemli katkıları ile, John L. Hennessy (tasarımına katkıda MIPS mimarisi () ve Richard L. Siteleri kim bir mimardı Alfa ) mimarisi. Knuth'un söylediği

MMIX, programlamanın makine düzeyindeki yönlerini göstermeyi amaçlayan bir bilgisayardır. Benim kitaplarda Bilgisayar Programlama Sanatı , yerini aldığı MIX ben öğrenmesi kolay olan makine dili sade ve zarif olacağını böylece MMIX tasarlamak için çabaladı ve ... eskiden böyle bir rol oynadığını 1960'ların tarzında bir makineyi. Aynı zamanda, MMIX'in prensipte kurulabilmesi ve hatta belki de piyasadaki en hızlı genel amaçlı bilgisayarlardan bazılarıyla rekabet edebilmesi için pratikte yüksek performans elde etmek için gereken tüm karmaşıklıkları dahil etmeye özen gösterdim."

Knuth, MMIX'in tasarımına 1999'da başladı ve tasarımın kararlı sürümünü 2011'de yayınladı. İşlemci "2009" olarak numaralandırıldı ve Knuth bunun diğer bilgisayar mimarilerinin sayılarının aritmetik ortalaması olduğunu açıklıyor ; Roma rakamlarıyla "MMIX" olmanın yanı sıra .

Mimari

MMIX, 256 64-bit genel amaçlı kayıt, 32 64-bit özel amaçlı kayıt, sabit uzunluklu 32-bit talimatlar ve 64-bit sanal adrese sahip, büyük endian 64-bit azaltılmış komut seti bilgisayarıdır (RISC). boşluk . MMIX komut seti, biri gelecekteki genişleme için ayrılmış 256 işlem kodu içerir. MMIX, IEEE 754 kayan noktalı sayıları kullanır .

Talimatlar

Tüm talimatların ilişkili bir anımsatıcısı vardır. Örneğin, talimat #20 (32 ondalık) ADD ile ilişkilidir. Çoğu komut sembolik forma sahiptir OP X,Y,Z, burada OP komut türünü belirtir, X komutun sonucunu saklamak için kullanılan kaydı belirtir ve geri kalanı komutun işlenenlerini belirtir. Bu alanların her biri sekiz bit genişliğindedir. Örneğin, ADD $0,$1,3"$0'ı 1 ve 3'ün toplamına ayarla" anlamına gelir.

Çoğu talimat ya anlık değerler alabilir ya da içerikleri kaydedebilir; bu nedenle tek bir komut anımsatıcısı iki işlem kodundan birine karşılık gelebilir.

MMIX programları tipik olarak MMIXAL derleme dili kullanılarak oluşturulur. Aşağıdaki, " Hello, world! " dizesini yazdıran basit bir MMIXAL programıdır :

        LOC   #100                   % Set the address of the program
                                     % initially to 0x100.

Main    GETA  $255,string            % Put the address of the string
                                     % into register 255.

        TRAP  0,Fputs,StdOut         % Write the string pointed to by
                                     % register 255 to the standard
                                     % output file.

        TRAP  0,Halt,0               % End process.

string  BYTE  "Hello, world!",#a,0   % String to be printed.  #a is
                                     % newline, 0 terminates the
                                     % string.

Kayıtlar

Bir MMIX yongasında, 0 ile 255 ABD Doları arasında belirlenmiş 256 doğrudan adreslenebilir genel amaçlı mimari kayıt ve 32 özel amaçlı mimari kayıt vardır. Özel amaçlı registerlara GET ve PUT komutları ile ulaşılabilir. Özel kayıtlardan ikisi, rL ve rG, genel kayıtlardan hangilerinin yerel ve hangilerinin küresel olduğunu belirler. $$' dan ([rL] − 1) tüm kayıtlar yerel kayıtlardır ve dahili kayıt yığınına açılan bir pencereyi temsil eder . [rL]... ([rG] − 1)'den gelen kayıtlar "marjinal kayıtlardır", bir işlemde kaynak olarak kullanılıyorlarsa her zaman 0 döndürürler. Bir işlemin hedefi olarak bir marjinal kaydın kullanılması, makinenin bu kaydı dahil etmek için rL'yi otomatik olarak artırmasına neden olur. Tüm kayıtlar [rG]... 255 $ global kayıtlar olarak adlandırılır ve kayıt yığınının parçası değildir.

Yerel kayıt yığını

Yerel kayıt yığını, her bir alt programa $0 ile $(rL − 1) arasında belirtilen kendi rL yerel kayıtlarını sağlar . Bir alt program çağrıldığında, bir dizi yerel kayıt yığından aşağı itilir (pencerenin başlangıcı kaydırılarak). Çağrılan alt yordamın argümanları kalan yerel kayıtlarda bırakılır. Bir alt program sona erdiğinde, daha önce basılan kayıtları açar. Dahili yığın yalnızca sınırlı sayıda kayıt içerebildiğinden, yığının bir kısmını bellekte depolamak gerekebilir. Bu, yerel kayıt yığınının hangi bölümünün bellekte olduğunu ve hangi bölümünün hala yerel fiziksel kayıtlarda olduğunu kaydeden özel kayıtlar rO ve rS ile gerçekleştirilir. Kayıt yığını, hızlı alt program bağlantısı sağlar.

Özel kayıtlar

32 özel fiziksel mimari kayıt aşağıdaki gibidir:

  1. rB, önyükleme kaydı (yolculuk)
  2. Açarken, rB ← 255 $ ve 255 $ ← rJ. Böylece rJ'yi genel bir kayıt defterine kaydeder.
  3. rd, temettü kaydı
    İşaretsiz tamsayı bölme, bunu diğer işlenen tarafından bölünecek olan 128 bitlik girişin sol yarısı olarak kullanır.
  4. rE, epsilon kaydı
    Epsilon'a göre değişken karşılaştırmalar için kullanılır.
  5. rH, himult kaydı
    İşaretsiz tamsayı çarpmasının 128 bitlik sonucunun sol yarısını saklamak için kullanılır.
  6. rJ, dönüş atlama kaydı
    PUSH'lar ve bir PUSH'dan geri dönmek için POP tarafından bir sonraki talimatın adresini kaydetmek için kullanılır.
  7. rM, multipleks maske kaydı
    Multiplex komutu tarafından kullanılır.
  8. rR, kalan kayıt
    Tamsayı bölümünün kalanına ayarlanır.
  9. rBB, önyükleme kaydı (tuzak)
    Yakalarken, rBB ← 255 $ ve 255 $ ← rJ. Böylece rJ'yi genel bir kayıt defterine kaydetmek
  10. rC, döngü sayacı
    Her döngüde artırıldı.
  11. rN, seri numarası
    Bu belirli MMIX işlemcisini tanımlayan bir sabit.
  12. rO, kayıt yığını ofseti
    Kayıt yığınını uygulamak için kullanılır.
  13. rS, kayıt yığını işaretçisi
    Kayıt yığınını uygulamak için kullanılır.
  14. rI, aralık sayacı
    Her döngüde azaltıldı. Sıfır olduğunda kesintiye neden olur.
  15. rT, tuzak adres kaydı
    Gezi vektörünün adresini saklamak için kullanılır.
  16. rTT, dinamik tuzak adres kaydı
    Tuzak vektörünün adresini saklamak için kullanılır.
  17. rK, kesme maskesi kaydı
    Belirli kesmeleri etkinleştirmek ve devre dışı bırakmak için kullanılır.
  18. rQ, kesme isteği kaydı
    Kesintileri meydana geldikçe kaydetmek için kullanılır.
  19. rU, kullanım sayacı
    Yürütülen komutların sayısını tutmak için kullanılır.
  20. rV, sanal çeviri kaydı
    Sanal adresleri fiziksel adreslere çevirmek için kullanılır. Segmentlerin boyutunu ve sayısını, sayfa tablosunun kök konumunu ve adres alanı numarasını içerir.
  21. rG, küresel eşik kaydı
    rG'ye eşit veya daha büyük bir sayıya sahip tüm genel kayıt referansları, global kayıtlara atıfta bulunur.
  22. rL, yerel eşik kaydı
    rL'den küçük bir sayıya sahip tüm genel kayıt referansları, yerel kayıtlara atıfta bulunur.
  23. rA, aritmetik durum kaydı
    Taşma ve sıfıra bölme gibi aritmetik istisnaları kaydetmek, etkinleştirmek ve devre dışı bırakmak için kullanılır.
  24. rF, arıza yeri kaydı
    Hataya neden olan talimatın adresini saklamak için kullanılır.
  25. rP, tahmin kaydı
    Koşullu takas (CSWAP) tarafından kullanılır.
  26. rW, nerede-kesilen kayıt (trip)
    Açma sırasında, kesintiye uğrayandan sonraki talimatın adresini saklamak için kullanılır.
  27. rX, yürütme kaydı (trip)
    Açılırken, kesilen talimatı saklamak için kullanılır.
  28. rY, Y işleneni (yolculuk)
    Açma sırasında, kesilen talimatın Y işlenenini saklamak için kullanılır.
  29. rZ, Z işleneni (açma)
    Açma sırasında, kesilen komutun Z işlenenini saklamak için kullanılır.
  30. rWW, nerede-kesilen kayıt (tuzak)
    Yakalarken, kesintiye uğrayandan sonraki talimatın adresini saklamak için kullanılır.
  31. rXX, yürütme kaydı (trap)
    Yakalarken, kesilen talimatı saklamak için kullanılır.
  32. rYY, Y işleneni (tuzak)
    Yakalarken, kesilen komutun Y işlenenini saklamak için kullanılır.
  33. rZZ, Z işleneni (tuzak)
    Yakalarken, kesilen komutun Z işlenenini saklamak için kullanılır.

Neredeyse tüm diğer CPU'larda çalışan programlar gibi, MMIX programları da çeşitli şekillerde kesilebilir . Zamanlayıcılar gibi harici donanımlar, yaygın bir önalım (bilgi işlem) kesintileri kaynağıdır . Birçok talimat bazı istisnai durumlarda kesintiye neden olur; gibi bellek koruma sayfa hatası sanal bellek ve kayan nokta uygulamak için kullanılan istisnalar durum işleme . MMIX'in 2 tür kesmesi vardır: "tripler" ve "traps". "Açmalar" ve "tuzaklar" arasındaki temel fark, tuzakların kontrolü işletim sistemindeki bir "tuzak işleyici" programına göndermesi (bindirme), ancak açmaların denetimi kullanıcı uygulamasındaki bir "açma işleyici" programına göndermesidir (açma). Kullanıcılar ayrıca , diğer bilgisayar sistemlerindeki bazı tuzak türlerine benzer şekilde, herhangi bir kesme işleyicisini açık yazılım kesme talimatları TRIP ve TRAP ile çalışmaya zorlayabilir . Özellikle, bir kullanıcı programından işletim sistemine yapılan bir sistem çağrısı , bir TRAP komutu kullanır.

Donanım uygulamaları

Ekim 2015 itibariyle, MMIX komut seti mimarisinin bilinen hiçbir donanım uygulaması mevcut değildir. Ancak, fpgammix projesi, MMIX'i Verilog'da uygulayarak, sahada programlanabilir bir geçit dizisi kullanarak uygulamayı mümkün kılar .

Yazılım araçları

MMIX komut seti mimarisi, bilgisayar mimarisi araştırma ve yazılım geliştirme için bir dizi yazılım aracı tarafından desteklenir.

Simülatörler ve montajcı

  • MMIXware – Donald Knuth'un MMIX-SIM basit (davranışsal) simülatörü, MMIXAL montajcısı, test takımı, örnek programlar, tam belgeler ve MMIX mimari (boru hattı) simülatörü ( gzipped tardosya).
  • MMIXX – MIT'nin Teorik Fizik Merkezi'nden Andrew Pochinsky'nin katkıda bulunduğu X11 tabanlı bir grafik paketi , yukarıdaki MMIXware kaynaklarıyla birleştirildiğinde, MMIX sanal makinesini 640×480 piksel , gerçek renkli 'sanal ekran' ile zenginleştirir ( UNIX/Linux için).

Derleyici

GNU Compiler Collection bir MMIX içeren arka uç onun için C / C ++ Hans-Peter Nilsson ve Kasım 2017 sonlarında 2001 As beri ana GCC dağıtımının parçası katkıda derleyicinde, GCC için MMIX arka uç aktif olmaya devam ediyor gönüllüler tarafından geliştirilmiş ve sürdürülmüştür.

  • Hans-Peter Nilsson'dan GCC + MMIX araçları için kurulum talimatları.
  • §3.17.26. GNU GCC sürüm 7.2.0 için MMIX Seçenekleri (GNU GCC Web sitesi).
  • §9.28.  İçin MMIX bağımlı Özellikler GNU olarak gelen GNU Binutils sürümü 2.29, GNU GCC için montajcı arka uç (GNU Binutils İnternet sitesi).

Yukarıdaki araçlar teorik olarak tüm bir FreeBSD , Linux veya diğer benzer işletim sistemi çekirdeğini MMIX donanımına derlemek, oluşturmak ve önyüklemek için kullanılabilir , böyle bir donanım mevcuttu.

Ayrıca bakınız

Referanslar

  • Donald E. Knuth (2005). Bilgisayar Programlama Sanatı Cilt 1 Fasikül 1: Yeni Binyıl için MMIX Bir RISC Bilgisayarı . Addison-Wesley. ISBN  0-201-85392-2 ( hata hatası )

Dış bağlantılar

  • MMIX Ana Sayfası
  • Donald Knuth'un MMIX sayfasıMMIX'e kısa bir giriş ve Knuth'un TAoCP'de varsayımsal bir derleme dili kullanma nedenleri .
  • Donald Knuth MMIX haber sayfası - Bir açık kaynak yazılmış simülatör CWEB , bir programcı manuel ve örnek programların.
  • MMIXmasters web sitesi — TAOCP, Cilt 1-3'teki tüm programları eski MIX'ten yeni MMIX'e dönüştüren gönüllüler (MMIXmasters) için bir web sitesi.
  • VMMMIX — VMMMIX, MMIX sanal makinesidir. Konsol, HDD ve Ethernet I/O'larına sahiptir. Şu anda, bu sanal makine yalnızca Windows üzerinde çalışır. Ve Linux bu MMIX sanal makinesinde çalışır.
  • VMB Ana Sayfası — Sanal Anakart Projesi, MMIX CPU'nun uygun bir sürümüyle kullanılabilen bir tak ve çalıştır aygıt koleksiyonu sunar.