EAX 32 bitlik platformda fonksiyonun geri dönüş değerini saklamak için kullanılır, bir fonksiyonun dönüş büyüklüğünün 4 bayttan büyük olup olmadığını merak ediyorum, eax nasıl halleder? Bu durumda OS, yığında dönüş değerini kaydedebilir ve yığının adresini EAX'te saklayabilir, ancak OSX'de depolanan değerin dönüş değeri için bir adres mi, yoksa aslında geri dönüş değeri mi olduğunu nasıl anlatabilir?eax deposu, hangi boyutun 4 bayttan büyük olduğunu nasıl döndürür?
cevap
Arayan ve arayan, kayıtların ve yığının neleri içerdiği konusunda hemfikir olmalıdır. Bu, application binary interface (ABI) olarak adlandırılan daha büyük bir kavramın parçası olan calling convention olarak adlandırılır. Arayan, nasıl çağırılmak istediğini tanımlar (yani . argümanların yığında, kayıtlarda, vs. olması gerekip gerekmediğini) ve derleyici, oluşturduğu kodun çağrı kuralına uygun olmasını sağlar.
Özel sorunuz için ABI'ye bağlıdır. Bazen dönüş değeri 4 bayttan büyükse ancak 8 bayttan büyük değilse, EAX ve EDX'e bölünebilir. Ancak çoğu zaman arama fonksiyonu sadece hafızayı (genellikle yığında) tahsis eder ve bu alana çağrılan işleve bir işaretçi gönderir.
Ayrıca, işletim sisteminin rolünün sizin düşündüğünüz gibi önemli olmadığını unutmayın. Farklı çağrı kurallarına sahip ikili dosyalar aynı sistemde bir arada bulunabilir ve ikili dosyalar da farklı çağrı kurallarını dahili olarak kullanabilir. İşletim sisteminin ABI'si, ikili sistem kütüphanelerini çağırdığında sadece önemlidir.
- 1. crossfilter, boyutun
- 2. 2 veya 4 bayttan imzalı/imzasız kısa/int'ye dönüştürme
- 3. extbase deposu findAll(), sonuç null değerini döndürür
- 4. C# hangi varsayılan (T) döndürür nasıl değiştirilir?
- 5. OpenGL -1 döndürür var olduğunu ve
- 6. Hangi MVC sürümünün yüklü olduğunu nasıl görebilirim?
- 7. Hangi .emacs dosyasının yüklü olduğunu nasıl bulabilirim?
- 8. Hangi platform sürümünün gerekli olduğunu nasıl belirlerim?
- 9. wxPython: Hangi widget'ın odağı olduğunu nasıl anlarım?
- 10. Bir bayttan tamsayı okuma []
- 11. JQery tam olarak hangi nesneyi döndürür?
- 12. DirectX'in hangi sürümünün yüklü olduğunu kontrol edin
- 13. büyük bir sunucu hatasından sonra svn deposu
- 14. Bayttan [] Çizim nasıl oluşturulur? (Android)
- 15. Integer.toBinaryString nasıl yapılır En az 4 bit döndürür
- 16. Dosyadaki tek bir baytlık bayttan nasıl çıkarılır?
- 17. İki bayttan bir float nasıl monte edilir?
- 18. Değişken boyutun standart boyuta dönüştürülmesi
- 19. Besteci: paketin hangi pakette olduğunu öğrenmek için:
- 20. SQL - seçili kaydın hangi konum/sipariş/sayımı olduğunu nasıl belirlerim?
- 21. Büyük tarayıcılarda hangi motorlar kullanılıyor?
- 22. PHP getimagesize() hangi dosya türlerini döndürür?
- 23. AT & T sözdiziminin (% eax) anlamı nedir?
- 24. Yaşın 18 yaşından büyük olduğunu doğrulayın
- 25. Bir OCaml işlevinin kuyruk özyinelemeli olduğunu doğrulayın
- 26. Bu dildeki hangi dil veya sözdiziminin olduğunu
- 27. hangi gtk parçacığının mevcut seçimi olduğunu öğren
- 28. Hangi işlevlerin satır içi olduğunu öğrenin
- 29. Görev çubuğunun hangi ekran üzerinde olduğunu belirleme
- 30. Hangi metin kutusunun boş olduğunu bulma
Bu sorunun yanıtlarına bakın: http://stackoverflow.com/questions/2155730/how-do-c-compilers-implement-functions-that-return-large-structures –