CPU "Kineng Komut Seti" ve ilgili patent teknolojisine giriş ve tartışma

Forumun işlemci tasarımı bölümüne göz attığımda bu gönderiyi buldum.Çok ilginç buldum, bu yüzden herkese ilettim. Tartışmak ve önerilerde bulunmak için CPU tasarım arkadaşlarına hoş geldiniz.

Orijinal posta adresi:

Aşağıdaki orijinal metindir:

"Soğuk Enerji Komut Setimi" tanıtmadan önce, öncelikle onunla ilgili patentli teknolojiyi tanıtın:

İlk patentli teknoloji: patent numarası: 201310153746.1, patent adı: "bilgisayar veri işleme talimatlarına atlama fonksiyonları eklemek için bir yöntem ve CPU modülü".

Bu patentin ana fikri, durum kodunu, ters koşul kodunu ve atlama vektörünü bilgisayar veri işleme talimatına eklemektir, böylece veri işleme talimatı artık tek bir veri işleme değil, aynı zamanda atlama yeteneğine de sahiptir. Programın yoğunluğunu ve yürütme verimliliğini artırmaktır. (Ayrıntılar için lütfen patent spesifikasyonuna bakın)

Yukarıdaki teknik yöntemlerin uygulanmasından sonra, veri işleme talimatının bir sıçrama işlevi vardır ve burada ona sıçrama işlevi olan bir veri işleme talimatı diyorum. Bu veri işleme talimatlarının atlama işlevli montaj formatı aşağıdaki gibidir:

İşlem kodu < Durum kodu > ,,,

E'nin ters koşul kodu olduğu ve atlama vektörünün PC'ye göre atlama vektörü olduğu yerde.

Montaj talimatı formatına dikkat edin, geleneksel veri işleme talimat talimatından daha fazla "" alan olduğunu bulduk, bu alan atlama fonksiyonunu tanımlamak için kullanılır. E'nin ters koşul kodu anımsatıcı olduğu ve JMP'nin anlık atlama anımsatıcısı olduğu durumlarda. E gizliyse, aynı koşul atlaması anlamına gelir, yani ek atlama koşulu, işlem kodu son ekinin koşul kodu ile aynıdır; E ortaya çıkarsa, bir ters koşul sıçramasını, yani ek atlama koşulunu ve işlem kodu son ekini belirtir Durum kodu tam tersidir.

Montaj talimat formatı: operatör < koşul > Operand 1, operand 2, ..,

Bunların arasında: koşul ------ durum kodu, yani: koşul kodunun gereksinimleri karşılanırsa, operatör tarafından tanımlanan işlem gerçekleştirilir; koşul kodu yoksa, şu anlama gelir: operatör tarafından tanımlanan işlem koşulsuz gerçekleştirilir.

E ------- Negatif durum kodu, yani Else.

JMP #v --- hemen #v talimatlarına atlamak anlamına gelir.

Örneğin: SUB < koşul > Rd, Rn, Rj,

Bazı veri işleme talimatlarının koşul kodları, ters durum kodları ve sıçrama vektörleri olmadan koşulsuz olarak yürütüldüğüne işaret edilmelidir.

Pratik uygulama örnekleri aşağıdaki gibidir:

SUBEQ R3, R1, R2, EJMP lab_1; // Eğer eşitlerse, R3ßR1-R2 çalıştırın; aksi takdirde, hemen lab_1'e atlayın. Bu, koşulsuz bir sıçramadır. Bu durumda 3 MIPS talimatı vardır.

SUBEQ R3, R1, R2, JMP lab_1; // Eşitse, R3ßR1-R2'yi çalıştırın ve hemen lab_1'e atlayın. Aynı koşul atlamasına aittir. Bu durumda 3 MIPS talimatı vardır.

SUB R3, R1, R2; // R3ßR1-R2'yi koşulsuz çalıştır. Koşullu atlama olan atlama işlevi yoktur. Bu durumda sadece 1 MIPS talimatı alır.

SUB R3, R1, R2, JMP lab_1; // Koşulsuz olarak R3ßR1-R2 çalıştır ve hemen lab_1'e atla. Aynı koşula aittir // atlama. Bu durumda 2 MIPS talimatı vardır.

SUBRE R3, R1, R2, JMP lab_1; // Z == 1RC ise RCßRC-1 işlemini koşulsuz olarak çalıştır > 0, R3ßR1-R2'yi çalıştırın ve hemen lab_1'e atlayın. Aynı koşul atlamasına aittir. Bu durumda, en yüksek verimlilik vardır, 5 MIPS talimatının üstesinden gelebilir!

Yukarıdan, yürütme koşulu kodunu, ters koşulu kodunu ve atlama vektörünü veri işleme talimatına (veri aktarım talimatı dahil) ekledikten sonra, veri işleme talimatının yalnızca koşullu olarak yürütülemeyeceği, aynı zamanda atlama fonksiyonuna da sahip olduğu görülebilir. Bu komutun verimliliği açıkça mevcut ana akım RISC komutundan daha yüksektir, ancak ek atlama vektörlerinin sayısı sınırlı olduğundan (6 veya 7 bit), atlama aralığı nispeten küçüktür ve kısa atlamalara aittir.

İkinci patent: Patent numarası: 201512153746.1, patent adı: "Bilgisayar talimatlarında sayıları anında genişletmek için bir yöntem ve cihaz"

