8086 işlemcinin mikrokod motoru nasıl çalışır

entry2 galeri2
    1.
  1. devamı için, emekçi kardeşlerimiz buna benzer binlerce bloğa sahip. varsa, ilgi, alakası ve zamanı olan okuyabilir, Ken Shirriff ten:
    http://www.righto.com/202...ors-microcode-engine.html

    8086 mikroişlemci, Intel tarafından 1978'de tanıtılan çığır açıcı bir işlemciydi. Hala masaüstü ve sunucu bilişimine hakim olan x86 mimarisinin yolunu açtı. 8086 yongası, talimat setini uygulamak için dahili olarak mikrokodu kullanır. Kalıp fotoğraflarından 8086'ya tersine mühendislik uyguluyorum ve bu blog yazısında çipin mikro kod motorunun nasıl çalıştığı anlatılıyor. Burada mikro kodun1 içeriğini veya mikro kodun işlemcinin geri kalanını nasıl kontrol ettiğini tartışmayacağım. Bunun yerine, 8086'nın hangi mikro kodun çalıştırılacağına nasıl karar verdiğine, mikro kodda nasıl adım attığına, mikro kod içindeki atlamaları ve çağrıları nasıl ele aldığına ve mikro kodu fiziksel olarak nasıl sakladığına bakacağım. 1978 teknolojisiyle mikro kodu çipe sığdırmak zorlu bir işti, bu nedenle Intel, mikro kodun boyutunu küçültmek için birçok optimizasyon tekniği kullandı.

    Kısaca 8086'daki mikro kod, her biri 21 bit genişliğinde 512 mikro talimattan oluşur. Mikro kod motoru, mikro kod boyunca adım adım ilerleyen 13 bitlik bir kayıt biriminin yanı sıra, mikro kod alt program çağrıları için dönüş adresini depolamak üzere 13 bitlik bir alt program kaydına sahiptir. Mikro kod motoruna iki küçük ROM yardımcı olur: makine talimatlarını kategorize etmek için "Grup Kod Çözme ROM'u" ve adres hesaplama ve diğer roller için mikro kod alt yordamlarına dallanmak için "Çeviri ROM'u". Fiziksel olarak mikro kod 128x84 boyutunda bir dizide saklanır. Depolamayı optimize eden özel bir adres kod çözücüye sahiptir. Mikro kod devresi aşağıdaki kalıp fotoğrafında görülebilir.
    https://galeri.uludagsozluk.com/r/2342601/+

    Mikrokod nedir?

    Makine talimatları genellikle bir bilgisayarın gerçekleştirdiği temel adımlar olarak kabul edilir. Ancak her talimat genellikle işlemci içinde birden fazla işlem gerektirir. Örneğin, bir ADD talimatı, bellek adresini hesaplamayı, değere erişmeyi, değerin Aritmetik-Mantık Birimi'ne (ALU) taşınmasını, toplamın hesaplanmasını ve sonucun bir kayıt defterinde saklanmasını içerebilir. Bilgisayar tasarımının en zor kısımlarından biri, bir talimatın her adımı için işlemcinin uygun bölümlerine sinyal gönderen kontrol mantığını oluşturmaktır. Basit yaklaşım, parmak arası terliklerden ve kapılardan çeşitli adımlardan geçen ve kontrol sinyallerini üreten bir devre oluşturmaktır. Ancak bu devre karmaşıktır ve hataya açıktır.

    1951'de Maurice Wilkes mikrokod fikrini ortaya attı: Kontrol devresini karmaşık mantık kapılarından oluşturmak yerine, kontrol mantığı, kontrol deposu adı verilen özel bir bellekte saklanan başka bir kod katmanı (yani mikrokod) ile değiştirilebilir. Bir makine talimatını yürütmek için bilgisayar, mikro kodla belirtilen daha basit birkaç mikro talimatı dahili olarak yürütür. Başka bir deyişle mikro kod, makine komutları ile donanım arasında başka bir katman oluşturur. Mikro kodun temel avantajı, işlemcinin kontrol mantığını zor bir mantık tasarım görevi yerine bir programlama görevine dönüştürmesidir. Mikrokod ayrıca, işlemciyi daha karmaşık hale getirmeden (mikrokodun boyutu dışında) karmaşık talimatların ve büyük bir talimat setinin uygulanmasına da izin verir. Son olarak, mikro koddaki bir hatayı düzeltmek genellikle devre mantığından daha kolaydır.

    ilk bilgisayarlar, büyük ölçüde mikrokodu tutacak iyi depolama teknolojilerinin bulunmamasından dolayı mikrokod kullanmıyordu. Bu 1960'larda değişti; örneğin IBM, System/360'da (1964) mikrokodu kapsamlı bir şekilde kullandı. (Bunun hakkında burada yazmıştım .) Ancak ilk mikroişlemciler mikrokod kullanmıyordu ve mantık kapılarıyla sabit kodlu kontrol mantığına geri dönüyorlardı. 3 Bu mantık genel olarak daha kompakttı ve devre optimize edilebildiği için mikro koddan daha hızlı çalışıyordu. ilk mikroişlemcilerde alan çok önemli olduğundan ve talimat setleri nispeten basit olduğundan, bu ödünleşim mantıklıydı. Ancak mikroişlemci komut setleri karmaşıklaştıkça ve transistörler ucuzlaştıkça mikrokod çekici hale geldi. Bu, örneğin Intel 8086 (1978) ve 8088 (1979) ve Motorola 68000 (1979) modellerinde mikro kodun kullanılmasına yol açtı. 2
    8086'nın mikro kodu

    8086'nın mikro kodu çoğu işlemciden çok daha basittir ancak yine de oldukça karmaşıktır. Aşağıdaki kod, 16 mikro talimattan oluşan tam sayı bölümünün bir parçası olan "CORD" adı verilen bir rutin için 8086'daki mikro kod rutinidir. Bu mikrokodun nasıl çalıştığını detaylı olarak anlatmayacağım ama bir fikir vermek istiyorum. Her satırın solunda bir adres (mavi) ve sağında (sarı) bir zaman adımı (örn. saat döngüsü) sırasındaki düşük seviyeli eylemleri belirten mikro talimat bulunur. Her mikro talimat, verileri bir kaynak yazmacından (S) bir hedef yazmacına (D) aktararak bir hareket gerçekleştirir. (Kaynak Σ, ALU çıkışını gösterir.) Paralellik için mikro talimat, hareketle aynı anda bir veya iki işlem gerçekleştirir. Bu işlem "a" ve "b" alanlarıyla belirtilir; anlamları tür alanına bağlıdır. Örneğin tip 1, çıkarma (SUBT) veya taşıma yoluyla sola döndürme (LRCY) gibi bir ALU talimatını belirtir. Tip 4, bir mikrokod altyordamından dönen "RTN" gibi iki genel işlemi seçer. Tip 0 bir atlama işlemini belirtir; "UNC 10", 10. satıra koşulsuz bir atlamadır, "CY 13" ise taşıma bayrağı ayarlanmışsa 13. satıra atlar. Son olarak "F" alanı durum kodu bayraklarının güncellenmesi gerekip gerekmediğini gösterir. Önemli noktalar, mikro talimatların basit olması ve bir saat döngüsünde yürütülmesi, performansı en üst düzeye çıkarmak için paralel olarak birden fazla işlemi gerçekleştirebilmesi ve koşullu atlamalar ve alt rutinler gibi kontrol akışı işlemlerini içermesidir.

    Her talimat, açıkça gösterilen 9 bit ve 4 bitlik bir dizi sayacı "CR"den oluşan 13 bitlik bir adreste (mavi) saklanır. Sekiz numaralı adres biti genellikle makine komutunun işlem koduna karşılık gelir. "X" biti, sıfırlama ve kesme kodu, adres hesaplama ve çarpma/bölme algoritmaları gibi doğrudan bir makine talimatına bağlı olmayan kod için daha fazla adres alanı sağlayan ekstra bir bittir.

    Bir mikro talimat aşağıda gösterildiği gibi 21 bit olarak kodlanmıştır. Her mikro talimat, her biri 5 bit ile belirtilen bir kaynak yazmacından hedef yazmacına bir hareket içerir. Kalan bitlerin anlamı, iki veya üç bit uzunluğundaki tür alanına bağlı olduğundan biraz yanıltıcıdır. "Kısa atlama" (tip 0), 16 mikro talimattan oluşan mevcut blok içindeki koşullu bir atlamadır. ALU işlemi (tip 1), aritmetik-mantık birimini bir işlemi gerçekleştirecek şekilde ayarlar. Defter tutma işlemleri (tip 4), ön alım kuyruğunun temizlenmesinden mevcut talimatın sonlandırılmasına kadar herhangi bir işlemi kapsar. Bellek okuma veya yazma türü 6'dır. "Uzun atlama" (tip 5), 16 sabit mikrokod konumundan (harici bir tabloda belirtilen) herhangi birine koşullu bir atlamadır. Son olarak, bir "uzun çağrı" (tip 7), 16 konumdan birine (atlama hedeflerinden farklı) yapılan koşullu bir alt program çağrısıdır.

    Bu "dikey" mikro kod formatı, kontrol sinyallerini çeşitli alanlara kodlayarak mikro kod için gereken depolama alanını azaltır. Ancak alanları işlemek ve düşük seviyeli kontrol sinyallerini oluşturmak için bazı kod çözme mantığı gerekir. Şaşırtıcı bir şekilde, spesifik bir "mikrokod kod çözücü" devresi yoktur. Bunun yerine mantık, ihtiyaç duyulan yerde kontrol sinyalleri üretmek için çeşitli mikro kod bit desenlerini arayarak çip boyunca dağılmıştır.
    Talimatlar ROM'a nasıl eşlenir?

    ilginç bir konu, mikro talimatların ROM'da nasıl düzenlendiği ve belirli bir makine talimatı için doğru mikro talimatların nasıl yürütüldüğüdür. 8086, makine talimatlarından, makine talimatlarının mikro kodu paylaşmasına olanak tanıyan bir mikro kod adresine akıllı bir eşleme kullanır.

    Farklı işlemciler mikrokod organizasyonu için çeşitli yaklaşımlar kullanır. Bir teknik, her mikro talimatın bir sonraki mikro talimatın adresini içeren bir alan içermesidir. Bu, mikro talimatların düzenlenmesi için tam bir esneklik sağlar, ancak adresi tutacak bir alan gerektirir ve her bir mikro talimattaki bit sayısını artırır. Yaygın bir alternatif, yeni bir adrese açık bir geçiş olmadığı sürece, her bir mikro adreste adım atan bir mikro program sayacıyla mikro talimatları sırayla yürütmektir. Bu yaklaşım, her talimatta bir adres alanının maliyetini ortadan kaldırır, ancak artırıcılı bir program sayacı gerektirir, bu da donanım karmaşıklığını artırır.

    8086 hibrit bir yaklaşım kullanıyor. 4 bitlik bir program sayacı, adresin alt 4 biti boyunca adım atar, böylece 16'ya kadar mikro talimat, atlama olmadan sırayla yürütülebilir. Bu yaklaşımın avantajı, program sayacı için 13 bitlik bir artırıcı yerine daha küçük bir 4 bitlik artırıcı gerektirmesidir. Mikro kod motoru, tam 13 bitlik bir adres yerine 4 bitlik bir atlama hedefi kullanarak 16 talimattan oluşan grup içinde atlamayı kolaylaştıran bir "kısa atlama" işlemi sağlar.

    Mikro koddaki bir diğer önemli tasarım kararı, her makine talimatı için başlangıç ​​mikro adresinin nasıl belirleneceğidir. Yani ADD yapmak istiyorsanız ADD'nin mikrokodu nerede başlıyor? Yaklaşımlardan biri, başlangıç ​​adreslerinin tablosudur: sistem, ADD'nin başlangıç ​​adresini bulmak için tabloya bakar, ancak bu, 256 girişten oluşan büyük bir tablo gerektirir. ikinci bir yaklaşım ise işlem kodu kod değerini başlangıç ​​adresi olarak kullanmaktır. Yani, 0x05 numaralı bir ADD talimatı mikro adres 5'te başlayacaktır. Bu yaklaşımın iki sorunu vardır. Öncelikle, ardışık mikro komutlar farklı makine komutlarına ait olduğundan mikrokodu sırayla çalıştıramazsınız. Üstelik mikrokod ROM'da her talimatın farklı bir adresi olduğundan mikrokodu paylaşamazsınız.

    8086 bu sorunları iki şekilde çözer. ilk olarak, makine talimatları mikro kodda on altı yuva aralıklarla yerleştirilmiştir. Başka bir deyişle, mikrokod ROM'daki başlangıç ​​adresini oluşturmak için işlem kodu 16 ile çarpılır (eklenmiş dört sıfır vardır), böylece her makine talimatını uygulamak için bol miktarda alan olur. ikinci teknik, ROM'un adreslemesinin kodunun tamamen çözülmesi yerine kısmen çözülmesidir, böylece birden fazla mikro adres aynı fiziksel depolamaya karşılık gelebilir. 4

    Bunu somutlaştırmak için, 8086'nın aritmetik-mantık talimatlarını göz önünde bulundurun: belleğe bir baytlık kayıt ekle, bir baytlık kayıt için bellek ekleyin, bir kelimelik kayıttan hafızayı çıkarın, tek kelimelik x veya hafızaya kayıt vb. 8 ALU işlemi vardır ve her biri kaynak veya hedef olarak belleğe sahip bayt veya kelime boyutunda olabilir. Bu, 32 farklı makine işlem kodu sağlar. Bu işlem kodları dikkatlice atanmıştır, dolayısıyla hepsi 00xxx0xx biçimine sahiptir. ROM adresi kod çözücüsü, bu konumlardaki üç 0 biti arayacak ve diğer bitleri yok sayacak şekilde tasarlanmıştır, böylece bu modelle eşleşecektir. Sonuç olarak, bu ALU talimatlarının 32'si de aynı ROM sütunu seçme satırını etkinleştirir ve bu nedenle hepsi aynı mikro kodu paylaşarak ROM'un boyutunu küçültür.
    Mikro kod ROM'un fiziksel düzeni

    Mikro kod ROM'u 21 bitlik 512 kelime içerir, dolayısıyla bariz düzen 512 sütun ve 21 satır olacaktır. Ancak bu boyutlar ROM'u fiziksel olarak oluşturmak için pratik değildir çünkü çok uzun ve ince olacaktır. Bunun yerine, ROM, her sütunda dört kelimenin gruplandırılmasıyla oluşturulur, bu da kareye çok daha yakın olan 84 satırlık 128 sütunla sonuçlanır. Bu yalnızca fiziksel düzeni daha uygun hale getirmekle kalmaz, aynı zamanda sütun kod çözücülerin sayısını 512'den 128'e düşürerek devre boyutunu azaltır. Her ne kadar ROM artık dört sıradan hangisinin her bir çıkış bitine karşılık geleceğini seçmek için 21 çoklayıcıya ihtiyaç duysa da, devre hala çok daha küçüktür. Bununla birlikte, bitleri göz ardı ederek adresleri bir araya getirme yeteneği arasında bir denge vardır. Artık her kod çözücü tek bir sözcük yerine dört sözcükten oluşan bir sütun seçiyor, dolayısıyla dört sözcükten oluşan her bloğun ardışık adreslere sahip olması gerekiyor.
    https://galeri.uludagsozluk.com/r/2342602/+

    Yukarıdaki resimde mikro kodun nasıl saklandığı ve erişildiği gösterilmektedir. En üstte, aşağıda ayrıntılı olarak tartışılacak olan 13 bitlik mikro kod adres kaydı bulunur. Sütun seçim devresi, mikro kod deposunun bir sütununu seçmek için 13 adres bitinden 11'inin kodunu çözer. Solda, çoklayıcılar kalan iki adres bitini (özellikle en düşük iki sıra bitini) kullanarak her dört sıradan bir biti seçerler. Seçilen 21 mikrokod çıkışı mandallanır ve işlemcinin geri kalanına beslenir; burada daha önce açıklandığı gibi kodları çözülür ve işlemcinin eylemlerini kontrol ederler.
    Mikro kodu optimize etme

    1978'de mikro kod ROM'da depolanabilecek bit sayısı oldukça sınırlıydı. Özellikle 8086 yalnızca 512 mikro talimat içerir. Tek baytlık işlem kodunda, birden fazla adresleme moduyla birleştirilmiş yaklaşık 256 makine kodu talimatı bulunduğundan ve her talimat birden fazla mikro talimat gerektirdiğinden, mikro kodun uygun hale getirilmesi için sıkıştırma ve optimizasyon gerekliydi. 5 Ana fikir, işlevselliği mikro kodun dışına ve anlamlı olduğunda ayrık mantığa taşımaktı. Bunu yaptıkları yollardan bazılarını anlatacağım.

    8086, toplama ve çıkarma gibi işlemlerin yanı sıra AND ve XOR gibi mantıksal işlemleri de gerçekleştiren bir aritmetik-mantık birimine (ALU) sahiptir. Bellek adresini hesaplayan, verileri getiren, ekleme işlemini gerçekleştiren ve sonucu saklayan birkaç mikro işlemle uygulanan ADD makine talimatını düşünün. Çıkarma, AND veya XOR için makine talimatları, ALU'nun farklı bir işlem gerçekleştirmesi dışında aynı adımları gerektirir. Toplamda 8086, ALU tarafından gerçekleştirilen işlem dışında birbirinin aynı olan sekiz ALU tabanlı işleme sahiptir. 6 8086, bu sekiz makine talimatının aynı mikrokodu paylaştığı bir "numara" kullanır. Spesifik olarak mikro kod, ALU'ya özel bir işlem XI gerçekleştirmesini söyler; bu, ALU'nun talimatın uygun bitlerine bakması ve uygun işlemi yapması gerektiğini gösterir. 7 Bu, ALU için ek mantık gerektirme pahasına, bu işlemler için mikro kodu sekiz kat küçültür. Özellikle, ALU kontrol devresi ilgili talimat bitlerini tutacak bir kayıt defterine ve bu bitlerin kodunu düşük seviyeli ALU kontrol sinyallerine çevirecek bir PLA'ya sahiptir.

    Benzer şekilde, 8086'da belirli bir kaydı artırmak için sekiz makine talimatı (8'lik bir gruptan) ve bir kaydı azaltmak için sekiz talimat bulunur. 16 talimatın tümü aynı mikro talimat seti tarafından gerçekleştirilir ve ALU, uygun şekilde artırma veya azaltma yapar. Ayrıca, kayıt kontrol devresi, mikro kodun müdahalesi olmadan, talimat tarafından hangi kaydın belirleneceğini belirler.

    Başka bir optimizasyon, 8086'nın çiftler halinde birçok makine talimatına sahip olmasıdır: 8 bitlik bir sürüm ve 16 bitlik bir sürüm. Bir yaklaşım, biri tek bir baytı, diğeri iki baytı işleyecek şekilde iki talimat için ayrı bir mikrokoda sahip olmak olabilir. Bunun yerine makine talimatları mikrokodu paylaşır. Karmaşıklık, verileri veri yolunda taşıyan devrelere aktarılır: bir baytı mı yoksa bir kelimeyi mi işleyeceğine karar vermek için talimatın düşük bitine bakar. Bu, etkilenen birçok talimat için mikro kod boyutunu yarıya indirir.

    Son olarak, tek bir döngüde gerçekleşebilecek basit talimatlar mikrokod yerine mantık kapılarıyla uygulanır. Örneğin, CLC (açık taşıma bayrağı) talimatı bayrağı doğrudan günceller. Benzer şekilde, bölüm seçimi, talimat kilitleme veya tekrarlama için önek talimatları mantıkta gerçekleştirilir. Bu talimatlarda herhangi bir mikro kod kullanılmamaktadır; bu, aşağıda daha sonra önemli olacaktır.

    Bunun gibi teknikler kullanılarak, mikro kodda (yaklaşık 256 yerine) yaklaşık 75 farklı talimat türü uygulanır ve bu da mikro kodu çok daha küçük hale getirir. Buradaki değiş tokuş, 8086'nın daha fazla mantık devresi gerektirmesidir, ancak tasarımcılar bu değiş tokuşu değerli bulmuşlardır.
    ModR/M baytı

    Ancak 8086 mikrokodu için başka bir komplikasyon daha var. Çoğu 8086 talimatının ikinci bir baytı vardır: Talimatların adresleme modunu karmaşık bir şekilde kontrol eden ModR/M baytı (aşağıda gösterilmiştir). Bu bayt, 8086 talimatlarına çok fazla esneklik sağlar: iki kaydı, bir kaydı ve bir hafıza konumunu veya bir kaydı ve talimatta belirtilen "anlık" değeri kullanabilirsiniz. Bellek konumu, isteğe bağlı olarak eklenen bir baytlık veya iki baytlık yer değiştirme ile 8 dizin kayıt kombinasyonu ile belirtilebilir. (Bu, örneğin bir dizi veya yapıdaki verilere erişmek için kullanışlıdır.) Bu adresleme modları güçlü olmasına rağmen mikro kod için sorun oluşturur.

    MCS-86 Assembly Dili Referans Kılavuzu'ndan ModR/M baytının bir özeti.
    MCS-86 Assembly Dili Referans Kılavuzu'ndan ModR/M baytının bir özeti .

    Farklı adresleme modları farklı adım dizileri gerektirdiğinden, bu farklı adresleme modlarının mikro kodda uygulanması gerekir. Başka bir deyişle, sorunu mantık kapılarına itmek şeklindeki önceki numarayı kullanamazsınız. Ve mikro kodun boyutu kontrolden çıkacağından, her adresleme modu için her talimatın ayrı bir uygulamasını açıkça istemezsiniz.

    Çözüm, bellek adresini hesaplamak için bir alt program (mikro kodda) kullanmaktır. Böylece talimatlar her adresleme modu için mikrokodu paylaşabilir. Ancak bu, mikro kod motoruna çok fazla karmaşıklık katar, çünkü doğru konuma dönebilmesi için mikro alt program çağrısı için mikro adresi saklaması gerekir. Bunu desteklemek için mikro kod motorunda bu dönüş adresini tutacak bir kayıt vardır. (Tam bir yığına sahip olmadığından iç içe alt program çağrıları gerçekleştiremezsiniz, ancak bu önemli bir sınırlama değildir.)

    Mikrokod, farklı adresleme modları için yaklaşık 10 alt rutinin yanı sıra farklı yer değiştirme boyutları için dört rutine sahip olur. (Kaynak kayıtları için 8 olasılık, mikrokod yerine kayıt seçme mantığında ele alınır.) Böylece, mikro kod, uygun adres kayıt(lar)ını ve yer değiştirmeyi ekleyen yaklaşık 14 kısa rutinle 256 farklı adresleme modunu işler. hafıza adresi.

    Bir başka komplikasyon da makine talimatlarının, işlem koduna bağlı olarak ModR/M baytı tarafından belirtilen kaynak ve hedefi değiştirebilmesidir. Örneğin, bir çıkarma talimatı bir kayıttan bir hafıza konumunu çıkarırken, farklı bir çıkarma talimatı bir hafıza konumundan bir kaydı çıkarır. iki değişken, talimatın 1. biti olan "yön" biti ile ayırt edilir. Bu değişkenler kontrol mantığı tarafından işlenir, böylece mikro kod bunları göz ardı edebilir. Spesifik olarak, kaynak ve hedef spesifikasyonları yazmaç kontrol devresine gitmeden önce, bir geçiş devresi bunları yön bitinin değerine bağlı olarak değiştirebilir.
    0 ...
  2. 2.
  3. küresel ıkınmanın nişanlısını okumak daha mantıklı geldi şuan.
    0 ...
© 2025 uludağ sözlük