Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1372 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Assembleur inline en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Assembleur inline en C

n°1271576
Twinsens
Posté le 21-12-2005 à 22:36:46  profilanswer
 

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

mood
Publicité
Posté le 21-12-2005 à 22:36:46  profilanswer
 

n°1271691
Elmoricq
Modérateur
Posté le 22-12-2005 à 11:24:03  profilanswer
 

C'est pas asm{} ?

n°1271727
db__
spécialiste de l'à peu près
Posté le 22-12-2005 à 12:14:52  profilanswer
 

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

n°1271736
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-12-2005 à 12:34:19  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
n°1271744
push
/dev/random
Posté le 22-12-2005 à 12:47:33  profilanswer
 

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
n°1272093
Twinsens
Posté le 22-12-2005 à 21:47:33  profilanswer
 

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

n°1272104
dividee
Posté le 22-12-2005 à 22:37:53  profilanswer
 

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

n°1272378
Twinsens
Posté le 23-12-2005 à 12:02:16  profilanswer
 

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

n°1272804
dividee
Posté le 24-12-2005 à 02:31:28  profilanswer
 

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
n°1273227
blackgodde​ss
vive le troll !
Posté le 26-12-2005 à 10:03:15  profilanswer
 

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 )-
mood
Publicité
Posté le 26-12-2005 à 10:03:15  profilanswer
 

n°1273276
Twinsens
Posté le 26-12-2005 à 12:18:32  profilanswer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Assembleur inline en C

 

Sujets relatifs
MASM32 de l'assembleur ???Problème de block/inline [résolu]
CSS Menu déroulant inline avec sous menu verticalInstructions assembleur
assembleur PIC : instruction pour comparerForcer a aligner en haut avec un display:inline
[assembleur] probleme d'interruption avec 68HC11[cours] Assembleur linux
Assembleur MIPS[CSS]Problème sur des <li> en inline.
Plus de sujets relatifs à : Assembleur inline en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR