2010-03-17 10 views
0

Est-il possible d'allouer de la mémoire de portée locale dans l'assembly?Déclaration de variables locales dans l'assembly

Par exemple, considérons la situation suivante (complètement artificielle):

J'ai deux macros, dont l'un dépend de l'autre. La première est:

minimum MACRO dest, num1, num2 
; Finds the minimum of two unsigned numbers, stores the result in dest 

Et le second est:

tripMin MACRO dest, num1, num2, num3 
; Finds the minimum of three unsigned numbers, stores the result in dest 

minimum firstMin, num1, num2 
minimum secondMin, num2, num3 
minimum dest, firstMin, secondMin 

(. Je sais que ce n'est pas un exemple réaliste pour diverses raisons, mais garder avec moi)

En supposant que tous les registres sont occupés, est-il possible de déclarer firstMin et secondMin localement dans la macro?

Ou est-ce que je suis juste mieux de libérer un registre en poussant sa valeur sur la pile et de le repasser quand j'ai fini?

Répondre

1

La mémoire de portée locale est une notion qui s'applique uniquement aux langages délimités, pas à l'assemblage.

Si vous deviez écrire la même chose qu'une fonction dans, disons C, vos temporaires seraient stockés sur la pile (ou les registres disponibles s'il y en a, selon l'ABI). Vous pouvez imiter la même chose. La manière de pousser/extraire les valeurs de la pile dépend du langage d'assemblage que vous utilisez. Cependant, cela commence à ressembler terriblement à un appel de fonction.

+0

Ah ok, c'est logique. Je pense que ce que je voulais vraiment, c'était la différence entre les macros et les fonctions; votre réponse a été bien expliquée. Merci! – dckrooney

Questions connexes