Bölüm 8 · SimülasyonYığın, CALL ve RET ? ← Bölüm 8 Kaynak kod · bağıl konum Yığın (SS = 0700h) Kapat Yığın, CALL ve RET Amaç: 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ırlatma KomutSPYaptığı PUSH kaynak−2SP ← SP − 2, [SS:SP] ← kaynak POP hedef+2hedef ← [SS:SP], SP ← SP + 2 PUSHF / POPF−2 / +2FLAGS yığına / yığından CALL (yakın)−2dönüş IP'si yığına, IP ← hedef RET / RET n+2 / +2+nIP ← [SS:SP]; RET n ayrıca n bayt parametreyi atar Parametreler 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öz dizimiyle 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 8 · Prosedürler.