Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation Assembleur 68K » fonction asm : comment passer plus de paramètres q (8 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Orage Ecrit le: Samedi 14 août 2004 à 10:42 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Voilà, je cherche à coder une fonction d'affichage masquée en asm, le problème est que les deux registres d'adresse a0 et a1 disponibles sont utilisés. Y a-t-il une solution pour passer plus de paramètres dans une fonction asm ?

J'ai aussi vu dans le header de extgraph, que cette lib utilise en argument pour certaines fonctions le registre d3 : est-il libre ?

Merci d'avance !
    
./Post n°1   Marquer comme non lu.
geogeo Ecrit le: Samedi 14 août 2004 à 11:57 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Utiliser la pile soit a7 (sp) et ensuite dépiler les paramètres dans l'ordre inverse. :)
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°2   Marquer comme non lu.
Orage Ecrit le: Samedi 14 août 2004 à 13:50 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Ah bon c'est possible pour les arguments ? Parceque une fois que la fonction est appelée, même si on sauve et restaure les registres, ils ont déjà étés modifiés par l'appel de la fonction.

Edit : Ou sinon, serait-il possible de sauver les registres au début du prog avec une fonction du genre GL_Init(), et de les restaurer à la fin ? Comme ça on gagnerait du tps avec les fonctions qui sauvent/restaurent à chaque appel.
-Edité le Samedi 14 août 2004 à 13:55 par Orage-
    
./Post n°3   Marquer comme non lu.
geogeo Ecrit le: Samedi 14 août 2004 à 15:15 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Ah bon c'est possible pour les arguments ? Parceque une fois que la fonction est appelée, même si on sauve et restaure les registres, ils ont déjà étés modifiés par l'appel de la fonction.


Comment ça?
Si tu fais une fonction dont les arguments sont sur la pile, aucun registre n'est modifié, sauf si tu programme en C avec TIGCC ou là les registres d3,d4,d5,d6,d7,a2,a3,a4,a5,a6 sont perdus ou encore en utilisant des ROM_CALLS.

Oui c'est possible de sauvgarder les registres, suffit de faire un espace mémoire et de les empiler, genre avec a6 et pour restuarer, aller dans cette zone mémoire et dépiller. :)
Mais je ne vois pas l'utilité!
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°4   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 14 août 2004 à 16:10 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


  • Tu peux utiliser n'importe quel registre (sauf %a6=%fp et %a7=%sp, et évite aussi %a5 pour ne pas entrer en conflit avec OPTIMIZE_ROM_CALLS) pour le passage de paramètres.
  • Ta fonction peut détruire %d0, %d1, %d2, %a0 et %a1, et se doit de sauvegarder/restaurer les autres, et cela indépendamment de l'utilisation de registres pour le passage de paramètres. Tu peux passer un paramètre en %d3, mais à ce moment-là il doit y rester quand tu quittes.
  • Tu peux utiliser la pile pour passer des paramètres, et tu as le droit de modifier les paramètres passés sur la pile (passage strictement par valeur, ce qui est sur la pile n'est qu'une copie).
  • Pour sauvegarder des registres, utilise l'instruction movem.
  • Si ta fonction travaille avec des callbacks utilisateur, ne touche pas du tout à %a5, sinon ça ne marchera pas avec OPTIMIZE_ROM_CALLS.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°5   Marquer comme non lu.
Orage Ecrit le: Samedi 14 août 2004 à 21:32 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Ok merci beaucoup ! Je vais faire passer les paramètres par la pile alors.
    
./Post n°6   Marquer comme non lu.
Lionel Debroux Ecrit le: Dimanche 15 août 2004 à 14:41 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

> Je vais faire passer les paramètres par la pile alors.
Aucun intérêt, car ça donne du code plus gros et plus lent.
Lionel Debroux - membre de TICT.
    
./Post n°7   Marquer comme non lu.
Orage Ecrit le: Dimanche 15 août 2004 à 17:47 Déconnecté(e)    Voir le profil de Orage Envoyer un email à Orage Envoyer un message privé à Orage  


Mais si je dois faire passer plus de paramètres que le permettent d0-d3/a0-a1, je n'ai pas d'autre solution que de passer le paramètre par la pile, non ?
    
./Post n°8   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 16 août 2004 à 10:24 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Bien sûr, mais ton post "Je vais faire passer les paramètres par la pile alors." m'avait fait croire - manifestement à tort - que tu voulais tout passer par la pile, ce qui est la convention __stkparm__ stricte (ExtGraph contient du __stkparm__ pur pour la compatibilité, du mélangé __stkparm__ / __regparm__ et du __regparm__ pur) et beaucoup moins efficace.
Même si je le ferai dans le tilemap engine d'ExtGraph car je n'ai pas le temps de faire mieux, il vaut mieux ne pas utiliser d4-d7/a2-a6 (j'utiliserai a2-a3). Ca créera des problèmes avec l'option utile (taille, vitesse) -freg-relative-an (n = 4 ou 5 la plupart du temps) et les global register variables. Ce que Kevin a il me semble fait dans certaines fonctions de TIGCCLIB...
Lionel Debroux - membre de TICT.
    
  :: Index » Forum Ti68K » Programmation Assembleur 68K » fonction asm : comment passer plus de paramètres q (8 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 34.64ms avec 18 requetes