
geogeo
:Mais comment veux-tu que le compilo sache ce que tu veux faire ? Tu pourrais très bien vouloir additionner les 32 bits du registre !
Un Warning pourrais faire l'affaire.
geogeo :Mais enfin, réfléchis avant de dire n'importe quoi !
Ah ok je pensais qu'il était possible de faire ça directement en traitant le code.
Mais enfin, réfléchis avant de dire n'importe quoi !
Ce n'est pas impossible d'émettre un warning devant ce genre de code, mais c'est débile.
Si un programmeur veut additionner les 32 bits de d0 avec a0, il utilisera move.l d0,a0, et il n'a pas à recevoir un quelconque warning à l'assemblage...
Hmm, est-ce que ça serait possible de faire comme PocketNES, à savoir, une frame sur deux, afficher une couleur différente pour chaque pixel de l'écran qui représente 2 pixels logiques ? (Si qq1 voit ce que je veux dire)Effectivement, il peut faire des tables (les pixels affichés la première frame, et ceux la deuxième) mais de toutes façons c'est inutile car:
| long une_fonction_étrange(long param1 asm("d1"), long param2 asm("d2")); une_fonction_étrange: move.w %d1,%d0 move.w %d2,%d1 move.w %d0,%d2 move.l %d1,%d0 add.l %d2,%d0 rtsLà, à aucun moment je n'ai sauvé et restauré d2 et l'envie m'a pris d'écrire sur les bits de poids fort. Est-ce que c'est pour autant une erreur ?
tu entre en paramètre un short dans d2 par exemple, dans ton code à aucun moment tu n'as sauvé d2 et restauré et tout d'un coups te prend l'envie d'écrire sur les 16 bits de poids forts
geogeo :Mais si on fait ça pour add, pourquoi ne pas le faire sur toutes les autres instructions d'opérations logiques et arithmétiques ?
lol je ne suis pas si bête que ça quand même, j'ai pas dit scruter toutes les instructions et emettre un warning sur chaque instruction, tu imagine une source avec 10000 lignes, et je ne te parle pas du nombres de warnings, y a de quoi devenir.
Je parle du cas suivant , tu entre en paramètre un short dans d4 par exemple, dans ton code à aucun moment tu n'as sauvé d4 et restauré et tout d'un coups te prend l'envie d'écrire sur les 16 bits de poids forts, là il y a forcémement un bug ou encore tu utilise d5 dans ton programme mais à aucun moment tu ne le sauve et tu le restaure donc encore un bug. Bien sûr comme Kevin vient de le dire il faudrait une machine virtuel qui execute ce code et qui à chaque étape vérifie le contenu du registre en fonction des paramètres passé par la fonction... Je pense quand même que ce scrutage ne demande pas l'affichage d'une multitude de warnings.Déjà, ce n'est pas le rôle d'un assembleur de faire ce genre de vérifications (qui sont quand même tordues, parce qu'on peut difficilement prévoir correctement ce que le programmeur voulait faire)
Ensuite, si j'ai une fonction :; Additionne deux nombres, d0=nombre1 et d1=nombre2 ; résultat dans d0 ; détruit d0 et d1 FComment veux tu que dans ce genre de cas l'assembleur sache si tu veux ou non faire une addition sur 32 bits et donc émettre un warning ?
D'ailleurs je ne suis pas sûr que ça serve vraiment à quelquechose de continuer là dessus...
GoldenCrystal :
geogeo> Mais tu n'as rien compris! Le programmeur peut très bien avoir un objectif précis:| long une_fonction_étrange(long param1 asm("d1"), long param2 asm("d2")); une_fonction_étrange: move.w %d1,%d0 move.w %d2,%d1 move.w %d0,%d2 move.l %d1,%d0 add.l %d2,%d0 rtsLà, à aucun moment je n'ai sauvé et restauré d2 et l'envie m'a pris d'écrire sur les bits de poids fort. Est-ce que c'est pour autant une erreur ?
GoldenCrystal :
sauvegarder ces registres dans les fonctions c'est une convention de TIGCC.
geogeo
: je parle pas de l'assembleur je parle d'une machine virtuel executant le code rien de plus et où chaque adresses des fonctions est connus. Mais ça demande une communication entrele compilateur C, l'assembleur et la machine virtuel!
Ximoon
: D'autant plus qu'en asm on peut faire facilement des fonctions très tordues, des brachements aléatoires et du code auto modifiant... c'est vraiment n'importequoi cette histoire de warning.
geogeoN'importe quoi, quelle mauvaise foi !
:D'ailleurs je ne suis pas sûr que ça serve vraiment à quelquechose de continuer là dessus...
Enfin!
En tout cas le langage veut ça et on voir clairement que c'est impossible!
Les bugs sont corrigé et c'est le principal mais en lancant ce débât j'avais juste pour but de voir clairement qu'il n'était pas possible de vérifier un programme en assembleur!