ramroume88
Messages postés6Date d'inscriptionsamedi 6 novembre 2010StatutMembreDernière intervention25 décembre 2010
-
14 nov. 2010 à 22:56
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
.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:
saisir_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
longeur_chaine endm
affiche_entier macro
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:
affiche_entier endm
nombre_mots macro 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
nombre_mots endm
mots_plus_long macro 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 entre
affiche_msg
mots_plus_long endm
nombre_separateur macro 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
nombre_separateur endm
caractére_réccurent macro chaine,tch,cr,nr,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,cx
repete14:
mov ax,si
mov bl,byte ptr[si]
mov bh,0
inc si
repete24:
cmp byte ptr[si],bl
je méme
jmp défferent
méme:
inc bh
défferent:
inc si
cmp si,dx
jg repete24
inc ax
cmp bh,nr
jg affecter
loop repete14
affecter:
mov nr,bh
mov cr,bl
loop repete14
mov dx,offset msg4
affiche_msg
mov dl,cr
mov ah,2
int 21h
mov dx,offset entre
affiche_msg
caractére_réccurent endm
affiche_msg macro
mov ah,09h
int 21h
affiche_msg 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,cr,nr,msg4,entre
mov ax,4c00h
int 21h
code ends
data segment
chaine dw 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 db ?
nbm dw ?
l dw ?
sep dw ?
cr db ?
data ends
pile segment stack
remplissage dw 1024 dup(?)
pile ends
end debut