Dans ma fonction de montage, il y a 6 arguments. Lorsque j'essaie d'accéder aux quatrième et cinquième arguments, ils sont faux, voici mon code sur ARM CORTEX-8A
push {r4-r8,lr} ldr r6, [sp] ldr r7, [sp, #4]
3 Réponses :
Les arguments supplémentaires sont transmis sur la pile, cependant fort>, le R4, R5, R6, R7, R8 et LR sont 6 registres , vous devez donc ajuster votre si vous faites plus de manipulations avec sp code> les points à l'entrée de la fonction em>. Dans votre prologiciel, vous appuyez sur les registres à enregistrer, ce qui modifie le
SP code>, vous devez donc la comptabiliser.
SP code> offsets par 6 * 4 = 24 octets. Alors, essayez ce qui suit: p>
sp code>, par exemple. Allouer de l'espace pour les vars de pile, vous devrez peut-être en tenir compte également. P> P>
Pourquoi pas simplement l'essayer? Assemblez, puis Démonter P> arm-none-eabi-gcc --version
arm-none-eabi-gcc (GCC) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Les 12 octets supplémentaires doivent conserver sp code> aligné sur un multiple de 16 octets selon les besoins de l'ABI.
http://infocenter.arm.com/ Aide / Topic / com.arm.doc.ihi0042F / IHI0042F_AAPCS.PDF 5.5 Passage du paramètre contient la réponse. P>
Ce n'est pas super facile à comprendre car il s'agit d'un algorithme, mais la partie cruciale qui répond à la question semble être: p>
C.5
Si la NCRN est inférieure à R4 et que la NSAA est égale à la SP, l'argument est divisé entre le noyau
registres et la pile. La première partie de l'argument est c
opté dans les registres de base commençant à la
NCRN jusqu'à R3 y compris. Le reste de l'argument est copié sur la pile, à partir de la
NSAA. La NCRN est définie sur R4 et la NSAA est incrémentée par la taille de l'argument moins la
montant passé
dans des registres. L'argument a maintenant été alloué. P>
blockQuote>
Ce que les autres ont dit, signifie 4 registres + pile. P>