2011-06-08 15 views
8

Yaptığım bir soru kağıdı için yığın kareleriyle ilgili bir sorum var:Ürettiğim bu yığın çerçevesi doğru mu?

Nada'da (şu ana kadar yapılmış bir dil) aşağıdaki işlevi göz önünde bulundurun:

function f(x,y) 
begin 
var z 
z := y - x; 
return z * z; 
end; 

işlev şu şekilde çağrılabilir:

n := f(a+2,b*3) 

Yanıtınızı göstermek için şemaları kullanarak, yukarıdaki işlev çağrısı yürütüldüğünde olay dizisini açıklayın, yığın çerçevesinin işleve girişte nasıl oluşturulduğunu ve çıkışta nasıl yok edildiğini gösterir. ondan, ve x ve y parametrelerine ve z yerel değişkenine erişirken temel işaretçi yazmaçının nasıl kullanıldığı.

Bu soruya cevap verdim ve bu benim ürettiğim yığın çerçevesi:

sackframe I produced

Sadece birisinin yanlış olduğunu düşündüğümde bunu düzeltmesini istiyorum ... ya da yeni Yığın çerçevesi (eğer zamanınız varsa). Yardımı gerçekten takdir edeceğim.

+0

Bu "Nada" dili tamamen yığın tabanlı veya aynı zamanda kayıt tabanlı olduğunu varsayarak mı? –

+0

@Heandel, bence ikisinin de tamamen olduğuna emin değilim. Nada, kursta kullanmam gereken bir programlama dilidir. –

+0

"Nada" ve bunun uygulanması hakkında çok fazla şey bilmeden bunun yanıtlanabileceğinden emin değilim. İlk baş eğme momentim, hem yeni hem de eski yığın çerçevesinde “+ 2”, “b * 3” ve “Z” harflerinin bulunduğu yerdir. Neden olduğundan emin değilim. Ve b * 3'ün b + 3'ten bilerek farklı mıdır? Bu benim kendi önyargılarımdır, fakat başka bir bilgi içermiyorsa, Nada'ya bu bağlamda tipik bir C uygulaması gibi davranmaya eğilimliydim, ki bu durumda sizin hakkınızda ne olduğunu düşünmüyorum. 'f'' _from_ çağrılan işlev için kod olmadan. –

cevap

1

Arama kurallarına bağlıdır. Eğer bir taban işaretçisi söz beri, çağırma _cdecl kullandığını varsayarsak

Ama:

http://i.stack.imgur.com/5vQVB.jpg

Diğer arama kuralları kayıtlarını kullanabilirsiniz vb Optimizasyonları ayrıca derleyici olarak, bu değiştirebilir kod satırı, CPU pipelining, vb için yeniden düzenlemek için şeylerin çeşitlerini arayın.

İlgili konular