Bunu doğru anlıyorsam, program sayacı yürütülecek komutun adresini gösterir ve çoğu durumda bir sonraki yönerge adresine ilerlemek için program sayacına dörde eklersiniz. Ancak, bir kelimeye işaret eden bir program sayacınız var mı (ör. 15), bir sonraki talimatı ilerletmek istiyorsanız, bir sonraki talimatı almak için doğrudan 15'e 4 eklemeniz var mıdır? Herhangi bir açıklamaProgram Sayacı?
cevap
Takdir edilecektir. Bu şey talimat işaretçisi olarak adlandırılır. İşlemcinin mevcut komutun kodunu çözmesi durumunda, ne kadar bayt içerdiğini bulur ve mevcut talimat işaretçisine ne kadar değer katacağını bilir, böylece mevcut komut çalıştırıldığında işlemci bir sonraki işlemin ne olacağını bilir.
Örneğin, işlemci örnekte olduğu gibi 15 yönergesini saklayan yönerge işaretçisi ile başlar - bu adreste ne olduğuna bakar, 5 bayt işgal eden bir komut olur, sorun yok - 5'e ekler. akım değeri ve bu 20'yi verir ve böylece yönerge göstergesi şimdi 20 değerini depolar ve işlemci daha sonra mevcut komutu yürütür.
Program sayacını hiçbir zaman doğrudan ilerletemezsiniz - Programınızı yürüterek CPU sizin için yapar. Programlayıcı olarak, program sayıcısını çeşitli atlama yönergelerini (koşullu, koşulsuz, alt yordamlara atlar, vb.) Yürüterek gerçekleştirirsiniz. Program sayacına bir ofset eklemeniz gerektiğinde belirli bir durum, konum bağımsız kodunda şubeniz olduğunda ortaya çıkar. Bununla birlikte, bu durumda bile, komutun boyutunu program sayacına eklemezsiniz: bunun yerine, "göreli adrese bir şube" yürüterek atlamak istediğiniz yerin ofsetini sağlarsınız.
Mutlak adres 0x4000'de bulunan uygulama koduna atlayacak bir bootloader yazarken ne dersiniz? Bu durumda program sayacını mutlak adrese doğrudan değiştireceğiz. – eepty
@eepty İkinci cümlenin söylediği de budur: bir kayıt talimatı ile değil, bir atlama talimatı ile yapıyorsunuz. – dasblinkenlight
- 1. Yön İşaretçisi vs Program Sayacı?
- 2. Birkaç zaman sayacı MATLAB
- 3. Pygame'de geri sayım sayacı
- 4. Kompleks sıralı grup sayacı
- 5. Döngü sayacı için django
- 6. URL'lerde CSS sayacı
- 7. HealthKit Adım Sayacı
- 8. Magento'daki sayaç sayacı
- 9. foreach döngü sayacı
- 10. Django şablon sayacı
- 11. Javascript Geri Sayım Sayacı
- 12. Geri Sayım Sayacı Bildirimi
- 13. +1 alan ekle (sayaç sayacı)
- 14. Geri sayım sayacı Geçen Saniye
- 15. Momentjs ve geri sayım sayacı
- 16. Adım Sayacı: her zaman açık?
- 17. CAS ve Sigara Engelleme Sayacı
- 18. Program işlevine program aracılığıyla erişme
- 19. Neden ASP.NET İstekleri Geçerli performans sayacı her zaman daha yüksek ASP.NET Uygulama İstekleri/sn sayacı
- 20. ASP.NET Performans Sayacı her zaman 0
- 21. Performans sayacı ortalama zamanlayıcıları tabanlarıyla nasıl ilişkilendirilir?
- 22. Javascript, geri sayım sayacı ve ekran metni
- 23. En Kolay Muhtemel Performans Sayacı Örneği
- 24. C# performans sayacı ve nic adı
- 25. Matlab döngü için azalan döngü sayacı
- 26. Javascript nesne sayacı beklendiği gibi artmıyor
- 27. WpF geri sayım sayacı nasıl yapılır?
- 28. Css sayacı css seçici ile nasıl çalışır?
- 29. Performans Sayacı, İşlem Kimliği yerine ad?
- 30. Android Sayım Sayacı Dairesel İlerleme Çubuğu
Örneğiniz mantıklı, ancak eklediğiniz şey bu adresteki neye bağlı olarak PC + 4 nereden geliyor? – Ockham
@ user28694: Bu, bir işlemciye bağlı olacaktır. Bazı işlemciler, tüm talimatların aynı uzunlukta olduğu talimat setine sahiptir, böylece kayıtsız şartsız +4 olabilirler. Bazı işlemciler değişken uzunluktaki talimatlara sahip olacaklar ve talimatın ilk baytını kullanarak hangi komutları ele aldıklarına karar verecekler. – sharptooth
[32 bit uzunluğundaki tüm MIPS yönergeleri] değil (http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? –