2010-07-15 6 views
2

Je voudrais faire une programmation "en ligne" d'assemblage dans Sparc et je me demande comment je peux faire cela avec le passage du registre.Sparc Procédure Conventions d'appel

mieux pour expliquer mon problème avec un petit exemple

int main() 
{ 
    int a = 5; 
    int b = 6; 
    int res; 

    asm_addition(a,b); 

    printf("Result: %d\n", res); 
    return(0); 
} 
    // My assembler addition 

.global asm_addition    

.align 4 

    add rs1, rs2, rd 
    restore 

Est-ce que quelqu'un sait que je dois utiliser des registres pour que les valeurs a et b seront ajoutés? Enfin, quel registre dois-je speficy pour rd afin que le résultat sera imprimé avec la dernière instruction printf suivant la routine assemly.

Merci beaucoup pour votre contribution!

Répondre

0

La convention d'appel peut dépendre du système d'exploitation. Je présume Solaris. Google pour system v application binary interface sparc, le PDF est facile à trouver.

La documentation de l'assembleur complet en ligne est enterrée quelque part dans les fichiers PDF SunStudio et n'est pas si facile à trouver. Officiellement, il est également accessible via man -s 1 inline, mais sur mon système, je dois ouvrir le fichier manuellement. Dans la page de manuel, recherchez "Conventions de codage pour les systèmes SPARC".

0

Sous Solaris, les paramètres sont transmis via le registre% o0 à% o5 puis sur la pile. Si la fonction appelée est une fonction feuille (c'est-à-dire qu'elle n'appelle pas une autre fonction), la fenêtre de registre n'est pas déplacée vers l'avant et la fonction y accède directement via% o0 à% o5. Si la fenêtre de registre est déplacée, la fonction peut accéder aux paramètres via les registres% i0 à% i5. La valeur de retour va de la même façon via% i0 dans l'appelé qui devient% o0 dans l'appelant. Pour les paramètres à virgule flottante, ils sont gérés via les registres FP mais vous devrez lire le document Dummy00001 pointé dessus.