begin process at 2012 05 25 05:00:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

je bloque!!!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

je bloque!!!!

jeudi 18 novembre 2010 à 23:48:11 | je bloque!!!!

marooh

bonjour,
j'ai ecrit un code assembleur qui compte le nombre des séparateurs dans une chaine saisie,en assemblant tout va bien mais l'execution ne donne pas le resultat attendu,elle donne rien meme je ne sais pas où reside l'erreur.J'ai même utilisé un debugger mais je n'ai pas trouvé la faille.si vous pouvez bien m'aider ça serait gentille
voici mon code:
Code :
.model small
.stack 200h
.data
chaine db 10,13,"je veux tester seulement$"
msg5 db 10,13, "le nombre de separateur est:$"
.code
start:
mov ax,@data
mov ds, ax  
xor CX, CX \\initialisation du compteur de sep
lea si,chaine \\on pointe si
boucle: 
mov [si],al
cmp al," "   \\comparaison avec un espace (comme essaie)
jz separateur
cmp al,'$' \\verifier si c'est la fin de la chaine
jz fin
jmp incrementation
 
fin: 
mov ah,9
lea dx,msg5  
int 21h 
mov ah,2  \\affichage du nbre de separateurs
mov dx,cx
int 21h 
incrementation:
inc si
jmp boucle
separateur: 
inc cx   
jmp incrementation
end start
vendredi 19 novembre 2010 à 00:02:05 | Re : je bloque!!!!

marooh

OUUUUPS une petite erreur à corriger:
on remplace mov [si],al
par mov al, BYTE PTR [bx]
mais maintenant le resultat est le suivant:
au lieu d'afficher le nombre de separateurs,il affiche le msg5 à chaque fois il rencontre un separateurs et il bloque dans une boucle infinie (constaté en utilisant un debugger)
vendredi 19 novembre 2010 à 00:20:44 | Re : je bloque!!!!

patatalo

Membre Club Administrateur CodeS-SourceS
j'allais le dire mais j'aurais plutôt remplacé par mov al,[si] ;al est forcement un byte.

@++
vendredi 19 novembre 2010 à 00:30:17 | Re : je bloque!!!!

patatalo

Membre Club Administrateur CodeS-SourceS
allez, je suis de bonne humeur

en nasm:

xor ax,ax; ax = 0
xor cx,cx
lea si,[chaine]; si pointe vers chaine
.1
cmp byte ptr[si],' '; compare *si == ' '
sete al; al = 1 si oui
add cx,ax; cx = cx + ax
cmp byte ptr[si],'$'; compare *si == '$'
lea si,[si+1];incremente si sans chg flags
jne .1

@++
vendredi 19 novembre 2010 à 01:31:55 | Re : je bloque!!!!

marooh

re,
vraiment merci pour la reponse!!!
le petit hic c'est SETE, ça n'existe pas en tasm,il m'affiche l'erreur suivante
illegal instruction for currently selected processor
par quoi je peux la remplacer??
vendredi 19 novembre 2010 à 01:53:29 | Re : je bloque!!!!

marooh

j'ai essayé comme suit mais ça ne marche pas
Code :
.model small
.stack 200h
.data
chaine db 10,13,"je veux tester seulement$"
msg5 db 10,13, "le nombre de separateur est:$"

.code
start:
mov ax,@data
mov ds, ax  
xor ax,ax
xor cx,cx 
lea si,[chaine]
boucle: 
cmp byte ptr[si],' '
jc ajouter
ajouter:
add cx,ax
cmp byte ptr[si],'$'
lea si,[si+1]
jne boucle 
 
mov ah,9
lea dx,msg5 
int 21h 
mov ah,2
mov dx,cx
int 21h 

end start
vendredi 19 novembre 2010 à 09:41:56 | Re : je bloque!!!!

patatalo

Membre Club Administrateur CodeS-SourceS
sete, ç'est peut-être effectivement du 486. Regarde les options d'assemblage, tu dois pouvoir modifier la machine. Sinon, il y a plein d'autres possibilitées.

Avec masm, tu peux préciser .386, .486, ... et tasm ressemble beaucoup a masm.


@++
vendredi 19 novembre 2010 à 09:49:02 | Re : je bloque!!!!

patatalo

Membre Club Administrateur CodeS-SourceS
xor cx,cx; cx = 0
lea si,[chaine]; si pointe vers chaine
jmp short .3
.1
inc cx
.2
inc si
.3
cmp byte ptr[si],' '; compare *si == ' '
je .1
cmp byte ptr[si],'$'; compare *si == '$'
jne .2

@++
vendredi 19 novembre 2010 à 13:15:10 | Re : je bloque!!!!

marooh

re,merci infiniment pour cette aide
j'ai utilisé aprés une fonction pour convertir ce nombre binaire que contient cx en une chaine,le resultat affiché est correcte mais juste aprés le resulta il affiche aussi une chaine avec des caracteres bizarres,comment je peux l'enlever??
vendredi 19 novembre 2010 à 15:08:51 | Re : je bloque!!!!

patatalo

Membre Club Administrateur CodeS-SourceS
tu as certainemnt un problème de terminaison de phrase.

Après le nombre transformé en ascii, il faut ajouter un caractère '$' pour D.O.S.

@++

1 2

Cette discussion est classée dans : code, chaine, mov, cx, separateur


Répondre à ce message

Sujets en rapport avec ce message

Adresse mémoire d'une chaine [ par moffer ] Bonjour,Je veux pointer sur le premier caractère de ma chaine. Lorsque je compile le code suivant :SEGMENT DATAchaine db 'Hello$'SEGMENT TEX pb int 21h ah=0ah [ par mat74 ] salut a ts ,voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré u utilisation des variables [ par moffer ] Bonjour à tous.J'ai besoin de recopier ma variable chaine au segment 0b800 pour l'afficher, sans utiliser les interruptions. (c'est pour ensuite la fa pb affichage console [ par mat74 ] voila je cherche a faire un prog qui affiche 0 ou 1 en fonction de la valeur de ax . et le teste est ds une procedure . mais il y a un pb le prog n'af Recuperer le mode Video [ par FearBlue ] Slt a tous !!!!!!!Je souhaite recupérer le mode video g lus dans une doc ca :Cette fonction retourne le numéro de code du mode vidéo en cours et tient Equivalent ASM de chaine[0] = 0 [ par AlexMAN ] Bonjour, C'est simplement une ptite incertitude : pour l'ekivalent de chaine[0] = 0 en C: mov [chaine], 0 ou mov chaine, 0Ou bien c totatelment la mm strrev [ par vecchio56 ] Je regarde le fichier strrev.asm qui est utilisé au moins pour les debogages et je remarque que c'est une traduction d'un algorithme écrit en C qui es pb d'affichage :s [ par rana ] bjrje voudrais savoir, comment faire pour afficher une chaine de caractère en faisant une boucle (en utilisant repne scasb) jusqu a arrive a une lett rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa c/c++ et 19h [ par Xs ] salut !je travaille sous VC++ et j'aimerais utiliser une interuption processeur : 19hmon code actuel marche mais au lieu d'eteindre le PC, il le fait


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,234 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales