Bir CPU'nun bir yığını desteklemesi ne anlama gelir?


11

CPU bir yığını nasıl destekleyemez? Alt rutinleri kullanan herhangi bir mimarinin (tüm mimarilerin bu olduğundan eminim) alt adresi yığına doğru itmesi gerekmez, böylece alt rutin denilen yere geri dönebilir mi? Yığın sadece belirli bir yönde büyüyen ve bir yığın veri yapısı olarak görev yapan bir göstergeye sahip bir bellek bölümü anlamına gelir. Bir mimarinin bir yığını nasıl destekleyemediğini anlamıyorum.

Otomatik bellek depolama (otomatik değişkenlere karşı statik değişkenler) derleyici tarafından donanım mimarisine karşı ne ölçüde belirlenir?

Yanıtlar:


8

Altyordam çağrısı / dönüşü ve kesme işlemesi için donanım yığınlarına sahip olan, ancak orada veri (değişkenler) depolamak imkansız değilse ve tamamen yazılım veri yığını uygulamak çok verimsiz olacak birçok düşük seviyeli mikrodenetleyici vardır. 8051 klasik bir örnektir ve düşük uçlu PIC'ler (PIC12 / PIC16) başka bir örnektir. Bu makinelerde, veri yığını, otomatik değişkenler için statik depolama konumları atanarak öykünülür; bu konumların yeniden kullanımı, derleyicinin karmaşıklığına bağlıdır.

Yığın öykünmesi bu şekilde yapılıyorsa, işlevin her örneği sözde "özel" değişkenleri için aynı statik konumları yeniden kullandığından, özyinelemenin - doğrudan ya da dolaylı olarak kendini çağıran bir işlev - çalışmadığı anlamına gelir. Bazı derleyiciler özyinelemenin sınırlı kullanımına izin verir (tipik olarak bir #pragmatürden biriyle uygulanır), bu da işleri ne kadar yavaşlattığına bakılmaksızın gerçek bir veri yığını oluşturmasına neden olur.

Bir kenara olduğu gibi, DEC PDP-8 ve IBM System / 360 da dahil olmak üzere alt rutin / kesme işlemleri için bile hiçbir donanım yığını olmayan CPU mimarileri vardı. Bu makinelerde, PC (dönüş adresi) ve durum kaydı (kesmeler için) kayıtlara veya bellek konumlarına kaydedildi, ancak düşünebildiğim her durumda, makinenin ayrıca bir yığın oluşturmayı kolaylaştıran yeterince esnek adres modları vardı yazılım ile.


1
Daha önceki bazı bilgisayarlar, dolaylı sıçramalara sahip olmayan - dönüş işlevlerini pratik yapmayan (teorik olarak bir atlama üzerinden dallanabilir, ancak bazı durumlarda özellikle veri adresleri tamamen kodlandığında karmaşıklık katan bir dönüşe neden olmak için koda bir atlama talimatı yazar. talimatlarda).
Paul A. Clayton

4

"yığının desteklenmesi"

  1. açık bir yığın işaretçi kaydına sahip olmak ve
  2. yığın işaretçi yazmacını manipüle etmek / kullanmak için ilkel makine kodu yönergelerine sahip olmak (reti gibi, bir işlev çağrısından dönmek için yığın işaretçisine dayalı olarak program sayacını değiştirir).

Değişkenleri kullanarak RAM'da aynı tür şeyler derleyici tarafından üretilen kod olan emülasyon yoluyla donanım desteği olmadan bunu taklit edebilirsiniz. Herhangi bir modern bilgisayar mimarisinde yığın için doğrudan desteğe sahip olmak nadir / nadirdir.

Programlama dillerindeki değişkenlerin anlambiliminin, düz montajdan daha yüksek herhangi bir dil için, hedef donanım mimarisiyle neredeyse hiçbir ilgisi yoktur. Derleyicilerin işi, programlama dilinin anlamsal sözleşmesine uygun makine kodu oluşturmaktır.


1
Çoğu RISC ISA'sının (örneğin MIPS [MIPS16 ve microMIPS hariç], Alpha, SPARC, PA-RISC, Power, SuperH), bunun yerine ABI'de tanımlayan açık bir yığın işaretçi kaydı yoktur. ARM, MIP16 ve microMIPS (kod yoğunluğu için) gibi bir istisnadır (kısmen birkaç çalışma modu için SP'yi gölgelediği için).
Paul A. Clayton

2

Bazı mimarilerde (örn. PIC) sınırlı bir donanım yığını bulunur (değişkenler için değil yalnızca dönüş adresleri için kullanılabilir). Bazı son derece küçük mimarilerin bir mağaza ve artış veya PUSH talimatı yoktur, bu nedenle bir yığın yapmak daha zordur.

C'deki 'auto' değişkenleri her zaman 'auto' başlatma davranışı olan bir şeye ve statik davranışı olan 'statik' olana derlenmelidir; bazı mimarilerde özyineleme yapmanıza izin verilmez, bu durumda derleyici tüm değişkenleri statik olarak tahsis edebilir.

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.