ALT RUTİNDEN GOTO İLE GERİ DÖNMEK

Başlatan humanus, 19 Mart 2009, 14:59:52

Tagli

Kopyalanması gereken sadece "stack pointer" adresi değil, yığının tamamı. Eğer işletim sistemi kullanmıyorsan elbette böyle bir şeye ihtiyacın olmaz. Bir amatör olarak benim de henüz böyle bir ihtiyacım olmadı. Ama işlemcide koşan birden fazla işlem varsa (daha doğru ifadesiyle "süreç", çünkü İngilizce'si "process" olarak geçer) her birinin yığını ayrı olmak zorundadır. Çünkü bunlar programdaki atlamaları da tutarlar, daha doğrusu CALL komutu çağrıldığında saklanan geri dönüş adresleri yığında saklanır. Ayrıca yığın, bazı durumlarda yazılımcı tarafından da yedekleme amacıyla kullanılabilir, bazı önemli registerlar'ın yedeklemesi gibi (bu durumla genelde bilgisayar assembly dilinde karşılaşılır). Yani yığındaki verilerin ne oldukları kadar hangi sırayla oraya kondukları da önemlidir. İşte bu yüzden her işlemin ayrı yığını olmalıdır. Yığın dolmamış bile olsa, işlemin süresi bitmesi, kesme veya başka bir sebepten işlem dondurulursa, yığınının da olduğu gibi saklanması gerekir, ve sırası gelen yeni işlemin de daha önceden RAM'e saklanmış yığınının tekrardan donanımsal yığın alanına taşınması gerekir (Bu dediğim PIC için geçerli. Bilgisayarda yığın zaten RAM üzerindedir.)
Gökçe Tağlıoğlu

fatihinanc

Tamam hocam teşekkür ediyorum şimdi daha iyi anladım.
Ama dediğiniz gibi ufak çaplı uygulamalarda buna gerek olmuyor heralede.
Daha büyük uygulamalarda(işletim sistemi gibi...)kullanılıyor o zaman bu yöntem.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

fatihinanc

Alıntı yapılan: Tagli - 28 Haziran 2010, 16:04:38
Bilgisayarda yığın zaten RAM üzerindedir.

Hocam bu dediğinizi dikkate almamışım.

Ben stack pointer ı CPU nun bir yazmacı olarak biliyorum.
Hatta 8086 nın "index register" larından birisidir SP(Stack Pointer)...
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

Tagli

Pointer bir register üzerinde olabilir ama yığının kendisi RAM'de. Gerçi bu durum bilgisayarın mimarisine göre değişebilir sanırım. Sen yazınca ben de şüpheye düşüp Wikipedia'dan kontrol etme gereği duydum. Orada iki türlü kullanımdan da bahsetmiş ama bildiğim kadarıyla günümüzde kullandığımız sıradan bilgisayarlar yığını RAM'de saklıyor. İşlem değişimi sırasında da sadece Stack Pointer değişiyor. Elbette RAM çok küçükse ve çalışan tüm programları tutmaya yetmiyorsa duraksatılan program RAM'den hard disk'e de taşınabilir ama böyle bir durumla karşılaşabileceğini sanmıyorum. Zaten karşılaşıyorsan o bilgisayarın başında duramazsın...
Gökçe Tağlıoğlu

fatihinanc

Tamam şimdi tam oldu heralde.Ben de günümüz bilgisayarları için aynı şeyi düşünmüştüm.
Eski mimarilerde böyle değil galiba.

Peki RAM üzerinde olması sebebiyle yığın boyutunu kendimiz belirleyip olası yığın taşmalarını önleyebilir miyiz?

Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

z

Genellikle mikrodenetleyiciler stack uzerinde islem yapma yetenegine sahip değiller.

Halbuki mikroislemciler stack uzerinde pek cok islem yapabilir.

Ornegin, 8086 ve turevlerinde SP uzerinde nerede ise hersey yapabilirsiniz.

Stack registere sayisal deger atayabilir, stack registere bir baska register icerigini yada ramdan deger aktarabilir, tersine
stack register icerigini rama yada bir baska registere aktarabilir hatta ve hatta stack register uzerinde aritmetik komutlar isletebilirsiniz.

Bu da size stack register ve stack alani uzerinde dilediginiz gibi oynama imkani verir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

camby

atlaya zıplaya program koşturulur demek orda : )

fatihinanc

RAM a atmadığımız sürece bizi tek kısıtlayacak olan şey 64kb mı peki?
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

z

8086 da 64K ile sinirli değilsiniz. Stack Segment icerigini degistirerek Stack alanini da dilediginiz gibi tasiyabilirsiniz.
8086 bambaska bir makine.

PIC islemciler Murat 124 ise 8086 kesinlikle  mercedes den de ote bir aletdir.




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatihinanc

#24
:)

Evet demekki @camby nin dediği gibi "hoplaya zıplaya" program koşturabiliyoruz.
PIC ile bu kadar ilgilenip de 8086 gibi eski bir mimaride böyle özelliklerin olduğunu duyunca insana garip geliyor biraz.

Peki 8051 için de 8086 da yapabilidlerimizin bir kısmını yapmak mümkün mü?
Mesela bu stack durumu onda nasıl?

Edit : Az önce baktım stack okunmuyor bile...
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

z

8051 de bu konuda yetenekli. SP alanını değiştirebilirsin. Stactaki değeri pop ile öğrenebilir ve geri yerine push ile yazabilirsin.

8051 indirect adresleme konusunda iyi olduğu için call komutu için hard stack registeri kullanmaya devam eder, fonksiyon parametreleri geçirmek için yardımcı reglerden birini soft stack register olarak kullanabilirsin.

Böylece parametre değiştokuşu için stack alanını external rama dahi taşıyabilirsin.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatihinanc

Bu heralde 8051 in mimarisinin 8086 ya benzemesinden kaynaklanıyor.
Zaten 8086 dan esinlenerek yapılmış heralde 8051 yine intel tarafından.

fakat proteusta debug işleminde stacki göremedim.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)