Assembleur inline en C

Assembleur inline en C - ASM - Programmation

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  :)

Reply

Marsh Posté le 21-12-2005 à 22:36:46   

Reply

Marsh Posté le 22-12-2005 à 11:24:03    

C'est pas asm{} ?

Reply

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

Reply

Marsh Posté le 22-12-2005 à 12:34:19    

et bon courage avec la syntaxe merdique AT&T de l'asm inline de GCC


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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/


Message édité par push le 22-12-2005 à 12:50:33
Reply

Marsh Posté le 22-12-2005 à 21:47:33    

db__ a écrit :

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


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..

Reply

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...

Reply

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? :))

Reply

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.

Message cité 2 fois
Message édité par dividee le 24-12-2005 à 02:40:25
Reply

Marsh Posté le 26-12-2005 à 10:03:15    

dividee a écrit :


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.


 
si a et/ou b = 0 ca marche pas :p
 
[:benj9002]


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 26-12-2005 à 10:03:15   

Reply

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).
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.


Merci pour la reponse, ça m'est d'une grande aide  :bounce:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed