ADUC841 ASSEMBLY ile Alt Progrmalama Mantık Simülasyonu
Gömülü Sistemlerde Alt Program Mekanizması: ACALL / RET
ADUC841 Mikrodenetleyici | Anahtar Kelimeler: alt program, ACALL, RET, yığıt belleği, 8051 mimarisi
1. Alt Program Nedir?
Alt program (subroutine); belirli bir işlevi yerine getirmek üzere ana program kodundan ayrıştırılmış, bağımsız bir makine kodu bloğudur. Ana program belirli bir noktada akışı alt programa devreder; alt program işini tamamlayınca kontrolü tam olarak bıraktığı noktaya iade eder. Bu mekanizma yığıt belleği (stack memory) üzerine inşa edilmiştir.
2. Temel Kayıt Birimleri
PC (Program Counter): Bir sonraki çalıştırılacak komutun adresini tutar. Alt program çağrısında hedef adrese zorla yüklenir.
SP (Stack Pointer): Yığıt belleğinin anlık en üst konumunu gösterir. ADUC841’de başlangıç değeri 07H‘dir. Her PUSH‘ta artar, her POP‘ta azalır.
3. ACALL ve RET Nasıl Çalışır?
ACALL komutu çalıştığında mikroişlemci sırasıyla şunları yapar:
- Dönüş adresi hesaplanır → PC + 2 (ACALL 2 bayt kaplar)
- SP artar, dönüş adresinin düşük baytı (PCL) RAM’e yazılır
- SP tekrar artar, yüksek bayt (PCH) RAM’e yazılır
- PC hedef adrese yüklenir → program alt programa atlar
RET komutu ise bu işlemi tam tersine uygular: yığıtten PCH ve PCL’yi okur, SP’yi eski değerine indirir, PC’yi yeniden kurar. Program ana akışına kaldığı yerden devam eder.
Örnek:
|
1 2 |
ACALL alt1 → SP: 07H → 09H | RAM[08]=07H, RAM[09]=00H | PC=1234H RET → SP: 09H → 07H | PC = 0007H (ana programa dönüş) |
4. İç İçe Çağrılarda Yığıt
Bir alt programın kendi içinden başka bir alt program çağırması durumunda yığıt her seviye için 2 bayt büyür. LIFO prensibi sayesinde dönüşler her zaman doğru sırayı izler: en son çağrılan en önce döner.
|
1 2 3 4 |
Ana → ACALL alt1 → SP: 07H → 09H (1. dönüş adresi yığıtta) alt1 → ACALL alt2 → SP: 09H → 0BH (2. dönüş adresi yığıtta) alt2 → RET → SP: 0BH → 09H (alt1'e döner) alt1 → RET → SP: 09H → 07H (ana programa döner) |
Tüm dönüşler tamamlandığında SP başlangıç değerine geri döner. Yığıt, sanki hiçbir çağrı gerçekleşmemiş gibi sıfırlanmış olur.
⚠️ Yığıt Taşması: Çağrı derinliği arttıkça SP yükselir. ADUC841’in dahili RAM’i sınırlı olduğundan kontrolsüz iç içe çağrılar stack overflow‘a yol açabilir.
5. Simülatör Hakkında
Bu makaleye eşlik eden interaktif simülatör, yukarıdaki mekanizmayı adım adım görselleştirmektedir. Kullanıcı; ileri/geri adım kontrolü, otomatik oynatma ve hız ayarıyla her mikro-operasyonu izleyebilir. RAM hücrelerinin anlık değişimi, SP’nin hareketi ve çağrı yığıtının oluşup çözülmesi gerçek zamanlı olarak gözlemlenir. Tek seviye ve iç içe çağrı olmak üzere iki senaryo sunulmaktadır.
ADUC841, Analog Devices tarafından üretilen ve 8051 çekirdeğini temel alan bir mikrodenetleyicidir. Bu makalede ele alınan ACALL/RET mekanizması, tüm 8051 türevi mimariler için geçerlidir.


