probleme de comparaison

probleme de comparaison - ASM - Programmation

Marsh Posté le 31-01-2011 à 14:12:37    

salut je veux comparer deux tableaux de chaines de caraceteres s'il sont egaux j'affiche 'o' sinn j'affiche 'n'.je travaille avec le tasm 32 bits
voici mon code mais il ne s'exécute pas correctement pouvez vous m'aider?
title comparaison
.model small
.stack 100h
.386
.data
itemset  db  'chicoutimi§','papa§','tonton§'
tab1  db  'chicoutimi§','fbia§','tonton§'
 
.code
main PROC
    mov ax,@data
    mov ds,ax
    mov es,ax
 
    mov si,0
    lea si,itemset[si]
    mov di,0
    lea di,tab1[di]
 
    mov cx,3
       CLD                     ; adresse croissante
 
REPE CMPSB
jne non_identique
mov dl,'o'
jmp aff2
 
non_identique:
mov dl,'N'
 
 
aff2:
mov ah,2
int 21h
 
mov ah,4ch
int 21h
 
main ENDP
END main;

Reply

Marsh Posté le 31-01-2011 à 14:12:37   

Reply

Marsh Posté le 31-01-2011 à 16:19:50    

- CMPSB compare l'octet contenu dans [DS:SI] à l'octet contenu dans [ES:DI], tu dois donc initialiser DS avec ta chaîne source et ES avec ta chaine destination, ce que tu ne fais pas ici (tu initialises ces 2 registres avec l'adresse de @data)

 

- ton CX == à 3, je vois pas pourquoi... CX est censé contenir le nombre d'octets à comparer. j'ai l'impression que tu confonds octet et chaine de caractère

 

- chaque définition de chaine de caractère doit se terminer par "0"

 

tu as du pain sur la planche

Message cité 1 fois
Message édité par Harkonnen le 31-01-2011 à 16:20:05

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

Marsh Posté le 31-01-2011 à 16:44:31    

keli1 a écrit :

itemset  db  'chicoutimi§','papa§','tonton§'
tab1  db  'chicoutimi§','fbia§','tonton§'

Harkonnen a écrit :

- chaque définition de chaine de caractère doit se terminer par "0"

Oui, en langage C, il faut terminer les chaines de caractères par un caractère nul.
 
Mais en assembleur, ce n'est pas obligatoire. Il arrive même souvent que le caractère de fin de chaîne soit le dollar, car c'est une convention de Microsoft et d'Intel.
 
Par contre, le caractère "§" me semble assez rarement utilisé pour cela.
 

Reply

Marsh Posté le 02-02-2011 à 09:03:04    

salut je suis bloquée pouvez vous m'aider ?  
1)saisir un ensemble d'identifiants par exemple{voiture,maison,lait},on le transforme en un ensemble d'identifiants{1,3,5} dont la valeur maximale est égale à 31 et generer la representation en tableau de bits de cet ensemble dans une variable de taille 4 octets en mémoire appelée Itemset(à developper en langage c)  
2)saisir une série de 100 ensembles d'identifiants au plus,respectant la contrainte mentionnée dans (1).cette série sera nommeé par la suite "Base".cette fonction doit etre developpeé en C  
3)afficher les indices et le nombre d'ensembles de base contenant Itemset.cette fonction doit etre developpée en C et en assembleur  
j'ai fait la 1ere question et elle s'exécute sans probleme  
pour la 2eme j'ai utilisé une matrice la fonction s'exécute mais j'ai du doute  
voila le code pour2)  
 
 
Code :  

Code :
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main(void)
  4. {
  5. char base[32][100];
  6. int m,i,j,n;
  7. do
  8. {
  9. printf("donner la longueur de la base\n\n " );
  10. scanf("%d",&m);
  11. }
  12. while (m>=100);
  13. for(i=0;i<m;i++)
  14. {
  15. printf("l'ensemble numero : %d\n",i);
  16. do
  17. {
  18. printf("donnez le nombre d'identifiant\n\n " );
  19. scanf("%d",&n);
  20. }
  21. while(n>33);
  22. printf("veuillez entrer l'ensemble d'identifiants\n\n " );
  23. for(j=0;j<=n;j++)
  24. fgets(base[j],sizeof*base,stdin);
  25. printf("l'element de la base est %d\n",i+1);
  26. }
  27. system("pause" );
  28. return 0;
  29. }


cette méthode est fausse ou nn car lorsque je commence la 3eme je ne trouve pa comment je peux comparer l'itemset avec les tableaux de bases? .  
pour la 3eme question je n'ai pas trouvé comment comparer les tableaux de la base avec l'itemset est ce que je dois changer la méthode de la matrice ou comment?


Message édité par keli1 le 02-02-2011 à 09:03:47
Reply

Marsh Posté le 02-02-2011 à 09:32:07    

Merci d'ouvrir un autre sujet pour cette question, qui n'a strictement rien à voir avec le sujet actuel.

Reply

Sujets relatifs:

Leave a Replay

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