Teknik arka plan: RISC talimatlarının taşıyabileceği anlık veriler genellikle büyük değildir.Örneğin, ARM veri çalıştırma talimatları tarafından taşınan anlık veriler 12 bit'e kadar iken, MIPS talimat sisteminin veri işlem talimatlarının taşıdığı anlık veriler 16 bit'e kadardır. Komut sisteminin 32 bit anlık veri taşıması imkansızdır çünkü komut uzunluğu sadece 32 bittir, bu nedenle RISC komut sisteminde 32 bit anlık veri elde etmek çok fazla zahmet gerektirir. Şu anda yaygın olarak kullanılan iki yöntem vardır: Bunlardan biri bölümlere ayrılmış okuma yöntemidir. Spesifik olarak, önce yüksek 16-bit anlık veri okunur ve daha sonra düşük 16-bit anlık veri 32-bit anlık veri oluşturmak için okunur. Bu bölümlere ayrılmış okuma yöntemini desteklemek için neredeyse tümü RISC komut sistemi, ARM'nin MOVW ve MOVT talimatları, MIPS'in LUI ve ADDIU talimatları gibi özel olarak formüle edilmiş karşılık gelen talimatlara sahiptir; ikincisi, 32 bit anlık sayıları mevcut PC değerinden uzak sabitler olarak özel olarak ele alan bellek erişim yöntemidir. Çok uzakta değil, okumak için PC ile ilgili bir hafıza getirme talimatı kullanın. Ancak hangi okuma yöntemi kullanılırsa kullanılsın, 32 bit anlık değer elde etmek zaman alıcıdır ve tamamlanması 2 döngü alır.

Örneğin, R2 = R30x87654321 ifadesini işlemek için mevcut ARM yaklaşımı şu şekildedir:

Bölüm okuma yöntemi:

MOVT R1, # 8765H; (yüksek 16-bit sabitini elde etmek için 1 döngü süresi alır)

MOVW R1, # 4321H; (Düşük 16 bit sabitini elde etmek 1 döngü sürer)

VE R2, R3, R1;

Hafıza erişim yöntemi:

LDR R1 ,; (bu komut 2 döngü sürer)

VE R2, R3, R1;

ARM tarafından R2 = R30x87654321'i işlemenin 3 döngü sürdüğü ve 32 bitlik sabit 0x87654321'i elde etmenin 2 döngü sürdüğü görülebilir.

Buluşun özeti: Büyük anlık veriler elde etmek için mevcut RISC talimat sisteminin verimsizliğini çözmek ve RISC talimat sisteminin basitleştirilmesi ve tekdüze uzunluk avantajlarını korumak için, bilgisayar talimatlarındaki anlık verileri genişletmek için patentli bir yöntem öneriyorum. Yöntem şu şekildedir: bir işlem kodu ve bir acil alan içeren RISC komut sistemine en az bir acil genişletme talimatı ekleyin. Spesifik uygulama, büyük bir anlık veriyi iki bölüme bölmektir, biri yüksek sıralı anında ve diğeri Düşük sıralı anlık değerdir.İmzalanmış veya işaretsiz genişletmeden sonra, yüksek sıralı anlık değer, anlık değer genişletme talimatının anlık değer alanına yüklenir ve düşük sıralı anlık değer, yürütme talimatının anlık değer alanıyla doldurulur ve anlık değer genişletme talimatı belirtilir Düşük dereceli anlık değeri taşıyan yürütme talimatı ön eki konmalıdır ve ortasına başka hiçbir talimat eklenemez. Talimatları alırken, talimat getirme devresi eşzamanlı olarak derhal genişletme talimatını ve hemen ardından yürütme talimatını kod çözme için ilgili kod çözücülerine gönderir ve anında genişletme talimatı kod çözücü, mantıksal bir sola kaydırma yoluyla yüksek sıralı anlık verileri çıkarır Bitten sonra, yürütme talimatı kod çözücüsü tarafından düşük sıralı anlık değer çıktısı ile birleştirilir ve birleşik sonuçtan çıkan anlık değer, işaretli bir sayı veya işaretsiz bir sayı ile genişletildikten sonra orijinal büyük anlık değere geri yüklenir. Anında genişletme talimatı, yürütme dışı bir talimattır, kod çözme aşamasında sona erer ve yürütme ve geri yazma aşamalarından geçmesi gerekmez. Ayrıntılar için, lütfen patent materyallerimin ayrıntılı açıklamasına bakın (Patent No .: 201512153746.1, Patent Adı: Bilgisayar talimatlarında hemen sayıları artırmak için bir yöntem ve cihaz).

Mevcut buluşun yöntemini kullanarak, yukarıdaki ifade de işlenmelidir: R2 = R30x87654321 ve yöntem şu şekildedir:

HIMM # 8765h; (Bu, yüksek dereceli acil # 8765h'yi taşıyan yeni eklenen bir acil genişletme talimatıdır)

AND R2, R3, # 4321h; (Yürütme talimatı düşük 16-bit anlık değeri taşır # 4321h)

Komut getirme devresi, tek hızlı komut getirme modunda çalışıyorsa (yani, program belleği, bir seferde arayüz veri yolunda yalnızca bir komut çıkarabilir), R2 = R30x87654321'i işlemek için 2 döngü sürecektir; (HIMM # 8765h) Eşzamanlı olarak deşifre etmek için bir komutun bir sonraki yürütme talimatının (AND R2, R3, # 4321h) gelmesini beklemek için zamanını geciktirmek gerekir.

Komut getirme devresi çift hızlı komut getirme modunda çalışıyorsa (yani, program belleği her seferinde arayüz veri yolunda 2 komut çıkarabilir), R2 = R30x87654321'i işlemek yalnızca 1 döngü süresi alır ve bu anda anlık veriler genişletilir Talimat (HIMM # 8765h) herhangi bir gecikme olmaksızın sonraki yürütme talimatı (AND R2, R3, # 4321h) ile eşzamanlı olarak çözülebilir, bu nedenle herhangi bir zaman almaz!

