Erreur en assemblage

marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011 - 7 nov. 2010 à 19:46
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 5 déc. 2010 à 03:58
bonjour,j'ai écrit un code source et en assemblant j'ai eu une erreur dont j'ignore la façon de corriger qui est la suivante:
unexpected end of file encoutered
si quelqu'un peut me donner les raisons de son apparition et les manières de la corriger...
merci

59 réponses

marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
19 nov. 2010 à 01:26
re,
la saisie jusqu'à # tapé fonctionne mais comme j'ai dit le probleme reside maintenant dans l'affichage de la taille de cette chaine,il ya un truc qui cloche
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
19 nov. 2010 à 01:30
Tu parles avec la machine alors, il faut apprendre à la connaître un peu. C'est passionnant mais pas très utilisé dans l'industrie. D'ou peut-être le peu de temps passé dessus.

Soit tu regarde des docs mais ça va prendre du temps soit je comprends pourquoi on nous demande toujours les codes tout faits. La doc intel386 est toujours d'actualité pour connaître le processeur.
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
19 nov. 2010 à 01:32
TU ECRASES TOUT CE QUI EST APRES chaine DANS TA SAISIE.
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
19 nov. 2010 à 01:36
re,
comme j'ai dit auparavant je fais mon maximum pour apprendre ce langage,mais la pratique a un grand role c'est pour cela que je pose des questions à des specialistes en la matiere que vous etes pour apprendre de mes erreurs et me corriger
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
19 nov. 2010 à 01:42
ça fait 3 ou 4 fois que je te le dis:

déjà, ça serait mieux:
chaine db 0
msg db 10,13,"saisir une phrase : $"
msg2 db 10,13,"la taille de la chaine saisie est : $"
taille dw ?

ça c'est comme d'hab:
chaine db 0
msg db 10,13,"saisir une phrase : $"
msg2 db 10,13,"la taille de la chaine saisie est : $"
chaine db TAILLE_CHAINE dup('$')
taille dw ?

et tu n'as pas a ajouter le caractère final '$' puisque ça en est rempli.
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
19 nov. 2010 à 01:46
re,j'ai declaré la chaine comme étant un tableau comme suit:
chaine db 1024 dup("$")
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
19 nov. 2010 à 02:10
voilà la tronche de la sequence que tu veux sortir:

chaine = "m",?,0,"s que ce passe-t-il ?",13,10,"$"
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
19 nov. 2010 à 02:49
voilà comment j'envisage le travail de macro a fournir après:

tu crée une structure string qui comprend:
1 byte taille_courant = 0;
1 byte taille_max = TAILLE_CHAINE_MAX
1 tableau de byte data[TAILLE_CHAINE_MAX] = que des '$'

ensuite, tu crée les macros:

str_stdin_char pstring
str_add_char pstring, char
str_add_crlf pstring
str_affiche pstring
str_size pstring
str_is_full pstring
...
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
19 nov. 2010 à 14:16
re,
j'ai ajouté au code quelques procedures pour convertir du binaire vers une chaine,mais ça n'affiche pas,pourtant cette procedure je l'ai deja utilisé et elle fonctionne correctement
voici le nouveau code
.model small
.stack 200h
.data
msg db 10,13,"saisir une phrase :  $"
msg1 db 10,13,"la chaine saisie est : $"
msg2 db 10,13,"la taille de la chaine saisie est :             $"
chaine db 1024 dup("$") 
compteur dw 0
fincompteur  LABEL BYTE
.code
start:
mov ax,@data
mov ds, ax
mov ah,9
mov dx,offset msg
int 21h

lea si,chaine
comparaison:
mov ah,1
int 21h 

cmp al,"0"
jz yess 
inc [compteur]
mov [si],al
inc si
jmp comparaison
yess:
mov ah,9
mov dx,offset msg1
int 21h
mov ah,9
lea dx,chaine
int 21h 
xor ax,ax
mov     ax,[Compteur] 
mov     bx,OFFSET fincompteur-1 
mov     cx,5 
call ConvertBinEnChaine
mov bx,offset msg2
call affichage 
mov ah,4ch
int 21h

affichage     PROC
push ax
push dx
mov ah,9
mov dx,bx
int 21h
pop dx
pop ax
ret
affichage     ENDP
ConvertBinEnChaine   PROC
mov     si,10                     
ConvertLoop:
sub     dx,dx                
 div     si                                                  
 add     dl,'0'           
 mov     [bx],dl                   
 dec     bx                       
                                          
loop    ConvertLoop                
ret
ConvertBinEnChaine    ENDP

 end start
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
19 nov. 2010 à 15:14
le petit soucis, c'est qu'il faudrait que je me tape les fonctions D.O.S. afin de savoir comment elles fonctionnent et leur retour vu que les commentaires ne sont pas mis et je n'ai vraiment pas envie tout de suite et le D.O.S. je ne m'en sert plus depuis longtemps...
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
19 nov. 2010 à 18:25
Re,
je comprend.
Bon la 1ere partie du code on l'a deja traite.
La nouvelle partie:
mov bx,offset fincompteur-1 \\pointe sur la fin
mov cx,5 \\ le nombre de digit à traiter
convertBinEnChaine proc
mov si,10 \\le diviseur
convert loop:
sub dx,dx \\ on converti ax à un doubleword
div si\\ on effectue la div
add al,'0' \\ on ajoute un 0 à la chaine converti
mov [ bx],dl\\on stocke la valeur converti
dec bx
loop
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
21 nov. 2010 à 05:15
type word en mémoire:
00: low byte
01: high byte
fincompteur.

*(fincompteur - 1) = high byte.

@++
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
21 nov. 2010 à 05:23
que se passe-t-il si tu entre 1024 caractères ?
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
21 nov. 2010 à 05:31
que fais-tu du caractère final '$' ?

où est la fontion de sortie du nombre ?

tel que c'est, ce qui serait illogique, c'est que cela fonctionne.

@++
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
21 nov. 2010 à 05:35
ce qui définit l'arret de la boucle, ce n'est pas cx, c'est ax=0.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
21 nov. 2010 à 11:46
@patatalo : Une boucle loop s'arrête lorsque (E)CX=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
21 nov. 2010 à 14:57
re,
fincompteur est déclarée comme un LABEL BYTE
chaine est déclarée comme un db 1024 dup("$")
pour afficher le resultat j'ai écrit une procedure printstring
push ax
push dx
mov ah,9
mov dx,offset msg
int 21h
pop dx
pop ax
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
21 nov. 2010 à 16:43
re,
j'ai enfin résolu le probléme!!!!!!!!!
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 déc. 2010 à 03:58
@ ghuysmans99: le problème ce n'est pas le loop et comment il se termine, le problème est qu'il n'a rien a faire là étant donné que c'est ax qui doit nous donner la fin du traitement.

le nombre sera converti entièrement quand ax sera à zero et non quand cx sera à 0. Sinon, on aura des 0 devant le nombre et je ne vois pas trop l'interêt dans le cas présent. De plus, en utilisant ax, tu économises un registre.

@++
0
Rejoignez-nous