Bölüm 8 · SimülatörYığın, CALL ve RET? ← Bölüm 8Kaynak kod · bağıl konumYığın (SS = 0700h) KapatYığın, CALL ve RETAmaç: 8086 yığınının SS:SP ile nasıl yönetildiğini komut komut görmek. Yığın aşağı doğru büyür: her PUSH, SP'yi 2 azaltıp sözcüğü SS:SP adresine yazar; her POP, SS:SP'deki sözcüğü okuyup SP'yi 2 artırır. CALL dönüş adresini yığına iter, RET onu IP'ye geri alır.Nasıl kullanılır?Soldan bir program seçin; bazı programlarda başlangıç değerleri değiştirilebilir.Adım ▶ / ◀ Geri (klavyede → / ←), Oynat, Sıfırla. Mikro adımlar açıkken PUSH, POP, CALL ve RET iç adımlarına bölünür (önce SP azalır, sonra yazılır…).Sağdaki yığında küçük adresler yukarıdadır. SP→ yığının üstünü, BP→ çerçeve işaretçisini gösterir. Kesik çizgili hücreler SP'nin altında kalmıştır: değerleri silinmez, ama artık yığına ait değildir.Kendini dene: yığın komutlarından önce SP'nin, alınan değerin ya da dönüş adresinin ne olacağını tahmin edin.HatırlatmaKomutSPYaptığıPUSH kaynak−2SP ← SP − 2, [SS:SP] ← kaynakPOP hedef+2hedef ← [SS:SP], SP ← SP + 2PUSHF / POPF−2 / +2FLAGS yığına / yığındanCALL (yakın)−2dönüş IP'si yığına, IP ← hedefRET / RET n+2 / +2+nIP ← [SS:SP]; RET n ayrıca n bayt parametreyi atarParametreler yığınla geçirilince prosedür PUSH BP / MOV BP, SP ile sabit bir çerçeve kurar: [BP+0] eski BP, [BP+2] dönüş adresi, [BP+4] son itilen parametre.8086'da FLAGS yazmacının 12–15. bitleri her zaman 1 okunur; bu yüzden PUSHF yığına F2xxh biçiminde bir değer yazar..COM programı başlarken DOS yığına 0000h iter; programın son RET'i bu değeri IP'ye alır ve PSP'deki INT 20h programı bitirir.Programlar emu8086 sözdizimiyle yazılmıştır; bağıl konumlar, yazmaç, bayrak ve yığın değerleri 8086 kurallarına göre hesaplanır ve ortak 8086 yorumlayıcısıyla karşılaştırılarak doğrulanmıştır.İlgili sunumlar: Bölüm 8 · Yığın, Bölüm 7 · Prosedürler.