2016-01-27 2 views
0

Est-il possible d'élargir le cadre de pile comme ceci:Agrandir le cadre de la pile - Alignement?

subq $1, %rsp 

si nous voulons juste stocker une char sur la pile (par exemple). Ou avons-nous besoin d'agrandir la pile par un multiple de 8 ou quelque chose. Y a-t-il un alignement?

+1

Techniquement oui, mais ne le faites pas. Les conventions d'appel imposent au moins 8 octets d'alignement, éventuellement 16, si vous avez l'intention d'interopérer avec d'autres codes. Le désalignement implique également des pénalités de performance. – Jester

+0

Il est possible, x86 n'est pas très difficile à ce sujet. Ne faites aucun appel de fonction, la pile mal alignée les ralentit. Ou faites les échouer complètement quand ils contiennent du code SIMD, de plus en plus commun Puisque vous ne devriez pas faire d'appels, il est inutile de ne pas ajuster le pointeur de pile par 4 ou 8. –

Répondre

4

Dit simplement "Oui". Vous pouvez agrandir le cadre de la pile de la manière que vous avez indiquée. Cependant, comme vous le demandez dans le reste de votre question, vous risquez de rencontrer des problèmes d'alignement des piles.

Ces problèmes provoquent rarement des problèmes dans votre propre code. Honnêtement, vous pouvez gérer la pile et transmettre les paramètres comme vous le souhaitez tant que vous ne respectez pas certaines limitations architecturales. Toutefois, pour interopérer avec les appels système et de bibliothèque, l'alignement de la pile sera généralement requis. Vous pourriez trouver le document this utile. Juste comme un exemple, GCC sous Linux sur x86 et x86_64 attend (impose) l'alignement de 16 octets de la pile et utilise cdecl.

Vous souhaitez localiser toute norme d'appel et exigences d'alignement dans les documents de référence pour la plate-forme et les bibliothèques avec lesquelles vous travaillez.

+2

Vous voulez dire 'cdecl' pas' stdcall'. – Jester

+0

Hmm .. Oups! Merci! –

+1

@ jester un jour J'ai besoin de vous mettre dans une conversation et de découvrir votre arrière-plan. Votre connaissance de l'assemblage est vraiment large et impressionnante. :) –