ARM ve mevcut buluşun uygulamalarını karşılaştırarak, mevcut buluşun yöntemini kullanmanın, programları yürütmek için RISC komut seti bilgisayarının etkinliğini büyük ölçüde geliştirebileceği, zamandan ve alandan tasarruf sağladığı görülebilir.

Üçüncü patent: SWITCH / CASE ifadelerini C dilinde işlemek için bir yöntem

Teknik alan:

Mevcut buluş, bilgisayar alanına aittir ve özellikle C dilinde SWITCH / CASE ifadelerinin işlenmesine yönelik bir yöntemle ilgilidir Bu yöntemi kullanarak, C dilinde SWITCH / CASE ifadelerini işlemek için bilgisayar talimatları, C derleyicisinin bu talimatları C dili ANAHTARINI derlemek için kullanabileceği şekilde tasarlanmıştır. / CASE ifadesi, bilgisayarın yürütme hızını önemli ölçüde artıran kısa ve verimli kod üretir.

Arka plan tekniği

C dili SWITCH / CASE ifadesi, yaygın olarak kullanılan bir ifadedir. Kelimenin tam anlamıyla, program mantığı açıktır ve yapı bir bakışta açıktır. Programcılar arasında çok popülerdir.Ancak, mevcut komut setine dayalı olarak, C derleyicisi C dili SWITCH / CASE ifadesini şu şekilde derler: Talimatları bir araya getirmek oldukça zahmetli. Şu anda, C derleyicisi C dili SWITCH / CASE deyimlerini işlerken genellikle iki yöntem kullanır, bunlar: listeye dayalı yöntem ve maddeli arama yöntemidir. Listeye dayalı yöntem, program belleğinde bir sabitler dizisi oluşturmaktır. Dizi, tüm CASE sabit öğelerine karşılık gelen sıçrama vektörlerinin bir koleksiyonudur, bu nedenle dizi CASE atlama vektör tablosu, belirli bir CASE sabiti öğesi olarak adlandırılır. Karşılık gelen atlama vektörünün tablodaki konumu, CASE sabiti öğesi ile minimum CASE sabiti öğesi arasındaki farka eşittir ve ardından, CASE atlama vektörünü dizine eklemek için SWITCH ifade değeri eksi minimum CASE sabiti öğesinin farkını kullanın Atlamanın hedefini elde etmek için tablo. Bu yöntem çok hızlıdır ve C derleyicisi tarafından kullanılan tercih edilen yöntemdir. Maddeleştirilmiş arama yöntemi, tek tek karşılaştırmak için SWITCH ifade değerini ve CASE sabit öğesini kullanır. Eğer eşitlerse, Sonra CASE sabit öğesine karşılık gelen adrese atlayın, yani C derleyicisi atlamanın hedefini bulmak için yukarıdan aşağıya teker teker karşılaştırmak için if / else yöntemini kullanır, bu da daha sonra durumda öğe aramasına neden olur. Ne kadar uzun sürerse, bu yöntemin işlem hızı çok yavaştır.

Listeye dayalı yaklaşım hızlı olma avantajına sahip olsa da, zamanla yer değiştirir. Bu yöntemin dezavantajı, CASE sıçrama vektörü tablosunun ölçeğinin genellikle çok büyük olması ve boyutunun, CASE sabit terimi + 1'in maksimum değeri ile minimum değeri arasındaki farka eşit olmasıdır.Pratik uygulamalarda, CASE sabit teriminin dağılımı genellikle çok büyüktür. Yasa takip edilebilir, daha sonra CASE atlama vektörü tablosunda çok sayıda boş öğe bulunur ve bu da çok fazla program alanını boşa harcar. Program alanı çok fazla boşa harcanırsa, C derleyicisinin derlemek için ayrıntılı arama yöntemini kullanması gerekir. Ek olarak, daha az vaka öğesi varsa, C derleyicisi derlemek için öğeden öğeye arama yöntemini de kullanacaktır.

Örneğin, aşağıdaki C dili kodu, derlemek için listeye dayalı yöntemi kullanırsanız, CASE atlama vektörü tablosu 247 öğe kadar uzun olur (246 = 0xf7-0x01 + 1), ancak gerçek yararlı durum öğeleri yalnızca 4'tür (0x01,0x22, 0x4c, 0xf7), açıkça çok fazla program alanı boşa harcadı, bu nedenle C derleyicisi derlemek için ayrıntılı arama yöntemini kullanacaktır.

switch (test) {

durum 0x01: c = abreak;

durum 0x22: c = a | b; ara;

0x4c durumu: c = a + b; mola;

durum 0xf7: c = a-b; ara;

varsayılan: ara;

}

Montaj kodu aşağıdaki gibidir: (ARM komut setini kullanarak öğe arama yöntemi)

