Assembleur inline en C - ASM - Programmation
Marsh Posté le 22-12-2005 à 12:14:52
Bonjour
Je ne sais pas mélanger le tout (ASM + C) mais attention !
un int est un nombre signé et pour le processeur
additioner un nombre négatif avec un nombre positif dont la valeur est suppérieur à la valeur absolue du nombre négatif entrainera un positionement de CF sans que le résultat soit erronnée.
de même additionner deux int positif voisin de la limite max du nombre positif en représentation pour l'int ne positionnera pas CF alors que le résultat sera faux.
Il ne faut pas confondre retenu et débordement.
CF est à utiliser pour les unsigned et OF pour les int
Marsh Posté le 22-12-2005 à 12:34:19
et bon courage avec la syntaxe merdique AT&T de l'asm inline de GCC
Marsh Posté le 22-12-2005 à 12:47:33
Harkonnen a écrit : et bon courage avec la syntaxe merdique AT&T de l'asm inline de GCC |
Ça fait un paquet d'année qu'on a le choix..
sinon pour Twinsens> http://forum.hardware.fr/hardwaref [...] 9526-1.htm
http://asm.sourceforge.net/
Marsh Posté le 22-12-2005 à 21:47:33
db__ a écrit : Bonjour |
Pas de souci pour ça, ce ne sont que des non signés... c'est la retenue qui m'interesse.
j'ai regarder un peu sur le net et c'est beaucoup avec la syntaxe AT&T... mais bon, je v bien y arrive...
Merci pour le lien push..
Marsh Posté le 22-12-2005 à 22:37:53
Twinsens a écrit : Pas de souci pour ça, ce ne sont que des non signés... c'est la retenue qui m'interesse. |
Dans ce cas pourquoi ne pas simplement vérifier si la somme n'est pas inférieure à l'un des deux opérandes ? Si il y a eu retenue, la somme sera toujours inférieure aux deux opérandes. Pas besoin d'ASM pour ça...
Marsh Posté le 23-12-2005 à 12:02:16
dividee a écrit : Dans ce cas pourquoi ne pas simplement vérifier si la somme n'est pas inférieure à l'un des deux opérandes ? Si il y a eu retenue, la somme sera toujours inférieure aux deux opérandes. Pas besoin d'ASM pour ça... |
Ouais.. j'y avais pas pensé... merci mais quelqu'un en aurait-il une preuve (mathématique? )
Marsh Posté le 24-12-2005 à 02:31:28
La preuve ? Ben c'est facile. Quand on fait une addition d'entier non signés sans se préoccuper du dépassement, on fait une addition modulo N (N=2 exposant le nombre de bit de la représentation d'un entier).
Si on a 0 <= a,b < N, et (a + b) mod N = c, c vaudra soit a+b (si a+b < N, pas de dépassement), soit a+b-N (si a+b >= N, dépassement). Dans ce cas, comme a et b sont < N, b-N < 0 et a-N <0 et donc c < a et c < b.
Marsh Posté le 26-12-2005 à 10:03:15
dividee a écrit : |
si a et/ou b = 0 ca marche pas
Marsh Posté le 26-12-2005 à 12:18:32
dividee a écrit : La preuve ? Ben c'est facile. Quand on fait une addition d'entier non signés sans se préoccuper du dépassement, on fait une addition modulo N (N=2 exposant le nombre de bit de la représentation d'un entier). |
Merci pour la reponse, ça m'est d'une grande aide
Marsh Posté le 21-12-2005 à 22:36:46
Dans un programme C/C++ j'ai besoin de verifier si l'addition de deux int genere ou non une retenue.
J'ai pensé à utiliser le flag de la carry du micro-processeur.
Est-ce possible de le faire sous gcc / g++ sur un intel?
Si oui, comment