Burada birkaç ek yönüm var:
"A = b / c" x86 işleminin bunu şu şekilde uygulayacağını düşünün:
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
Div talimatının ek bir bonusu olarak edx kalanı içerecektir.
Bir RISC işlemcisi önce b ve c adreslerinin yüklenmesini, bellekten b ve c'nin kayıtlara yüklenmesini, bölme işleminin yapılmasını ve a adresinin yüklenmesini ve ardından sonucun depolanmasını gerektirir. Dst, src sözdizimi:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
Burada genellikle bir kalıntı olmayacak.
Herhangi bir değişken işaretçiler aracılığıyla yüklenecekse, her iki sekans da uzayabilir, ancak bu RISC için daha az olasıdır çünkü başka bir kayıtta bir veya daha fazla işaretçi zaten yüklü olabilir. x86'da daha az kayıt vardır, bu nedenle işaretçinin bunlardan birinde olma olasılığı daha düşüktür.
Lehte ve aleyhte olanlar:
RISC komutları, komut zamanlamasını iyileştirmek için çevreleyen kodla karıştırılabilir, bu, bunun yerine CPU'nun içinde bu işi yapan (sıraya bağlı olarak az çok iyi) x86 ile daha az olasıdır. Yukarıdaki RISC dizisi, 32 bit mimaride tipik olarak 28 bayt uzunluğunda (her biri 32 bit / 4 bayt genişliğinde 7 komut) olacaktır. Bu, talimatı getirirken yonga dışı belleğin daha fazla çalışmasına neden olur (yedi getirme). Daha yoğun olan x86 dizisi daha az komut içerir ve genişlikleri değişse de, muhtemelen orada da ortalama 4 bayt / talimata bakıyorsunuzdur. Bu yedi getirmeyi hızlandırmak için talimat önbellekleriniz olsa bile, x86'ya kıyasla telafi etmek için başka bir yerde üç tane açığınız olacağı anlamına gelir.
Kaydedilecek / geri yüklenecek daha az kayıt içeren x86 mimarisi, muhtemelen iş parçacığı anahtarları yapacağı ve kesintileri RISC'den daha hızlı işleyeceği anlamına gelir. Kaydetmek ve geri yüklemek için daha fazla kayıt, kesintiler için daha fazla geçici RAM yığın alanı ve iş parçacığı durumlarını depolamak için daha kalıcı yığın alanı gerektirir. Bu özellikler, x86'yı saf RTOS çalıştırmak için daha iyi bir aday haline getirmelidir.
Daha kişisel bir not olarak, RISC derlemesini yazmayı x86'ya göre daha zor buluyorum. Bunu, RISC rutinini C'de yazarak, üretilen kodu derleyerek ve değiştirerek çözüyorum. Bu, kod üretimi açısından daha verimlidir ve yürütme açısından muhtemelen daha az verimlidir. İzlenecek tüm bu 32 kayıt. X86 ile durum tam tersidir: "gerçek" adlara sahip 6-8 kayıt, sorunu daha yönetilebilir hale getirir ve üretilen kodun beklendiği gibi çalışacağına dair daha fazla güven verir.
Çirkin? Bu, bakanın gözündedir. "Farklı" yı tercih ederim.