Aider moi slv en prog assembleur

Fermé
ramroume88 Messages postés 6 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 25 décembre 2010 - 6 nov. 2010 à 12:42
sujet:saisir une chaine de caractére finie par# et afficher le longeur de la chaine et le nombre des mots et la taille de mots la plus long et le nombre de séparateur et le nombre de répetition de caractére le plus récurrent tous les étape doit étre traiter chacun par une macro
j ai essaye de le faire mais j ai des erreurs(chui débutant) donc slv aider moi
merci
code source

.386
code segment
assume cs:code,ds:data,ss:pile
debut:
saisir_chaine macro chaine
local lire_chaine,fin_chaine
mov si,offset chaine
lire_caractére:
mov ah,1
int 21h
cmp al,'#'
je fin_chaine
mov byte ptr[si],al
inc si
jmp lire_caractére
fin_chaine:
endm
longeur_chaine macro chaine,tch,msg1,entre
local etiquette1,fin_longeur
mov tch,0
mov si,offset chaine
etiquette1:
mov al,byte ptr[si]
cmp al,'#'
je fin_longeur
inc tch
inc si
jmp etiquette1
fin_longeur:
mov dx,offset msg1
affiche_msg
mov ax,tch
affiche_entier
mov dx,offset entre
affiche_msg
endm
affiche_entier macro near
local boucle1,boucle2,termine
mov dx,0bebeh
push dx
mov bx,10
boucle1:
xor dx,dx
div bx
push dx
or ax,ax
jnz boucle1
boucle2:
pop ax
cmp ax,0bebeh
je termine
add al,'0'
xchg al,dl
mov ah,2
int 21h
xchg dl,al
jmp boucle2
termine:
endm
nombre_mots macro near chaine,tch,nbm,msg2,entre
local condition1,condition2,condition3,condition4,condition5,etiquette2,repete1
mov si,offset chaine
mov al,byte ptr[si]
mov ah,byte ptr[si+1]
mov cx,tch
dec cx
mov nbm,0
repete1:
cmp al,' '
je condition1
jmp etiquette2
condition1:
cmp ah,41h
jge condition2
jmp etiquette2
condition2:
cmp ah,5ah
jle condition3
jmp etiquette2
condition3:
cmp ah,61h
jge condition4:
jmp etiquette2
condition4:
cmp ah,7ah
jle condition5
jmp etiquette2
condition5:
inc nbm
etiquette2:
inc al
inc ah
loop repete1
mov dx,offset msg2
affiche_msg
mov ax,nbm
affiche_entier
mov dx,offset entre
affiche_msg
endm
mots_plus_long macro near chaine,tch,l,msg3,entre
local repete12,condition12,condition22,condition32,condition42,condition52,condition62,etiquette3
mov si,offset chaine
mov al,byte ptr[si]
mov ah,byte ptr[si+1]
mov cx,tch
dec cx
mov l,0
mov dx,0
repete12:
cmp al,' '
je condition12
jmp etiquette3
condition12:
cmp ah,41h
jge condition22
jmp etiquette3
condition22:
cmp ah,5ah
jle condition32
jmp etiquette3
condition32:
cmp ah,61h
jge condition42:
jmp etiquette3
condition42:
cmp ah,7ah
jle condition52
jmp etiquette3
condition52:
mov dx,0
etiquette3:
inc al
inc ah
inc dx
cmp dx,l
jg condition62
loop repete12
condition62:
mov l,dx
loop repete12
mov dx,msg3
affiche_msg
mov ax,l
affiche_entier
mov dx,offset enter
affiche_msg
mov dx,offset entre
affiche_msg
endm
nombre_separateur macro near chaine,tch,sep,msg5,entre
local repete13,condition13,incrementation
mov si,offset chaine
mov sep,0
mov cx,tch
repete13:
mov al,byte ptr[si]
cmp al,';'
je condition13
cmp al,' '
je condition13
cmp al,','
je condition13
cmp al,'.'
je condition13
jmp incrementation
condition13:
inc sep
incrementation:
inc si
loop repete13
mov dx,offset msg5
affiche_msg
mov ax,sep
affiche_entier
mov dx,offset entre
affiche_msg
endm
caractére_réccurent macro near chaine,tch,nr,char,msg4,entre
local repete14,repete24,méme,défferent,affecter
mov si,offset chaine
mov nr,0
mov cx,tch
dec cx
mov dx,si
add dx,tch
repete14:
mov bx,0
mov char,byte ptr[si]
mov al,si
inc al
repete24:
cmp byte ptr[al],char
je méme
jmp défferent
méme:
inc bx
défferent:
inc al
cmp al,dx
jg repete24
inc si
cmp dx,nr
jg affecter
loop repete14
affecter:
mov nr,bx
loop repete14
mov dx,offset msg4
affiche_msg
mov ax,nr
affiche_entier
mov dx,offset entre
affiche_msg
endm
affiche_msg macro near
mov ah,09h
int 21h
endm
mov ax,data
mov ds,ax
mov ax,pile
mov ss,ax
saisir_chaine chaine
longeur_chaine chaine,tch,msg1,entre
nombre_mots chaine,tch,nbm,msg2,entre
mots_plus_long chaine,tch,l,msg3,entre
nombre_separateur chaine,tch,sep,msg5,entre
caractére_réccurent chaine,tch,nr,char,msg4,entre
mov ax,4c00h
int 21h
code ends
data segment
chaine db 1024 dub(?)
msg1 dw "la taille de la chaine est:$"
msg2 dw "le nombre de mots est:$"
msg3 dw "la taille de mot la plus long est:$"
msg4 dw "le nombre de repétion de caractére le plus reccurence est:$"
msg5 dw "le nombre de séparateur est:$"
entre dw 10,13,'$'
tch dw ?
nr dw ?
nbm dw ?
l dw ?
sep dw ?
char db ?
data ends
pile segment stack
remplissage db 1024 dup(?)
pile ends
end debut