; switch (test) {

0x080002ec LDR r0,

0x080002ee LDRB r0 ,; r0 < = test

0x080002f0 CMP r0, # 0x01

0x080002f2 BEQ 0x08000302; eğer (test == 0x01) 0x08000302'ye atlamak yerine

0x080002f4 CMP r0, # 0x22

0x080002f6 BEQ 0x08000312; eğer (test == 0x22) 0x08000312'ye atlamak yerine

0x080002f8 CMP r0, # 0x4c

0x080002fa BEQ 0x08000322; eğer (test == 0x4c) 0x08000322'ye atlamak yerine

0x080002fc CMP r0, # 0xf7

0x080002fe BEQ 0x08000332; eğer (test == 0xf7) 0x08000332'ye atlamak yerine

Öğeye göre arama yöntemini kullanırken, sonraki vaka öğelerinin bulunmasının daha uzun süreceği yukarıdaki derleme kodundan görülebilir, bu nedenle öğe öğe arama yönteminin yürütme verimliliğini artırmak büyük önem taşır.

C programındaki SWITCH / CASE ifadesini gözlemleyerek, çoğu SWITCH / CASE ifadesinde şunu bulmak zor değildir: SWITCH ifadesinin değerinin kelime uzunluğu 8 veya 16 bittir ve CASE sabit maddelerine karşılık gelen sıçramaların tümü küçük bir aralıktadır. Göreceli atlar ve tüm ileri atlar.

Buluşun özeti

Mevcut buluş, SWITCH / CASE ifadelerini C dilinde işlemek için bir yöntem sağlar Bu yöntemi kullanarak, mevcut buluş bilgisayar talimatlarını özel olarak tasarlar ve C dilinde SWITCH / CASE ifadelerini işlemek için kullanılır, böylece C derleyicisi bu talimatları C dilini derlemek için kullanır. SWITCH / CASE deyimi, bilgisayarın yürütme hızını artırmak için kısa ve verimli bir kod oluşturabilir.

C dilinde SWITCH / CASE ifadelerini işlemek için bir yöntem. Yöntem aşağıdaki içerikleri içerir:

Bayt arama talimatları, yarım kelime arama talimatları ve dağınık transfer talimatları olan mevcut talimat sistemine 3 talimat ekleyin;

Bayt arama talimatı, bir hedef kayıt, bir birinci kaynak kayıt ve bir ikinci kaynak işlenen içerir; burada bayt arama talimatının hedef kaydı, bir genel kayıt veya PSR (yani, bir program durum kaydı) ve kelime Bölüm arama talimatının ilk kaynak kaydı genel bir kayıttır ve bayt arama talimatının ikinci kaynak işleneni bir genel kayıt veya anlık bir değerdir; bayt arama talimatının anımsatıcısı CASEB ise, o zaman Bayt arama talimatının montaj formatı şöyledir: CASEB Rd, Rs, Rt veya CASEB Rd, Rs, #imm, burada Rd, ilk kaynak yazmacıdır, Rs ilk kaynak yazmacıdır, Rt ikinci kaynak yazmacıdır, #imm hemen Numara; CASEB Rd, Rs, Rt komutları için: Rt, 32 bitlik bir genel amaçlı kayıt ise, o zaman Rt 4 bayt sabitiyle yüklenir, Rt 64 bit genel amaçlı bir kayıt ise Rt yüklenir 8 bayt sabitidir; CASEB Rd, Rs, #imm talimatı için: #imm bir 32-bit anlık değer ise, o zaman #imm 4 bayt sabitinden oluşur, eğer #imm 16 bitlik bir anlık sayıdır, bu durumda #imm kelime uzunluğu bayt olan 2 sabitten oluşur;

Bayt arama talimatının işlem içeriği: bayt arama talimatının ilk kaynak yazmacındaki (Rs) 0. bayt ve bayt arama talimatının ikinci kaynak işlenenidir (Rt veya #imm) hepsi karşılaştırma için bayt uzunluklu sabitlerdir. Bu karşılaştırma işlemlerinden biri eşitse, eşitlik bayrağını z'yi 1 olarak ayarlayın, aksi takdirde eşitlik bayrağını z'yi 0'a ayarlayın ve belirli bir önceliği izleyin İşlem sonuçlarından birini seçmek için seviye sırası eşittir, karşılaştırma işlemine katılan sabit, bayt arama talimatının ikinci kaynak işlenenindeki (Rs veya #imm) pozisyon numarası pozisyon numarası n'dir ve ardından pozisyon numarası pozisyon numarasıdır. Sıra numarası n ve eşit işaret z, bayt arama talimatının varış yeri yazmacı Rd'de saklanır;

Yarım kelime arama talimatı, bir hedef kayıt, bir birinci kaynak kayıt ve bir ikinci kaynak işlenen içerir; burada, yarım kelime arama talimatının hedef kaydı, bir genel kayıt veya PSR'dir (yani, bir program durum kaydı) ve yarım Kelime arama talimatının birinci kaynak kaydı genel bir kayıttır ve yarım kelime arama talimatının ikinci kaynak işleneni bir genel kayıt veya anlık bir değerdir; yarım kelime arama talimatının anımsatıcısı CASEH ise, o zaman Bayt arama talimatının montaj formatı bu durumda yarım kelime arama talimatının montaj formatıdır: CASEH Rd, Rs, Rt veya CASEH Rd, Rs, #imm, burada Rd hedef kayıt, Rs ilk kaynak kayıt, Rt İkinci kaynak kaydıdır, #imm anlık değerdir; CASEH Rd, Rs, Rt komutları için: Rt, 32 bitlik genel amaçlı bir kayıt ise, bu durumda Rt, yarım kelime uzunluğunda 2 sabitle yüklenir. Rt ise 64-bit genel amaçlı yazmaç, daha sonra Rt, yarım kelime uzunluğunda 4 sabit ile yüklenir; CASEH Rd, Rs, #imm talimatı için: #imm bir 32-bit anlık değer ise, o zaman #imm 2'den oluşur Kelime uzunluğu yarım kelimelik sabit bir bileşimdir;

Yarım kelime arama talimatının işlem içeriği şudur: Yarım kelime arama talimatının birinci kaynak yazmacındaki (Rs) sıfırıncı yarı kelime, yarım kelime arama talimatının ikinci kaynak işleneniyle (Rt veya Rs) aynı anda bağlanır. #imm) tüm yarım kelime sabitleri karşılaştırılır Bu karşılaştırma işlemlerinden biri eşitse eşitlik bayrağı z 1'e, aksi takdirde eşitlik bayrağı z 0'a ve belirli bir önceliğe göre İşlem sonuçlarından birini seçmek için seviye sırası eşittir, karşılaştırma işlemine katılan sabit, yarım kelime arama talimatının ikinci kaynak işlenenindeki (Rs veya #imm) konum numarası konum numarası n'dir ve ardından konum numarası konumunu numaralandırır. Sıra numarası n ve eşit işareti z, yarım kelime arama talimatının hedef kayıt Rd'de saklanır;

Dağılım talimatı, bir birinci kaynak yazmacı ve bir ikinci kaynak işlenen içerir; burada, dağılım talimatının birinci kaynak yazmacı, bir genel kayıt veya PSR'dir (yani, program durum yazmacı) ve dağılım talimatının birinci kaynağıdır. Kayıt, etkinleştirme biti z'yi ve indeks değeri n'yi içerir; dağılım talimatının ikinci kaynak işleneni, genel amaçlı bir kayıt veya anlık veridir; dağılım talimatının anımsatıcısı SWITCH ise, o zaman dağılım talimatının montajı Biçim şu şekildedir: SWITCH Rs, Rt veya SWITCH Rs, #imm, burada Rs ilk kaynak yazmacıdır, Rt ikinci kaynak yazmacıdır, #imm anlık bir değerdir; Rt 32 bitlik bir genel kayıt ise, Rt 4 ile yüklenir Kelime uzunluğu bayt olan bir sabit; Rt, 64 bitlik genel amaçlı bir kayıt ise, o zaman Rt, kelime uzunluğu bayt olan 8 sabitle yüklenir; #imm, 32 bitlik bir anlık değer ise, o zaman #imm 4'ten oluşur Kelime uzunluğu bir bayt sabitidir. #İmm 16 bitlik bir anlık değer ise, o zaman #imm 2 bayt sabitinden oluşur;

Dağınık transfer talimatının işleme içeriği şöyledir: dağınık transfer talimatının Rs'sindeki etkin biti z doğruysa, ikinci kaynak işleneni (Rt veya #imm) seçmek için dağınık transfer talimatının Rs'sindeki indeks değerini kullanın. Atlama vektörü olarak bir bayt uzunluk sabiti kullanılır (atlama vektörü işaretsiz bir sayıdır) ve ardından atlama vektörü mevcut PC değerine eklenir ve toplamanın sonucu, atlamanın hedef adresidir. Atlamayı tamamlamak için, eğer dağınık transfer talimatının Rs'sindeki etkinleştirme biti z yanlışsa, sırayla çalıştırılacaktır;

Ayrıca ayarı şart koşar: saçılma transfer talimatının birinci kaynak yazmacındaki etkin bit z, bayt tipi arama talimatının hedef yazmacındaki eşit işaret z'ye ve yarım kelime arama talimatına ve saçılım transfer talimatının ilk kaynak yazmacına karşılık gelir. Kaynak kütüğündeki indeks değeri n, bayt tipi arama talimatının hedef yazmacındaki konum numarası pozisyon numarasına ve yarım kelime tipi arama talimatına karşılık gelir.Bu şekilde, bayt tipi arama talimatının ve yarım kelime tipi arama talimatının yürütme sonucu Değer, doğrudan dağınık transfer talimatı tarafından kullanılır.

C dili SWITCH / CASE deyimini derlerken, aşağıdaki derleme adımları kullanılır:

İlk adım, eşdeğer CASE sabit öğesini bulmak için C dili SWITCH ifadesinin değerinin kelime uzunluğuna göre bir bayt arama talimatı veya yarım kelime arama talimatı seçmektir, özellikle:

C dili SWITCH ifadesinin değerinin kelime uzunluğu 8 bit ise, CASE sabiti öğesinin kelime uzunluğu da 8 bittir, bu nedenle bayt tipi arama talimatlarını kullanın (CASEB Rd, Rs, Rt veya CASEB Rd, Rs, #imm) Eşdeğer CASE sabit öğesini bulmak için; C dili SWITCH ifadesinin değerinin kelime uzunluğu 16 bit ise, CASE sabiti öğesinin kelime uzunluğu da 16 bittir, bu nedenle yarım kelime arama talimatını kullanın (CASEH Rd, Rs, Rt veya CASEH Rd, Rs, #imm) eşdeğer CASE sabit öğeleri bulmak için. Arama yöntemi: ikinci kaynak işleneni (Rt veya #imm) belirli bir sırada aranacak birkaç CASE sabiti öğesiyle doldurun ve SWITCH ifadesinin değerini kaynak yazmacına (Rs) yükleyin ve baytı çalıştırın Tip arama talimatı veya yarım kelime tipi arama talimatından sonra, hedef kaydında (Rd) eşit işareti z ve pozisyon numarası pozisyon numarası n elde edilir. Ek olarak, aranacak CASE sabiti öğesi ikinci kaynak işlenenini (Rt veya #imm) doldurmak için yeterli değilse, aranacak CASE sabit öğelerinden biri doldurulana kadar tekrar tekrar doldurmak için kullanılır.

İkinci adım, birinci adımda bayt arama talimatının veya yarım kelime arama talimatının sonuç değerine göre atlama vektörünü indekslemek için dağınık transfer talimatını kullanmak ve dal transferini tamamlamaktır. Spesifik yöntem şudur:

Scatter komutunun ikinci kaynak işlenenine ilk adımı oluşturan bayt arama talimatının veya yarım kelime arama talimatının ikinci kaynak işleneninin (Rt veya #imm) CASE sabit öğesine karşılık gelen atlama vektörünü yükleyin (Rt veya #imm) ve her bir CASE sabiti öğesine karşılık gelen atlama vektörünün, dağılım komutunun ikinci kaynak işleneninde (Rt veya #imm) olması gerekir Konum dizisi, CASE sabiti öğesininki ile aynıdır. Tip arama talimatının veya yarım kelime tipi arama talimatının ikinci kaynak işleneninin (Rt veya #imm) pozisyon dizisi aynıdır. Dağılım talimatının birinci kaynak yazmacındaki etkin bit z, bayt arama talimatının hedef yazmacındaki eşit işaret z'ye ve yarım kelime arama talimatına ve dağılım talimatının ilk kaynak yazmacına karşılık geldiğinden İndeks değeri n, bayt arama talimatı ve yarım kelime arama talimatına karşılık gelen hedef kütüğündeki pozisyon numarası pozisyon numarasıdır, bu yüzden eğer dağılım talimatının ilk kaynak kaydı bayt arama talimatına veya yarım kelime arama talimatına eşitse Hedef kaydı yürütülür, ardından doğru atlama vektörü, dağılım talimatının uygulanmasıyla indekslenebilir ve zıplama veya sıralı yürütme, z bitinin durumuna göre belirlenebilir.

Mevcut buluşun yöntemini kullanarak, arka plan tekniğinde açıklanan C programı da işlenmelidir:

switch (test) {

case 0x01: c = abreak; // Buradaki şube adresi uzaklığının 0x12 olduğunu varsayarsak

case 0x22: c = a | b; break; // Buradaki şube adresi uzaklığının 0x34 olduğunu varsayarsak

case 0x4c: c = a + b; break; // Buradaki şube adresi uzaklığının 0x56 olduğunu varsayarsak

case 0xf7: c = a-b; break; // Buradaki şube adresi uzaklığının 0x78 olduğunu varsayarsak

Testin kelime uzunluğunun bayt olduğu ve talimat sisteminin 32-bit anlık veri taşıyabildiği varsayıldığında, mevcut buluşun yöntemini kullanarak, montaj kodu aşağıdaki gibidir:

; Switch (test) {

LDR r0,

LDRB r0 ,; r0 < = test

CASEB r1, r0, # 0xf74C2201; bayt arama talimatları (CASEB Rd, Rs, #imm), arama

; Eşit CASE sabit öğesi, 32 bit anlık sayı #imm CASE tarafından oluşturulur

; Sabit terim 0xf7, 0x4C, 0x22, 0x01 kompozisyon, sonuç

; R1

SWITCH r1, # 0x78563412; dağınık transfer talimatı (SWITCH Rs, #imm), 32-bit anında

; #Imm, 0x78, 0x56, 0x34, 0x12 grubu atlama vektörlerinden oluşur

; R1 indeksine göre tamamla, atlama vektörü, tam atlama

Testin kelime uzunluğu yarım kelime ise ve talimat sistemi 32-bit anlık verileri taşıyabiliyorsa, bu durumda mevcut buluşun yöntemini kullanarak montaj kodu aşağıdaki gibidir:

LDRH r0 ,; r0 < = test

CASEH r1, r0, # 0x00220001; yarım kelime arama talimatları (CASEH Rd, Rs, #imm), arama

; Eşit CASE sabit öğesi, 32 bit anlık sayı #imm CASE tarafından oluşturulur

; Sabit terim 0x0022, 0x0001 kompozisyon, sonuç r1'de saklanır

SWITCH r1, # 0x00003412; dağınık transfer talimatı (SWITCH Rs, #imm), 32-bit anında

; #Imm, 0x00, 0x00, 0x34, 0x12 atlama vektörlerinden oluşur,

; R1 indeksine göre vektör atla, atlamayı tamamla

CASEH r1, r0, # 0x00f7004c; yarım kelime arama talimatları (CASEH Rd, Rs, #imm), arama

; Eşit CASE sabit öğesi, 32 bit anlık sayı #imm CASE tarafından oluşturulur

; Sabit terim 0x00f7, 0x004c kompozisyon, sonuç r1'de saklanır

SWITCH r1, # 0x00007856; dağınık transfer talimatı (SWITCH Rs, #imm), 32-bit anında

; #Imm, 0x00, 0x00, 0x78, 0x56 atlama vektörlerinden oluşur,

Yukarıdaki montaj kodundan görülebileceği gibi, bayt arama talimatının veya CASE sabit öğesinden oluşan yarım kelime arama talimatının ikinci kaynak işleneninin (genel kayıt veya anlık değer) konum sırası, CASE sabit öğesininki ile aynıdır. Karşılık gelen atlama vektörü tarafından oluşturulan saçılma talimatının ikinci kaynak işleneninin (genel kayıt veya anlık veri) konum dizisi tamamen aynıdır.

Arka plan tekniğinde tarif edilen montaj kodunun karşılaştırılması ve işlenmesi, mevcut buluşun yöntemini kullanan talimatın montaj kodunun çok kısa olduğunu bulmak zor değildir, bu da bilgisayarın yürütme verimliliğini önemli ölçüde artırabilir.

Forumla ilgili bazı tartışmalardan aşağıdaki alıntılar:

Şimdi komut setini ve CPU'yu tanıtabiliriz, önce CPU'nun yazmaç setini tanıtabiliriz: Register tanıtımı: Register'ın genişliği 32 bittir, bu yüzden bu CPU 32-bit CPU'dur.

R0 -------- Sıfır yazmaç, salt okunur bir kayıttır ve sıfır değerini okur, bu nedenle sıfır kayıt olarak adlandırılır, bu sıfır kaydı, veri işlemini, değişken temizlemeyi ve değişken adresleme talimatlarını iyileştirecektir esneklik.

CPU 16-bit komut modundayken, genel kayıtlarına R1-R15 ve R16 (HR0) -R31 (HR15) özel komutlarla erişilir.

CPU 32 bit komut modunda olduğunda, genel amaçlı kayıtları R1-R31'dir.

Bunlar arasında: R1 ----- UMAC komutunun hedef kaydı.

R26 --- LO kaydı, çarpma veya çarpma ve toplamanın 64 bitlik sonucunun düşük 32 bitini depolamak için veya 32 bitlik bölme bölümünü depolamak için kullanılır.

R27 --- HI yazmacı, 64 bitlik çarpma veya çarpma ve toplamanın sonucunun üst 32 bitini depolamak için veya 32 bitlik bölme işleminin kalanını saklamak için kullanılır.

R28 --- EPC, yanlış komutun adresi.

R29 --- INT, kesinti bilgisi.

R30 --- SP yazmacı, yani itme yığın işaretçisi. CPU kullanıcı modundayken PSP'dir; CPU yönetim modundayken PSR.P tarafından seçilen PSP veya MSP'dir.

R31 --- LR yazmacı, yani alt rutin dönüş bağlantı yazmacı.

Ek olarak, CPU aşağıdaki gibi tanımlanan iki sistem kontrol kaydını ayarlar:

PC kaydı, program sayacıdır.

PSR kaydı, program durum kaydı, program durum bayrakları, sistem durumu ve kontrol bilgilerini içerir.

Bank.png'yi kaydedin (14.04 KB)

Durum kodu tablosu

Bu komut seti tarafından tanımlanan ters koşul kodu: E = 0 zıt koşul atlamasını belirtir, E = 1 aynı koşul atlamasını gösterir.

Bu komut setinde kullanılan durum kodlarının ARM'den farklı olduğu durum kodu tablosundan görülebilmektedir.Başlıca nedeni, RC (tekrar sayacı) ile ilgili durum kodlarının (RE, RN, RP) eklenmiş olmasıdır.Bu sistem bu üç koşula dayanmaktadır. Kod, RC'yi (tekrar sayacı) 1 azaltacak şekilde kontrol eder.

Tanımlanmış işlenen genişletme talimatları, aralarında: RIMM komutu, kayıt numarasını genişletmek için kullanılır, CIMM komutu, koşul kodunu (koşul), ters koşul kodunu (E), atlama vektörünü (V) genişletmek için kullanılır ve HIMM komutu, üst 12 biti genişletmek için kullanılır. Anlık veri, WIMM komutu, yüksek 28 bitlik anlık veriyi genişletmek için kullanılır. 16 bitlik komut setinde, kullanılabilen önek uzatma talimatları RIMM, CIMM, HIMM ve WIMM'dir. 32-bit komut setinde, kullanılabilen tek önek genişletme talimatı, 32-bit anlık veriyi genişletmek için kullanılan WIMM'dir.

Bu 16 bit komut setinin teknik özellikleri:

1. Desteklenen 16 genel amaçlı yazmaç vardır, yani R0 --- R15 (burada R0 bir sıfır yazmacıdır) ve diğer 16-bit komut setlerinden iki kat daha büyüktür ve kullanıcılara performansı iyileştirmeye yardımcı olan daha fazla yazmaç değişken alanı sağlar.

2. 16-bit veya 32-bit anlık veri taşıyabilir Bu avantaj, diğer 16-bit komut setleriyle eşleşmez.

3. LOAD / STORE adresleme modları esnek ve çeşitlidir, EA = Rn, EA = Rn + # imm12, EA = Rn + # imm28, EA = Rn + Ra'yı destekler.Diğer 16 bit komut setlerinden daha güçlüdür.

4. Boolean işleme talimatları, bit ve komut bit_and, bit veya komut bit_or, bit özel OR komutu bit_xor, bit ters çevirme talimatı bit_not ve bit işlemi sonuç kaydetme talimatı zmb vardır. Bu özellik, MCS-51 veya ARM bit işleme talimatlarından daha çok yönlüdür ve bit değişkeni tanımı artık kısıtlanmamaktadır.

5. Bu 16 bitlik komut seti bağımsızdır ve tüm fonksiyonlar 32 bitlik komut seti yardımı olmadan gerçekleştirilebilir Kod yoğunluğu daha yüksektir 32 bit komut setiyle karşılaştırıldığında performans kaybı çok azdır.

Belirtilmelidir:

1. Hem 16-bit komut seti hem de 32-bit komut seti tamamen bağımsızdır, bu da ARM'den farklıdır.

2. 16-bit komut seti önekinin hemen genişletme talimatı 16-bit veya 32-bittir, bu nedenle 16-bit talimatın uzunluğu 16-bit, 32-bit ve 48-bit ile eşdeğerdir.

3. 32-bit komut seti önekinin anında genişletme talimatı 32-bittir, bu yüzden 32-bit talimatın uzunluğu 32-bit veya 64-bit'e eşdeğerdir.

Bu 3 patente dayalı olarak CPU tasarımını tamamladım ve simülasyon sonuçları, tasarımın beklenen etkiye ulaştığını gösteriyor ki bu heyecan verici! CPU verilog HDL, beş aşamalı ardışık düzen ile yazılmıştır ve hem 16 bit komut setini (81 komut) hem de 32 bit komut setini (95 komut) destekler. Thumb / microMIPS'tan farklıdır. Bu komut sistemi şunları sağlar: bir alt rutin ( Yani, fonksiyon) sadece bir komut setini kullanabilir, yani bir alt programda (yani fonksiyonda), ya tüm 16-bit komut setleri ya da tüm 32-bit komut setleri kullanılır! Bunun nedeni, kod çözücünün, komutun 16 bitlik komut seti mi yoksa 32 bitlik komut seti mi olduğunu komut adresinin 0. bitinin (PC.0) durumuna göre ve sadece CALL komutu, int komutu, donanım kesinti yanıtı, Kesme dönüş komutu iret ve alt rutin dönüş komutu ret PC.0'ın durum değerini değiştirebilir. CPU ayarı: PC.00 olduğunda, komut 16 bitlik bir komut setidir; PC.01 olduğunda komut 32 bitlik bir komut setidir.

Özel not: Bir dal sıçraması meydana geldiğinde, atlama hedefi tam bir talimat alamazsa (ön ekli acil genişletme talimatı), o zaman acil genişletme talimatı sonraki yürütmeyi beklemek için bir döngü geciktirilecektir Talimatın gelişine ek olarak, acil genişletme talimatının ertelenmesine gerek yoktur. Simülasyon sonuçları da bunu kanıtladı.

Kesme sistemi hakkında:

Bu CPU'nun donanım kesme sistemi şunları içerir:

Sıfırlama, maskelenemez, öncelik 0 (en yüksek), önleyici kesinti, giriş adresi: 0x80000000

MEM hatası, maskelenemez, öncelik 1, önleyici kesme, giriş adresi: 0x80000100

ROM hatası, maskelenemez, öncelik düzeyi 2, tam kesinti, giriş adresi: 0x80000200

EXT kesintisi, maskelenebilir, öncelik 3 (en düşük), tam kesinti, giriş adresi: 0x80000300

Not: Önleyici kesme, komutun yürütülmesinin komutun hangi aşamada olduğuna bakılmaksızın derhal sonlandırılması, yani iptal edilmesi anlamına gelir; tam kesme, komutun yürütme tamamlandıktan sonra kesilebileceği anlamına gelir.

Anında genişletme talimatlarının kullanımına bakın (16 bitlik komut seti): (örneğin, hesaplama

R3 = # 76543210 + # fedcba98)

f765

4321

0100; mov R1, # 76543210

ffed

cba9

7318; R3, R1, # fedcba98 ekleyin

ARM ve MIPS'den çok daha hızlı olan bu ifadeyi hesaplamak sadece 2 döngü alır.

Belirtilmelidir:

1. Bu CPU bir Harvard yapısına sahiptir, yani komut veriyolu ve veri yolu ayrılmıştır ve komut veriyolu 64 bittir Bu şekilde, önek işlenen genişletme talimatı ve sonraki yürütme talimatı, en yüksek performansı elde etmek için eşzamanlı olarak kod çözücüye gönderilebilir. 2. Bu CPU, döngü gövdesini hızlandırmak için çok etkili olan, geçmiş tablosuna (en yakın 4 dallanma noktasını kaydederek) dayalı bir dal tahmin fonksiyonu içerir.

CPU yapı şeması

CPU.pdf (15. postadan indirmek için lütfen foruma giriş yapın #)

16 bit komut setine göre 32 bit komut setinin avantajları şunlardır:

1. 32-bit komut setinde 32 genel amaçlı yazmaç bulunurken, 16-bit komut setinde sadece 16 genel amaçlı yazmaç bulunur Bu nedenle, 32-bit komut seti büyük ölçekli veri işlemleri için avantajlara sahiptir.

2. 32 bitlik komut setinin önüne bir acil genişletme komutu olan WIMM eklendiğinde, 32 bitlik veri işleme komutu yine de bir atlama fonksiyonu içerebilir.

..................

Forumda hala birçok tartışma ve ek var. Alan sınırlamaları nedeniyle WeChat'te yayınlanmayacaklar.Görüntülemek için orijinal metni okumak için tıklayabilirsiniz.

Gerçek araba sokakta, Baojun 310W çok büyük, 40.000'den 7 koltuk
önceki
Yerli markaların bir zamanlar "kutsal arabası" olan bu, nitelikli "Çin Malı".
Sonraki
70.000'den 400.000'e kadar, herkes bu SUV'leri seçerken harika olduğunuzu söyleyecek!
Python'a dayalı ön dijital sinyal işleme
Japonya'daki bu mağazalara gitmeyin, dikkatli olmazsanız iflas edeceksiniz!
Bir araba satın almazsanız, önce bir park yeri satın almanız gerekir.
O toptan bir yumurta tezgahının sahibiydi ve "yakınım" diye bıçakla bıçaklayan gangstere koştu!
Haziran'da yeni araba envanteri! Ortak girişim esas olarak birlikte bir şeyler yapıyor
Seçici Başak için, daha ne bisiklet?
Mazda CX-5, Yeni Yıl tarzının evrimini hissediyor ve iç ve dış doku ve güvenlik aynı anda yükseltiliyor!
PA Tehlikesi RF performansına göre zemini döşemeyin
Kenting'in tazeliğini kaybetmeden, Taipei'nin sanatı da var, Tayvan seyahatinin en çok görülmesi gereken durağı.
O zamanlar piyasaya sürülen bu bağımsız SUV'ler hala olağanüstü!
Eğlence çemberindeki "koşmayı" seven kadın yıldızları sayın
To Top