Çerçeve İşaretçisi Açıklaması


28

Olarak montaj MIPS , yığın işaretçisi için bir kayıt ve çerçeve işaretçisi başka bir kayıt yoktur. Çerçeve işaretçisi nedir ve amacı nedir? Yığın göstericisinden farkı nedir?


1
Hangi araştırmayı zaten yaptınız - ve bu terimlerle aşinalığınız nedir? Bunun için ne sistemi var (farklı sistemler farklı terminolojiye sahip)?

Sadece çerçeve işaretçisi (mips montajı) ile tanışmak istiyorum. Nasıl yardımcı olduğunu anlamıyorum, neden buna ihtiyacımız var? Çok teşekkür
ederim

Yanıtlar:


44

MIPS montajında, yığın işaretçisi yığının üstüne işaret eder. Yığına boşluk ayırdığınızda, yığın işaretçisi ($ sp) boş belleğe işaret eder.

MIPS grubundaki bir alt yordamı çağırırken (o günlerde kayıtlar birinci sınıftaydı - alışılmadık yerlerde temel parametreleri kaydedin), biri parametrelere yığına yazılır ve daha sonra yığın işaretçisini ilerletir.

Yöntem başladığında, bir parametre ofsetinde olabilir 16($sp). Bununla birlikte, değişkenler yığına yerleştirildiğinde, yığın işaretçisi hareket eder ve aynı parametre şimdi 24($sp)bunun yerine bulunabilir. Bu, kodu biraz kafa karıştırıcı hale getirebilir.

Kare işaretçisi ($ fp) yığın çerçevesinin başlangıcına işaret eder ve alt yordam çağrısı süresince hareket etmez. Bu, istif çerçevesinin tabanına işaret eder ve alt rutine iletilen parametreler, çerçeve işaretçisine göre sabit bir noktada kalır.

Çerçeve işaretçisinin, onu değiştiren alt rutin çağrılarla birlikte depolanması ve geri yüklenmesi gerektiğini fark edin.

Daha fazla okuma:


Ne demek "o günlerde kayıtlar birinci sınıftaydı - alışılmadık durumlarda temel parametreler yaz" deyin, ancak kayıt sayısı sınırlı olduğunda da parametreler yığına alınabilir. Örneğin, 35 parametreniz varsa (MIPS'nin 32 regs olduğuna inanıyorum), o zaman istifte son 3 parametreyi koymanız gerekir. Uygulamaya ayrıca daha özel, FP, geri dönüş adresinin bulunduğu bellekteki adreste olacaktır.
Jonathan

1
@Jonathan MIPS Bu 32 yazmaçtan 0 $ 0 idi. , $ s0 - $ s7 kaydedildi ve $ gp, $ sp, $ fp ve $ ra sistem tarafından kullanıldı. Sonuç olarak, yalnızca 24 genel amaçlı kayıt vardı ve kullanmak istemeniz durumunda, genel gider kayıtlarından bazıları vardı. Genelde sadece $ t kayıtlarını kullandınız (10). Bunu 128 registerı olan Itanium ile karşılaştırın. MIPS'de 35 parametresi olan bir fonksiyon çağırdığınızda, hepsini yığına koyarsınız.

@Jonathan Bu yorumu da işaretleyeceğim : "AMD Buldozer: 96 fiziksel GPR, Intel Sandy Bridge: 160 fiziksel GPR, Intel Haswell: 168 fiziksel GPR". Çok çekirdekli makinelerle işler komikleşiyor. SPARC 160 kayıt yaptı . MIPS'in tasarım felsefesinin bazılarına, çağdaşlarının yarısı kadar kaydettiren pencereye kaydolmanızı da işaret ediyorum .

Yani, bu %ebpx86 çağrı-konvansiyonunda 'temel işaretçi' kaydının geleneksel kullanımı ile aynı şey midir? (Bunların hepsinde yeniyim, ancak sth MOV 8(%ebp), %eaxveya benzeri bir şey kullanmakla aynı temel şeye benziyor mu?)
ELLIOTTCABLE

Çizginin Realize that the frame pointer will need to be stored and restored with subroutine calls that modify it.ne anlama geldiği tam olarak belli değil
zadane
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.