Qu'est-ce que l'argument de pousser ordre
J'apprends le langage d'Assemblage. Quel est exactement l'argument de pousser commande? je comprends son comment les arguments sont poussés à la pile mais que fait la gauche et la partie droite signifie? de gauche ou de droite, mais de quoi?
Ou est-ce simplement à voir avec la façon dont la commande est sémantiquement écrit, c'est à dire:
mov ebp, esp ;esp est déplacé dans ebp, de droite à gauche.
Est-ce correct ou quelqu'un pourrait-il m'éclairer?
Merci beaucoup!
OriginalL'auteur Axolotl | 2012-02-04
Vous devez vous connecter pour publier un commentaire.
Le processeur ne connaît pas les "arguments de la fonction'. Par conséquent, lorsque vous voulez écrire
f(a,b,c)
, vous avez vraiment besoin de pousser les arguments "quelque part".Cette convention. Je sais que sur la plupart des machines x86, les arguments de la fonction sont poussés sur la pile de droite à gauche, c'est à dire d'abord c, puis b, puis un.
Maintenant la fonction appelée peut utiliser
ebx -1
pour un,ebx - 2
pour b etebx - 3
pour c.Vous pourrait ainsi établir une convention qui dit: les deux premiers arguments sont dans les registres
ebx
etecx
, reste sur la pile. Aussi longtemps que l'appelant et l'appelé d'accord, vous êtes fine.OriginalL'auteur xtofl
En plus de xtofl'explication que vous pourriez même avoir un coup d'oeil à ce tableau de x86 conventions d'appel. Ce que vous remarquerez, en ce qui concerne l'argument de l'ordre, c'est que presque tous les des arguments sont poussés sur la droite vers la gauche (à l'extrême droite argument est poussé à la première), à l'exception de Pascal.
Un autre scénario xtofl ne couvre pas de registre des arguments certains ABIs exiger que certains arguments sont dans les registres par opposition à sur la pile. Sur un
x86_64
système, par exemple, la fonction:mettra arguments:
Plus précisément, ce serait semblable (Intel syntaxe):
Si les registres sont remplis à partir de la liste des registres de gauche à droite et puis la pile est utilisée de droite à gauche.
Comme xtofl dit, il n'a pas d'importance ce que vous faites fourni à l'appelant et de l'appelé d'accord - il est clair, cependant, si l'appelant et l'appelé en désaccord qui va provoquer des problèmes d'incompatibilité et c'est effectivement un sujet de préoccupation non seulement pour l'assembleur, mais pour un langage de haut niveau trop - heureusement, les compilateurs opèrent largement de droite à gauche. Pour en savoir plus, vous pourriez trouver de l'appelé/appelant le nettoyage de la pile intéressant - et remarquez comment il a été standardisé à une méthode pour
x86_64
.Vous ne dites pas que vous êtes en utilisant
x86
- votre architecture sera très certainement un appel standard convention de travail sans elle, c'est difficile.OriginalL'auteur