Correction d'un code

marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011 - 2 janv. 2011 à 15:26
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 8 févr. 2011 à 22:31
bonjour,j'ai écrit un code assembleur qui permet de comparer deux tableaux,ce code je veux l'inserer dans un code c.
si vous pouvez bien me le corriger et j'ai une question à poser: je veux en cas d'egalité ecrire un truc que je pourrais utiliser aprés dans le code c qui affirme qu'il y a egalité pour faire qqes traitements
voici le code:
mov bx, 0;


outer_loop:
                 Mov cx,taille;

inner_loop:
                 mov ax, [Aux+bx];
                Cmp ax, [itemset+bx];
                je Element_is_Equal;


Element_is_Equal:
                                    Add bx, 2;
                                    cmp bx,taille;
                                    jne inner_loop;

43 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 janv. 2011 à 08:54
Voilà, retour du résultat (0 si idem, 1 si différent) dans AX :
xor bx, bx
Mov cx,taille;
inner_loop:
mov ax, [Aux+bx];
Cmp ax, [itemset+bx];
Jne isdifferent
Add bx, 2;
cmp bx,taille;
jne inner_loop;
xor ax, ax
ret
isdifferent:
mov ax, 1
ret


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
3 janv. 2011 à 15:58
merci infiniment pour la reponse!!
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
3 janv. 2011 à 16:38
svp une autre question,en mettant ce code assembleur dans mon code c en utilisant asm("instr"); j'ai aussi mis le tout dans un if (asm("");)==0 pour utiliser l'egalité
et bein ça marche pas et c'est prévisible vu que c'est illogique mais le probleme c'est que code blocks n'accepte pas la forme _asm{intsr} ou __asm{instr}
alors comment je pourrais utiliser mon resultat final??
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 janv. 2011 à 22:27
Faut assembler avec NASM et linker avec l'objet produit (obj Win32)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
4 janv. 2011 à 18:45
salut,


Et ne pas mélanger du code certainement 32 bits (C) avec du code 16 bits (assembleur)

@++
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
4 janv. 2011 à 22:12
merci,
j'ai compiler mon code assembleur mais j'ai eu une erreur que je n'ai pas su resoudre
"too many memory reference for "cmp"" et ligne erreur est
asm("mov ax,[Aux+si]");
asm("Cmp ax,[itemset+bx]");
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
4 janv. 2011 à 23:30
Et ne pas mélanger du code certainement 32 bits (C) avec du code 16 bits (assembleur)


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
4 janv. 2011 à 23:59
re,
asm("mov eax,[Aux+esi]");
asm("Cmp eax,[itemset+ebx]");
ça marche pas aussi
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 janv. 2011 à 00:02
Ajouter un E devant le nom de registres 32 bits ne changera rien : gcc attend une syntaxe AT&T. C'est pas pour rien que j'ai dit d'
assembler avec NASM et de linker avec l'objet produit (obj Win32)


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
5 janv. 2011 à 00:46
re,
j'ai utiliser asm (".intel_syntax noprefix"); donc normalment ça marche le syntaxe intel
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 janv. 2011 à 10:53
Tu vois bien que c'est pas le cas ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 janv. 2011 à 13:38
et ce n'est pas "Cmp" le nom de l'instruction mais "cmp"
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
5 janv. 2011 à 17:18
re,
d'accord merci,svp vous n'aurez pas un lien pour apprendre à linker un fichier asm avec le programme c?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 janv. 2011 à 18:53
Faut surtout l'assembler : Code::Blocks gère lui-même le link des fichiers objet. Va dans Settings, Compiler and debugger, Advanced settings, (Clique sur Yes lorsqu'il te demande confirmation), +, tape asm, OK, remplace le texte par nasm -f win32 -o $object $file et quitte les fenêtres de settings en cliquant sur OK. Redémarre Code::Blocks pour que les changements soient pris en compte, ajoute un fichier ASM à ton projet et colles-y ceci :
SEGMENT .code

GLOBAL _taFonction
taFonction:
xor ax, ax
ret

Dans ton header, mets le prototype de la fonction : extern int taFonction(); Tu n'as plus qu'à sauver les fichiers et aller dans le menu Build, puis Build and run (ou taper sur F9).

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
5 janv. 2011 à 19:14
merci pour l'aide!! j'ai lu dans un doc sur internet qu'il faut mettre dans le fichier asm

_TEXT           SEGMENT byte public 'CODE'

                ASSUME  cs:_TEXT

                PUBLIC  _mafonction
_mafonction      PROC    near            ; appel avec CALL proche

ceci n'est pas correcte??
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
5 janv. 2011 à 21:30
Essaie, ça t'explosera à la figure. J'ai pas mis un bout de code pour faire joli ! Evidemment, tu dois avoir au préalable installé NASM et mis son dossier d'installation dans le %PATH%. Tu peux aussi simplement copier nasm.exe que tu auras téléchargé sur Sourceforge

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
6 janv. 2011 à 23:25
re,
j'ai bien employé votre methode mais là j'ai un probleme avec la declaration de ma fonction dans le code c
voila ce que j'ai mis:
extern int compar(int taille,int a,int aux[],int t[]); au début
et dans le code:
if (compar(taille,a,aux[],t[])==0)
il m'affiche les erreurs suivantes : syntaxe error before ] token
et pour le } qui ferme la fonction main syntaxe error before } token
et en mettant extern int compar(int taille,int a,int &aux,int &t);
et dans le code c la meme chose j'ai comme erreur : syntaxe error before & token
t et aux sont deux tab déclarés dans le prog c et remplie déja
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
6 janv. 2011 à 23:42
A l'instanciation : if (compar(taille,a,aux,t)==0)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
7 janv. 2011 à 00:11
re,
si je met cela j'ai undefined reference to _compar
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
7 janv. 2011 à 09:00
Dans le fichier ASM, ta fonction doit se nommer _compar et pas compar. Si tu vais pas exactement ce que je dis faut pas s'étonner que ça marche pas.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Rejoignez-nous