begin process at 2010 02 10 00:10:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

divers

 > HISTOGRAMME DE LA FRÉQUENCE DES LETTRES ET DES CHIFFRES RENCONTRÉES PENDANT LA LECTURE D'UN FICHIER QUELCONQUE

HISTOGRAMME DE LA FRÉQUENCE DES LETTRES ET DES CHIFFRES RENCONTRÉES PENDANT LA LECTURE D'UN FICHIER QUELCONQUE


 Information sur la source

Note :
Aucune note
Catégorie :divers Classé sous :graphique, histogramme, fréquence Niveau :Débutant Date de création :19/01/2006 Vu / téléchargé :3 062 / 129

Auteur : nicompx

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cette source affiche un histogramme de la fréquence des lettres et des chiffres rencontrées pendant la lecture d'un fichier quelconque.
En abscisse on trouvera la lettre ou le chiffre, en ordonnée sa fréquence.

Source

  • ;**************************************************************************************;
  • ;* DSSDEMO *;
  • ;**************************************************************************************;
  • ;* Nom : Nicolas Pirard *;
  • ;* Développé le : 08/05/2005 *;
  • ;* Dernière MAJ : 10/05/2005 *;
  • ;**************************************************************************************;
  • ;* *;
  • ;* Ecrire un programme qui affiche un histogramme de la fréquence des lettres et des *;
  • ;* chiffres rencontrées pendant la lecture d'un fichier quelconque. *;
  • ;* En abscisse on trouvera la lettre ou le chiffre, en ordonnée sa fréquence. *;
  • ;* Les miniscules et majuscules ne sont pas différenciées. *;
  • ;**************************************************************************************;
  • ;**************************************************************************************;
  • ;* Assembler : TASM *;
  • ;* TLINK *;
  • ;**************************************************************************************;
  • .MODEL SMALL
  • .STACK 128
  • ;------------------------ Données -----------------------------------------*
  • .DATA
  • ;---Titre + phrase à afficher
  • titre1 db 13,10,13,10,' ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',13,10,'$'
  • titre2 db ' º º ',13,10,'$'
  • titre3 db ' º HISTORIGRAMME DE LA FREQUENCE DES LETTRES ET DES CHIFFRES º ',13,10,'$'
  • titre4 db ' º º ',13,10,'$'
  • titre5 db ' ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ',13,10,13,10,13,10,'$'
  • acqui db 13,10,'Entrer chemin et nom fichier : ','$'
  • CONTENU db 13,10,10,'Contenu du fichier : ',13,10,'$'
  • ;---FICHIER
  • fich db 51
  • fichlu db ?
  • Fichier db 51 dup(0) ;chemin et non du fichier
  • Handle dw ?,'$' ; Handle du Fichier
  • buffer db 60000 dup(?),'$'
  • ;---Histogramme
  • flechehaut db ' ^',13,10,'$'
  • lettreetchiffre db ' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9',13,10,13,10,'$'
  • ligne db ' ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> ',13,10,'$'
  • espace2 db ' $'
  • passligne db 13,10,'$'
  • lignev db '³$'
  • lignev2 db ' ³$'
  • ligneo db '-$'
  • bloc db 'Û $'
  • frequence dw 0d,'$'
  • freq dw 0d,'$'
  • compa db 10d,'$'
  • cmp1 db 0d,'$'
  • grand dw 0d,'$'
  • tempor dw 0d,'$'
  • ;---Converssion décimale de la frequence
  • dix2 dw 10d
  • cent dw 100d
  • mil dw 1000d
  • millier dw ?,'$'
  • centaine dw ?,'$'
  • dixaine dw ?,'$'
  • unite dw ?,'$'
  • ;---Compteur
  • compteura dw 0d,'$'
  • compteura2 db 0d,'$'
  • compteurb dw 0d,'$'
  • compteurb2 db 0d,'$'
  • compteurc dw 0d,'$'
  • compteurc2 db 0d,'$'
  • compteurd dw 0d,'$'
  • compteurd2 db 0d,'$'
  • compteure dw 0d,'$'
  • compteure2 db 0d,'$'
  • compteurf dw 0d,'$'
  • compteurf2 db 0d,'$'
  • compteurg dw 0d,'$'
  • compteurg2 db 0d,'$'
  • compteurh dw 0d,'$'
  • compteurh2 db 0d,'$'
  • compteuri dw 0d,'$'
  • compteuri2 db 0d,'$'
  • compteurj dw 0d,'$'
  • compteurj2 db 0d,'$'
  • compteurk dw 0d,'$'
  • compteurk2 db 0d,'$'
  • compteurl dw 0d,'$'
  • compteurl2 db 0d,'$'
  • compteurm dw 0d,'$'
  • compteurm2 db 0d,'$'
  • compteurn dw 0d,'$'
  • compteurn2 db 0d,'$'
  • compteuro dw 0d,'$'
  • compteuro2 db 0d,'$'
  • compteurp dw 0d,'$'
  • compteurp2 db 0d,'$'
  • compteurq dw 0d,'$'
  • compteurq2 db 0d,'$'
  • compteurr dw 0d,'$'
  • compteurr2 db 0d,'$'
  • compteurs dw 0d,'$'
  • compteurs2 db 0d,'$'
  • compteurt dw 0d,'$'
  • compteurt2 db 0d,'$'
  • compteuru dw 0d,'$'
  • compteuru2 db 0d,'$'
  • compteurv dw 0d,'$'
  • compteurv2 db 0d,'$'
  • compteurw dw 0d,'$'
  • compteurw2 db 0d,'$'
  • compteurx dw 0d,'$'
  • compteurx2 db 0d,'$'
  • compteury dw 0d,'$'
  • compteury2 db 0d,'$'
  • compteurz dw 0d,'$'
  • compteurz2 db 0d,'$'
  • compteur0 dw 0d,'$'
  • compteur02 db 0d,'$'
  • compteur1 dw 0d,'$'
  • compteur12 db 0d,'$'
  • compteur2 dw 0d,'$'
  • compteur22 db 0d,'$'
  • compteur3 dw 0d,'$'
  • compteur32 db 0d,'$'
  • compteur4 dw 0d,'$'
  • compteur42 db 0d,'$'
  • compteur5 dw 0d,'$'
  • compteur52 db 0d,'$'
  • compteur6 dw 0d,'$'
  • compteur62 db 0d,'$'
  • compteur7 dw 0d,'$'
  • compteur72 db 0d,'$'
  • compteur8 dw 0d,'$'
  • compteur82 db 0d,'$'
  • compteur9 dw 0d,'$'
  • compteur92 db 0d,'$'
  • diz db 0d
  • ;---------------------------------------------------------------*
  • ;*-------------------- Programme -------------------------------*
  • ;*--------------------------------------------------------------*
  • .CODE
  • DEBUT:
  • mov AX,@DATA ; début du programme
  • mov DS,AX ; DS contient l'adresse du debut du segment de donnee par rapport au debut de la RAM
  • mov es,ax
  • ;-----Acquisition du chemin d'accès et du nom du fichier----*
  • lea dx,acqui ;Affiche "Entrer le chemin d'accès et nom du fichier :
  • mov ah,09h
  • int 21h
  • mov ah,0Ah
  • lea dx,fich
  • int 21h
  • xor bx,bx ;mise à zéro de BX
  • mov bl,fichlu ;copie le nombre de caractère lu dans BL
  • mov fichier+[bx],0 ;à la fin de la chaine on rajoute le caractère 0
  • ;-------------OUVERTURE DU FICHIER-----------------*
  • xor CX,CX ; Remize à 0 de CX qui est l'attribut du fichier
  • lea DX,Fichier ; Place le chemein d'accès au fichier dans DX
  • mov AH,3Dh ; Fonction d'ouverture du fichier
  • int 21h
  • mov Handle,ax ; Sauvegarde du Handel du Fichier
  • ;-------------- Affiche le fichier --------------*
  • mov bx,Handle
  • mov ah,3Fh
  • mov cx,60000
  • lea dx,buffer
  • int 21h
  • ;lea dx,CONTENU
  • ;mov ah,09h ;Affiche "Contenu du fichier
  • ;int 21h
  • ;lea dx,buffer
  • ;mov ah,09h ;Affiche buffer => le fichier
  • ;int 21h
  • ;------------ Compte le nombre de lettre et de chiffre ------------*
  • ;---- Charge les caractères du buffer ----*
  • CLD ; Direction flag=0 (DI et SI s'incrémente)
  • LEA si,buffer
  • ;--------------- Comparaison ---------------*
  • tet:
  • LODSB
  • jmp rep1
  • lettrea:
  • INC compteura
  • jmp tet
  • rep1:
  • cmp al,'a'
  • je lettrea
  • cmp al,'A'
  • je lettrea
  • cmp al,'à'
  • je lettrea
  • cmp al,'â'
  • je lettrea
  • jmp rep2
  • lettreb:
  • INC compteurb
  • jmp tet
  • rep2:
  • cmp al,'b'
  • je lettreb
  • cmp al,'B'
  • je lettreb
  • jmp rep3
  • lettrec:
  • INC compteurc
  • jmp tet
  • rep3:
  • cmp al,'c'
  • je lettrec
  • cmp al,'C'
  • je lettrec
  • cmp al,'ç'
  • je lettrec
  • jmp rep4
  • lettred:
  • INC compteurd
  • jmp tet
  • rep4:
  • cmp al,'d'
  • je lettred
  • cmp al,'D'
  • je lettred
  • jmp rep5
  • lettree:
  • INC compteure
  • jmp tet
  • rep5:
  • cmp al,'e'
  • je lettree
  • cmp al,'E'
  • je lettree
  • cmp al,'é'
  • je lettree
  • cmp al,'è'
  • je lettree
  • cmp al,'ê'
  • je lettree
  • jmp rep6
  • lettref:
  • INC compteurf
  • jmp tet
  • rep6:
  • cmp al,'f'
  • je lettref
  • cmp al,'F'
  • je lettref
  • jmp rep7
  • lettreg:
  • INC compteurg
  • jmp tet
  • rep7:
  • cmp al,'g'
  • je lettreg
  • cmp al,'G'
  • je lettreg
  • jmp rep8
  • lettreh:
  • INC compteurh
  • jmp tet
  • rep8:
  • cmp al,'h'
  • je lettreh
  • cmp al,'H'
  • je lettreh
  • jmp rep9
  • lettrei:
  • INC compteuri
  • jmp tet
  • rep9:
  • cmp al,'i'
  • je lettrei
  • cmp al,'I'
  • je lettrei
  • cmp al,'î'
  • je lettrei
  • cmp al,'ï'
  • je lettrei
  • jmp rep10
  • lettrej:
  • INC compteurj
  • jmp tet
  • rep10:
  • cmp al,'j'
  • je lettrej
  • cmp al,'J'
  • je lettrej
  • jmp rep11
  • lettrek:
  • INC compteurk
  • jmp tet
  • rep11:
  • cmp al,'k'
  • je lettrek
  • cmp al,'K'
  • je lettrek
  • jmp rep12
  • lettrel:
  • INC compteurl
  • jmp tet
  • rep12:
  • cmp al,'l'
  • je lettrel
  • cmp al,'L'
  • je lettrel
  • jmp rep13
  • lettrem:
  • INC compteurm
  • jmp tet
  • rep13:
  • cmp al,'m'
  • je lettrem
  • cmp al,'M'
  • je lettrem
  • jmp rep14
  • lettren:
  • INC compteurn
  • jmp tet
  • rep14:
  • cmp al,'n'
  • je lettren
  • cmp al,'N'
  • je lettren
  • jmp rep15
  • lettreo:
  • INC compteuro
  • jmp tet
  • rep15:
  • cmp al,'o'
  • je lettreo
  • cmp al,'O'
  • je lettreo
  • cmp al,'ô'
  • je lettreo
  • jmp rep16
  • lettrep:
  • INC compteurp
  • jmp tet
  • rep16:
  • cmp al,'p'
  • je lettrep
  • cmp al,'P'
  • je lettrep
  • jmp rep17
  • lettreq:
  • INC compteurq
  • jmp tet
  • rep17:
  • cmp al,'q'
  • je lettreq
  • cmp al,'Q'
  • je lettreq
  • jmp rep18
  • lettrer:
  • INC compteurr
  • jmp tet
  • rep18:
  • cmp al,'r'
  • je lettrer
  • cmp al,'R'
  • je lettrer
  • jmp rep19
  • lettres:
  • INC compteurs
  • jmp tet
  • rep19:
  • cmp al,'s'
  • je lettres
  • cmp al,'S'
  • je lettres
  • jmp rep20
  • lettret:
  • INC compteurt
  • jmp tet
  • rep20:
  • cmp al,'t'
  • je lettret
  • cmp al,'T'
  • je lettret
  • jmp rep21
  • lettreu:
  • INC compteuru
  • jmp tet
  • rep21:
  • cmp al,'u'
  • je lettreu
  • cmp al,'U'
  • je lettreu
  • cmp al,'û'
  • je lettreu
  • cmp al,'ü'
  • je lettreu
  • jmp rep22
  • lettrev:
  • INC compteurv
  • jmp tet
  • rep22:
  • cmp al,'v'
  • je lettrev
  • cmp al,'V'
  • je lettrev
  • jmp rep23
  • lettrew:
  • INC compteurw
  • jmp tet
  • rep23:
  • cmp al,'w'
  • je lettrew
  • cmp al,'W'
  • je lettrew
  • jmp rep24
  • lettrex:
  • INC compteurx
  • jmp tet
  • rep24:
  • cmp al,'x'
  • je lettrex
  • cmp al,'X'
  • je lettrex
  • jmp rep25
  • lettrey:
  • INC compteury
  • jmp tet
  • rep25:
  • cmp al,'y'
  • je lettrey
  • cmp al,'Y'
  • je lettrey
  • jmp rep26
  • lettrez:
  • INC compteurz
  • jmp tet
  • rep26:
  • cmp al,'z'
  • je lettrez
  • cmp al,'Z'
  • je lettrez
  • jmp rep27
  • chiffre1:
  • INC compteur1
  • jmp tet
  • rep27:
  • cmp al,'1'
  • je chiffre1
  • jmp rep28
  • chiffre2:
  • INC compteur2
  • jmp tet
  • rep28:
  • cmp al,'2'
  • je chiffre2
  • jmp rep29
  • chiffre3:
  • INC compteur3
  • jmp tet
  • rep29:
  • cmp al,'3'
  • je chiffre3
  • jmp rep30
  • chiffre4:
  • INC compteur4
  • jmp tet
  • rep30:
  • cmp al,'4'
  • je chiffre4
  • jmp rep31
  • chiffre5:
  • INC compteur5
  • jmp tet
  • rep31:
  • cmp al,'5'
  • je chiffre5
  • jmp rep32
  • jmp ch6
  • test1:
  • jmp tet
  • ch6:
  • chiffre6:
  • INC compteur6
  • jmp tet
  • rep32:
  • cmp al,'6'
  • je chiffre6
  • jmp rep33
  • chiffre7:
  • INC compteur7
  • jmp tet
  • rep33:
  • cmp al,'7'
  • je chiffre7
  • jmp rep34
  • chiffre8:
  • INC compteur8
  • jmp tet
  • rep34:
  • cmp al,'8'
  • je chiffre8
  • jmp rep35
  • chiffre9:
  • INC compteur9
  • jmp tet
  • rep35:
  • cmp al,'9'
  • je chiffre9
  • jmp rep36
  • chiffre0:
  • INC compteur0
  • jmp tet
  • rep36:
  • cmp al,'0'
  • je chiffre0
  • cmp al,'$'
  • jne test1
  • CALL add30h
  • ;-------------Cherche le plus grand compteur-------*
  • add grand,30h
  • mov ax,compteura
  • call plusgrand
  • mov ax,compteurb
  • call plusgrand
  • mov ax,compteurc
  • call plusgrand
  • mov ax,compteurd
  • call plusgrand
  • mov ax,compteure
  • call plusgrand
  • mov ax,compteurf
  • call plusgrand
  • mov ax,compteurg
  • call plusgrand
  • mov ax,compteurh
  • call plusgrand
  • mov ax,compteuri
  • call plusgrand
  • mov ax,compteurj
  • call plusgrand
  • mov ax,compteurk
  • call plusgrand
  • mov ax,compteurl
  • call plusgrand
  • mov ax,compteurm
  • call plusgrand
  • mov ax,compteurn
  • call plusgrand
  • mov ax,compteuro
  • call plusgrand
  • mov ax,compteurp
  • call plusgrand
  • mov ax,compteurq
  • call plusgrand
  • mov ax,compteurr
  • call plusgrand
  • mov ax,compteurs
  • call plusgrand
  • mov ax,compteurt
  • call plusgrand
  • mov ax,compteuru
  • call plusgrand
  • mov ax,compteurv
  • call plusgrand
  • mov ax,compteurw
  • call plusgrand
  • mov ax,compteurx
  • call plusgrand
  • mov ax,compteury
  • call plusgrand
  • mov ax,compteurz
  • call plusgrand
  • mov ax,compteur0
  • call plusgrand
  • mov ax,compteur1
  • call plusgrand
  • mov ax,compteur2
  • call plusgrand
  • mov ax,compteur3
  • call plusgrand
  • mov ax,compteur4
  • call plusgrand
  • mov ax,compteur5
  • call plusgrand
  • mov ax,compteur6
  • call plusgrand
  • mov ax,compteur7
  • call plusgrand
  • mov ax,compteur8
  • call plusgrand
  • mov ax,compteur9
  • call plusgrand
  • ;--------Calcule de l'échelle-----------------------------*
  • xor ax,ax
  • mov tempor,10d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja petit3
  • jmp s10
  • petit3:
  • mov diz,1d
  • mov frequence,9d
  • mov freq,1d
  • jmp okechelle
  • s10:
  • mov tempor,50d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p50
  • jmp s50
  • p50:
  • mov diz,5d
  • mov frequence,45d
  • mov freq,5d
  • jmp okechelle
  • s50:
  • mov tempor,100d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p100
  • jmp s100
  • p100:
  • mov diz,10d
  • mov frequence,90d
  • mov freq,10d
  • jmp okechelle
  • s100:
  • mov tempor,200d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p200
  • jmp s200
  • p200:
  • mov diz,20d
  • mov frequence,180d
  • mov freq,20d
  • jmp okechelle
  • s200:
  • mov tempor,300d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p300
  • jmp s300
  • p300:
  • mov diz,30d
  • mov frequence,270d
  • mov freq,30d
  • jmp okechelle
  • s300:
  • mov tempor,400d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p400
  • jmp s400
  • p400:
  • mov diz,40d
  • mov frequence,360d
  • mov freq,40d
  • jmp okechelle
  • s400:
  • mov tempor,500d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p500
  • jmp s500
  • p500:
  • mov diz,50d
  • mov frequence,450d
  • mov freq,10d
  • jmp okechelle
  • s500:
  • mov tempor,1000d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p1000
  • jmp s1000
  • p1000:
  • mov diz,100d
  • mov frequence,900d
  • mov freq,100d
  • jmp okechelle
  • s1000:
  • mov tempor,2500d
  • add tempor,30h
  • mov ax,tempor
  • cmp ax,grand
  • ja p2500
  • jmp s2500
  • p2500:
  • mov diz,250d
  • mov frequence,2250d
  • mov freq,250d
  • jmp okechelle
  • s2500:
  • okechelle:
  • CALL sub30h
  • ;-------------Divise les compteurs par le nombre adéquoi (trouvé ds le calcul de l'échelle)------------*
  • ;Pour que l'échelle se remette sur 10
  • mov ax,compteura
  • div diz
  • mov compteura2,al
  • mov ax,compteurb
  • div diz
  • mov compteurb2,al
  • mov ax,compteurc
  • div diz
  • mov compteurc2,al
  • mov ax,compteurd
  • div diz
  • mov compteurd2,al
  • mov ax,compteure
  • div diz
  • mov compteure2,al
  • mov ax,compteurf
  • div diz
  • mov compteurf2,al
  • mov ax,compteurg
  • div diz
  • mov compteurg2,al
  • mov ax,compteurh
  • div diz
  • mov compteurh2,al
  • mov ax,compteuri
  • div diz
  • mov compteuri2,al
  • mov ax,compteurj
  • div diz
  • mov compteurj2,al
  • mov ax,compteurk
  • div diz
  • mov compteurk2,al
  • mov ax,compteurl
  • div diz
  • mov compteurl2,al
  • mov ax,compteurm
  • div diz
  • mov compteurm2,al
  • mov ax,compteurn
  • div diz
  • mov compteurn2,al
  • mov ax,compteuro
  • div diz
  • mov compteuro2,al
  • mov ax,compteurp
  • div diz
  • mov compteurp2,al
  • mov ax,compteurq
  • div diz
  • mov compteurq2,al
  • mov ax,compteurr
  • div diz
  • mov compteurr2,al
  • mov ax,compteurs
  • div diz
  • mov compteurs2,al
  • mov ax,compteurt
  • div diz
  • mov compteurt2,al
  • mov ax,compteuru
  • div diz
  • mov compteuru2,al
  • mov ax,compteurv
  • div diz
  • mov compteurv2,al
  • mov ax,compteurw
  • div diz
  • mov compteurw2,al
  • mov ax,compteurx
  • div diz
  • mov compteurx2,al
  • mov ax,compteury
  • div diz
  • mov compteury2,al
  • mov ax,compteurz
  • div diz
  • mov compteurz2,al
  • mov ax,compteur1
  • div diz
  • mov compteur12,al
  • mov ax,compteur2
  • div diz
  • mov compteur22,al
  • mov ax,compteur3
  • div diz
  • mov compteur32,al
  • mov ax,compteur4
  • div diz
  • mov compteur42,al
  • mov ax,compteur5
  • div diz
  • mov compteur52,al
  • mov ax,compteur6
  • div diz
  • mov compteur62,al
  • mov ax,compteur7
  • div diz
  • mov compteur72,al
  • mov ax,compteur8
  • div diz
  • mov compteur82,al
  • mov ax,compteur9
  • div diz
  • mov compteur92,al
  • CALL add30h2
  • ;------------- Affichage de l'histogramme ---------------*
  • ;---Affiche cadre + titre
  • lea dx,titre1
  • mov ah,09h
  • int 21h
  • lea dx,titre2
  • mov ah,09h
  • int 21h
  • lea dx,titre3
  • mov ah,09h
  • int 21h
  • lea dx,titre4
  • mov ah,09h
  • int 21h
  • lea dx,titre5
  • mov ah,09h
  • int 21h
  • lea dx,flechehaut ; Affiche la flèche vers le haut
  • mov ah,09h
  • int 21h
  • lea dx,lignev2 ; Affiche ligne verticale
  • mov ah,09h
  • int 21h
  • lea dx,passligne ; Passage à la ligne
  • mov ah,09h
  • int 21h
  • add compa,30h
  • add cmp1,30h
  • lignesuivante:
  • call convfreq ;Conversion décimale de la fréquence pour pouvoir l'afficher
  • xor ax,ax
  • mov ax,freq
  • sub frequence,ax
  • dec compa ; DECREMENTE compa pour passé a la ligne suivante
  • lea dx,lignev ; Affiche ligne verticale
  • mov ah,09h
  • int 21h
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • ;---COMPARE LETTRE A---*
  • cmp compteura2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oka ; Si + petit affiche espace
  • jmp noa ; Si + grand affiche bloc
  • oka:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letb
  • noa:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letb:
  • ;---COMPARE LETTRE B---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurb2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okb
  • jmp nob
  • okb:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letc
  • nob:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letc:
  • ;---COMPARE LETTRE C---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurc2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okc
  • jmp noc
  • okc:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letd
  • noc:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letd:
  • ;---COMPARE LETTRE D---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurd2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okd
  • jmp nod
  • okd:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp lete
  • nod:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • lete:
  • ;---COMPARE LETTRE E---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteure2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oke
  • jmp noe
  • oke:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letf
  • noe:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letf:
  • ;---COMPARE LETTRE F---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurf2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okf
  • jmp nof
  • okf:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letg
  • nof:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letg:
  • ;---COMPARE LETTRE G---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurg2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okg
  • jmp nog
  • okg:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp leth
  • nog:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • leth:
  • ;---COMPARE LETTRE H---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurh2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okh
  • jmp noh
  • okh:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp leti
  • noh:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letI:
  • ;---COMPARE LETTRE I---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteuri2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oki
  • jmp noi
  • oki:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letj
  • noi:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letJ:
  • ;---COMPARE LETTRE J---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurj2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okj
  • jmp noj
  • okj:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letk
  • noj:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letk:
  • ;---COMPARE LETTRE K---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurk2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okk
  • jmp nok
  • okk:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letl
  • nok:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letl:
  • ;---COMPARE LETTRE L---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurl2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okl
  • jmp nol
  • okl:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letm
  • nol:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letm:
  • ;---COMPARE LETTRE M---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurm2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okm
  • jmp nom
  • okm:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letn
  • nom:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letn:
  • ;---COMPARE LETTRE N---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurn2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okn
  • jmp non
  • okn:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp leto
  • non:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • leto:
  • ;---COMPARE LETTRE O---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteuro2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oko
  • jmp noo
  • oko:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letp
  • noo:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letp:
  • ;---COMPARE LETTRE P---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurp2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okp
  • jmp nonp
  • okp:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letq
  • nonp:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letq:
  • ;---COMPARE LETTRE Q---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurq2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okq
  • jmp noq
  • okq:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letr
  • noq:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letr:
  • ;---COMPARE LETTRE R---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurr2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okr
  • jmp nor
  • okr:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp lets
  • nor:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • lets:
  • ;---COMPARE LETTRE S---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurs2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oks
  • jmp nos
  • oks:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp lett
  • nos:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • lett:
  • ;---COMPARE LETTRE T---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurt2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okt
  • jmp nont
  • okt:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letu
  • nont:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letu:
  • ;---COMPARE LETTRE U---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteuru2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oku
  • jmp nou
  • oku:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letv
  • nou:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letv:
  • ;---COMPARE LETTRE V---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurv2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okv
  • jmp nov
  • okv:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letw
  • nov:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letw:
  • ;---COMPARE LETTRE W---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurw2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okw
  • jmp now
  • okw:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letx
  • now:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letx:
  • ;---COMPARE LETTRE X---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurx2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okx
  • jmp nox
  • okx:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp lety
  • nox:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • lety:
  • ;---COMPARE LETTRE Y---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteury2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB oky
  • jmp noy
  • oky:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp letz
  • noy:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • letz:
  • ;---COMPARE LETTRE Z---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteurz2,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okz
  • jmp noz
  • okz:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass0
  • noz:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • jmp chifpass0
  • court2:
  • jmp lignesuivante
  • chifpass0:
  • ;---COMPARE CHIFFRE 0---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur02,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre0
  • jmp nochiffre0
  • okchiffre0:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass1
  • nochiffre0:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass1:
  • ;---COMPARE CHIFFRE 1---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur12,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre1
  • jmp nochiffre1
  • okchiffre1:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass2
  • nochiffre1:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass2:
  • ;---COMPARE CHIFFRE 2---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur22,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre2
  • jmp nochiffre2
  • okchiffre2:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass3
  • nochiffre2:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass3:
  • ;---COMPARE CHIFFRE 3---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur32,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre3
  • jmp nochiffre3
  • okchiffre3:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass4
  • nochiffre3:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass4:
  • ;---COMPARE CHIFFRE 4---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur42,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre4
  • jmp nochiffre4
  • okchiffre4:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass5
  • nochiffre4:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass5:
  • ;---COMPARE CHIFFRE 5---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur52,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre5
  • jmp nochiffre5
  • okchiffre5:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass6
  • nochiffre5:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass6:
  • ;---COMPARE CHIFFRE 6---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur62,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre6
  • jmp nochiffre6
  • okchiffre6:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass7
  • nochiffre6:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass7:
  • ;---COMPARE CHIFFRE 7---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur72,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre7
  • jmp nochiffre7
  • okchiffre7:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass8
  • nochiffre7:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass8:
  • ;---COMPARE CHIFFRE 8---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur82,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre8
  • jmp nochiffre8
  • okchiffre8:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp chifpass9
  • nochiffre8:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • chifpass9:
  • ;---COMPARE CHIFFRE 9---*
  • mov ah,compa ; Place compa dans ah pour la comparaison
  • cmp compteur92,ah ; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  • JB okchiffre9
  • jmp nochiffre9
  • okchiffre9:
  • lea dx,espace2
  • mov ah,09h
  • int 21h
  • jmp finboucle
  • nochiffre9:
  • lea dx,bloc
  • mov ah,09h
  • int 21h
  • finboucle:
  • lea dx,passligne ; Passage à la ligne
  • mov ah,09h
  • int 21h
  • inc cmp1
  • cmp cmp1,'9'
  • je FIN
  • jmp court2
  • FIN:
  • lea dx,ligne ; Passage à la ligne
  • mov ah,09h
  • int 21h
  • lea dx,lettreetchiffre
  • mov ah,09h
  • int 21h
  • ;-------------FERMETURE DU FICHIER-----------------*
  • mov bx,Handle
  • mov ah,3Eh
  • int 21h
  • ;------------------------FIN-----------------------------------------*
  • mov ax,4C00h ;Appel de la fonction 4ch pour revenir au DOS
  • int 21h
  • convfreq proc near
  • mov ax,frequence
  • xor dx,dx
  • div mil ;divise le resultat par 1000
  • mov millier,ax
  • mov ax,dx
  • xor dx,dx
  • div cent ;divise le resultat par 100
  • mov centaine,ax
  • mov ax,dx
  • xor dx,dx
  • div dix2 ;divise le resultat par 100
  • mov dixaine,ax
  • mov unite,dx
  • add millier,48d
  • add centaine,48d
  • add dixaine,48d
  • add unite,48d
  • ;Affichage
  • mov dx,millier
  • mov ah,02h ;Affiche caractère
  • int 21h
  • mov dx,centaine
  • mov ah,02h ;Affiche caractère
  • int 21h
  • mov dx,dixaine
  • mov ah,02h ;Affiche caractère
  • int 21h
  • mov dx,unite
  • mov ah,02h ;Affiche caractère
  • int 21h
  • RET
  • convfreq ENDP
  • plusgrand proc near
  • cmp ax,grand
  • JA grand2 ;Si + grand on le place ds grand
  • jmp petit ;Si + petit passe au plus petit
  • grand2:
  • mov grand,ax
  • petit:
  • RET
  • plusgrand ENDP
  • add30h proc near
  • ADD compteura,30h
  • ADD compteurb,30h
  • ADD compteurc,30h
  • ADD compteurd,30h
  • ADD compteure,30h
  • ADD compteurf,30h
  • ADD compteurg,30h
  • ADD compteurh,30h
  • ADD compteuri,30h
  • ADD compteurj,30h
  • ADD compteurk,30h
  • ADD compteurl,30h
  • ADD compteurm,30h
  • ADD compteurn,30h
  • ADD compteuro,30h
  • ADD compteurp,30h
  • ADD compteurq,30h
  • ADD compteurr,30h
  • ADD compteurs,30h
  • ADD compteurt,30h
  • ADD compteuru,30h
  • ADD compteurv,30h
  • ADD compteurw,30h
  • ADD compteurx,30h
  • ADD compteury,30h
  • ADD compteurz,30h
  • ADD compteur0,30h
  • ADD compteur1,30h
  • ADD compteur2,30h
  • ADD compteur3,30h
  • ADD compteur4,30h
  • ADD compteur5,30h
  • ADD compteur6,30h
  • ADD compteur7,30h
  • ADD compteur8,30h
  • ADD compteur9,30h
  • RET
  • add30h ENDP
  • sub30h proc near
  • SUB compteura,30h
  • SUB compteurb,30h
  • SUB compteurc,30h
  • SUB compteurd,30h
  • SUB compteure,30h
  • SUB compteurf,30h
  • SUB compteurg,30h
  • SUB compteurh,30h
  • SUB compteuri,30h
  • SUB compteurj,30h
  • SUB compteurk,30h
  • SUB compteurl,30h
  • SUB compteurm,30h
  • SUB compteurn,30h
  • SUB compteuro,30h
  • SUB compteurp,30h
  • SUB compteurq,30h
  • SUB compteurr,30h
  • SUB compteurs,30h
  • SUB compteurt,30h
  • SUB compteuru,30h
  • SUB compteurv,30h
  • SUB compteurw,30h
  • SUB compteurx,30h
  • SUB compteury,30h
  • SUB compteurz,30h
  • SUB compteur0,30h
  • SUB compteur1,30h
  • SUB compteur2,30h
  • SUB compteur3,30h
  • SUB compteur4,30h
  • SUB compteur5,30h
  • SUB compteur6,30h
  • SUB compteur7,30h
  • SUB compteur8,30h
  • SUB compteur9,30h
  • RET
  • sub30h ENDP
  • add30h2 proc near
  • ADD compteura2,30h
  • ADD compteurb2,30h
  • ADD compteurc2,30h
  • ADD compteurd2,30h
  • ADD compteure2,30h
  • ADD compteurf2,30h
  • ADD compteurg2,30h
  • ADD compteurh2,30h
  • ADD compteuri2,30h
  • ADD compteurj2,30h
  • ADD compteurk2,30h
  • ADD compteurl2,30h
  • ADD compteurm2,30h
  • ADD compteurn2,30h
  • ADD compteuro2,30h
  • ADD compteurp2,30h
  • ADD compteurq2,30h
  • ADD compteurr2,30h
  • ADD compteurs2,30h
  • ADD compteurt2,30h
  • ADD compteuru2,30h
  • ADD compteurv2,30h
  • ADD compteurw2,30h
  • ADD compteurx2,30h
  • ADD compteury2,30h
  • ADD compteurz2,30h
  • ADD compteur02,30h
  • ADD compteur12,30h
  • ADD compteur22,30h
  • ADD compteur32,30h
  • ADD compteur42,30h
  • ADD compteur52,30h
  • ADD compteur62,30h
  • ADD compteur72,30h
  • ADD compteur82,30h
  • ADD compteur92,30h
  • RET
  • add30h2 ENDP
  • END debut
;**************************************************************************************;
;*									DSSDEMO                                           *;
;**************************************************************************************;
;* Nom : Nicolas Pirard																  *;
;* Développé le : 08/05/2005														  *;
;* Dernière MAJ : 10/05/2005     													  *;
;**************************************************************************************;
;* 																		  *;
;* Ecrire un programme qui affiche un histogramme de la fréquence des lettres et des  *; 
;* chiffres rencontrées pendant la lecture d'un fichier quelconque.					  *;
;* En abscisse on trouvera la lettre ou le chiffre, en ordonnée sa fréquence.	      *;
;* Les miniscules et majuscules ne sont pas différenciées.							  *;
;**************************************************************************************;

;**************************************************************************************;
;* Assembler : TASM					                      							  *;
;*             TLINK       				                   							  *;
;**************************************************************************************;                                               
  
  .MODEL SMALL                                                       
  .STACK 128                                                                                                                         


;------------------------ Données -----------------------------------------*

   .DATA
  
  ;---Titre + phrase à afficher
  titre1		db 13,10,13,10,'      ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',13,10,'$'
  titre2		db             '      º								        º ',13,10,'$'
  titre3		db             '      º    HISTORIGRAMME DE LA FREQUENCE DES LETTRES ET DES CHIFFRES    º ',13,10,'$'
  titre4		db             '      º								        º ',13,10,'$'
  titre5		db             '      ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ ',13,10,13,10,13,10,'$'
  acqui         db 13,10,'Entrer chemin et nom fichier : ','$'
  CONTENU	  	db  13,10,10,'Contenu du fichier : ',13,10,'$'
  
  ;---FICHIER
  fich			db 51
  fichlu		db ?
  Fichier		db 51 dup(0)					  ;chemin et non du fichier
  Handle		dw  ?,'$'                         ; Handle du Fichier
  buffer        db  60000 dup(?),'$'

  ;---Histogramme
  flechehaut	db  '    ^',13,10,'$'
  lettreetchiffre db '     A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9',13,10,13,10,'$'
  ligne		    db '    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>  ',13,10,'$'
  espace2		db  '  $'
  passligne		db  13,10,'$'
  lignev		db  '³$'
  lignev2		db  '    ³$'
  ligneo		db  '-$'
  bloc			db  'Û $'
  
  frequence		dw  0d,'$'
  freq			dw  0d,'$'
  
  compa	        db  10d,'$'
  cmp1	        db  0d,'$'
  grand			dw  0d,'$'
  tempor		dw  0d,'$'
  
  ;---Converssion décimale de la frequence
  dix2			dw  10d
  cent          dw  100d
  mil           dw  1000d
  millier     	dw  ?,'$'
  centaine    	dw  ?,'$'
  dixaine    	dw  ?,'$'
  unite      	dw  ?,'$'
  
  ;---Compteur
  compteura     dw  0d,'$'
  compteura2    db  0d,'$'
  compteurb		dw  0d,'$'
  compteurb2	db  0d,'$'
  compteurc		dw  0d,'$'
  compteurc2	db  0d,'$'
  compteurd		dw  0d,'$'
  compteurd2	db  0d,'$'
  compteure		dw  0d,'$'
  compteure2	db  0d,'$'
  compteurf		dw  0d,'$'
  compteurf2	db  0d,'$'
  compteurg		dw  0d,'$'
  compteurg2	db  0d,'$'
  compteurh		dw  0d,'$'
  compteurh2	db  0d,'$'
  compteuri		dw  0d,'$'
  compteuri2	db  0d,'$'
  compteurj		dw  0d,'$'
  compteurj2	db  0d,'$'
  compteurk		dw  0d,'$'
  compteurk2	db  0d,'$'
  compteurl		dw  0d,'$'
  compteurl2	db  0d,'$'
  compteurm		dw  0d,'$'
  compteurm2	db  0d,'$'
  compteurn		dw  0d,'$'
  compteurn2	db  0d,'$'
  compteuro		dw  0d,'$'
  compteuro2	db  0d,'$'
  compteurp		dw  0d,'$'
  compteurp2	db  0d,'$'
  compteurq		dw  0d,'$'
  compteurq2	db  0d,'$'
  compteurr		dw  0d,'$'
  compteurr2	db  0d,'$'
  compteurs		dw  0d,'$'
  compteurs2	db  0d,'$'
  compteurt		dw  0d,'$'
  compteurt2	db  0d,'$'
  compteuru		dw  0d,'$'
  compteuru2	db  0d,'$'
  compteurv		dw  0d,'$'
  compteurv2	db  0d,'$'
  compteurw		dw  0d,'$'
  compteurw2	db  0d,'$'
  compteurx		dw  0d,'$'
  compteurx2	db  0d,'$'
  compteury		dw  0d,'$'
  compteury2	db  0d,'$'
  compteurz		dw  0d,'$'
  compteurz2	db  0d,'$'
  compteur0		dw  0d,'$'
  compteur02	db  0d,'$'
  compteur1		dw  0d,'$'
  compteur12	db  0d,'$'
  compteur2		dw  0d,'$'
  compteur22	db  0d,'$'
  compteur3		dw  0d,'$'
  compteur32	db  0d,'$'
  compteur4		dw  0d,'$'
  compteur42	db  0d,'$'
  compteur5		dw  0d,'$'
  compteur52	db  0d,'$'
  compteur6		dw  0d,'$'
  compteur62	db  0d,'$'
  compteur7		dw  0d,'$'
  compteur72	db  0d,'$'
  compteur8		dw  0d,'$'
  compteur82	db  0d,'$'
  compteur9		dw  0d,'$'
  compteur92	db  0d,'$'
  
  diz			db  0d

  
;---------------------------------------------------------------*
;*-------------------- Programme -------------------------------*
;*--------------------------------------------------------------*   
  
      .CODE         
    
 DEBUT:  
          mov AX,@DATA      ; début du programme
          mov DS,AX         ; DS contient l'adresse du debut du segment de donnee par rapport au debut de la RAM
          mov es,ax


;-----Acquisition du chemin d'accès et du nom du fichier----*
  
  lea dx,acqui              ;Affiche "Entrer le chemin d'accès et nom du fichier : 
  mov ah,09h
  int 21h
    
  mov ah,0Ah		
  lea dx,fich
  int 21h
  
  xor bx,bx					;mise à zéro de BX
  mov bl,fichlu				;copie le nombre de caractère lu dans BL
  mov fichier+[bx],0		;à la fin de la chaine on rajoute le caractère 0

;-------------OUVERTURE DU FICHIER-----------------*

  xor CX,CX	           ; Remize à 0 de CX qui est l'attribut du fichier
  lea DX,Fichier       ; Place le chemein d'accès au fichier dans DX
  mov AH,3Dh	       ; Fonction d'ouverture du fichier
  int 21h
  mov Handle,ax        ; Sauvegarde du Handel du Fichier
  

;-------------- Affiche le fichier --------------*
   
  mov 	bx,Handle    
  mov 	ah,3Fh
  mov   cx,60000
  lea   dx,buffer
  int 	21h

  ;lea dx,CONTENU	
  ;mov ah,09h	    ;Affiche "Contenu du fichier
  ;int 21h
  
  ;lea dx,buffer
  ;mov ah,09h        ;Affiche buffer => le fichier
  ;int 21h
  

 
;------------ Compte le nombre de lettre et de chiffre ------------*
  
   
  ;---- Charge les caractères du buffer ----*
  CLD                        ; Direction flag=0 (DI et SI s'incrémente) 
  LEA si,buffer
  
;--------------- Comparaison ---------------*
tet: 
  LODSB
  
  jmp rep1
  lettrea:  
  INC compteura
  jmp tet
  rep1:
  cmp al,'a'
  je lettrea
  cmp al,'A'
  je lettrea
  cmp al,'à'
  je lettrea
  cmp al,'â'
  je lettrea
  jmp rep2
  lettreb:  
  INC compteurb
  jmp tet
  rep2:
  cmp al,'b'
  je lettreb
  cmp al,'B'
  je lettreb
  jmp rep3
  lettrec:  
  INC compteurc
  jmp tet
  rep3:
  cmp al,'c'
  je lettrec
  cmp al,'C'
  je lettrec
  cmp al,'ç'
  je lettrec
  jmp rep4
  lettred:  
  INC compteurd
  jmp tet
  rep4:
  cmp al,'d'
  je lettred
  cmp al,'D'
  je lettred
  jmp rep5
  lettree:  
  INC compteure
  jmp tet
  rep5:
  cmp al,'e'
  je lettree
  cmp al,'E'
  je lettree
  cmp al,'é'
  je lettree
  cmp al,'è'
  je lettree
  cmp al,'ê'
  je lettree
  jmp rep6
  lettref:  
  INC compteurf
  jmp tet
  rep6:
  cmp al,'f'
  je lettref
  cmp al,'F'
  je lettref
  jmp rep7
  lettreg:  
  INC compteurg
  jmp tet
  rep7:
  cmp al,'g'
  je lettreg
  cmp al,'G'
  je lettreg
  jmp rep8
  lettreh:  
  INC compteurh
  jmp tet
  rep8:
  cmp al,'h'
  je lettreh
  cmp al,'H'
  je lettreh
  jmp rep9
  lettrei:  
  INC compteuri
  jmp tet
  rep9:
  cmp al,'i'
  je lettrei
  cmp al,'I'
  je lettrei
  cmp al,'î'
  je lettrei
  cmp al,'ï'
  je lettrei
  jmp rep10
  lettrej:  
  INC compteurj
  jmp tet
  rep10:
  cmp al,'j'
  je lettrej
  cmp al,'J'
  je lettrej
  jmp rep11
  lettrek:  
  INC compteurk
  jmp tet
  rep11:
  cmp al,'k'
  je lettrek
  cmp al,'K'
  je lettrek
  jmp rep12
  lettrel:  
  INC compteurl
  jmp tet
  rep12:
  cmp al,'l'
  je lettrel
  cmp al,'L'
  je lettrel
  jmp rep13
  lettrem:  
  INC compteurm
  jmp tet
  rep13:
  cmp al,'m'
  je lettrem
  cmp al,'M'
  je lettrem
  jmp rep14 
  lettren:  
  INC compteurn
  jmp tet
  rep14:
  cmp al,'n'
  je lettren
  cmp al,'N'
  je lettren
  jmp rep15
  lettreo:  
  INC compteuro
  jmp tet
  rep15:
  cmp al,'o'
  je lettreo
  cmp al,'O'
  je lettreo
  cmp al,'ô'
  je lettreo
  jmp rep16
  lettrep:  
  INC compteurp
  jmp tet
  rep16:
  cmp al,'p'
  je lettrep
  cmp al,'P'
  je lettrep
  jmp rep17
  lettreq:  
  INC compteurq
  jmp tet
  rep17:
  cmp al,'q'
  je lettreq
  cmp al,'Q'
  je lettreq
  jmp rep18
  lettrer:  
  INC compteurr
  jmp tet
  rep18:
  cmp al,'r'
  je lettrer
  cmp al,'R'
  je lettrer
  jmp rep19
  lettres:  
  INC compteurs
  jmp tet
  rep19:
  cmp al,'s'
  je lettres
  cmp al,'S'
  je lettres
  jmp rep20
  lettret:  
  INC compteurt
  jmp tet
  rep20:
  cmp al,'t'
  je lettret
  cmp al,'T'
  je lettret
  jmp rep21
  lettreu:  
  INC compteuru
  jmp tet
  rep21:
  cmp al,'u'
  je lettreu
  cmp al,'U'
  je lettreu
  cmp al,'û'
  je lettreu
  cmp al,'ü'
  je lettreu
  jmp rep22
  lettrev:  
  INC compteurv
  jmp tet
  rep22:
  cmp al,'v'
  je lettrev
  cmp al,'V'
  je lettrev
  jmp rep23
  lettrew:  
  INC compteurw
  jmp tet
  rep23:
  cmp al,'w'
  je lettrew
  cmp al,'W'
  je lettrew
  jmp rep24
  lettrex:  
  INC compteurx
  jmp tet
  rep24:
  cmp al,'x'
  je lettrex
  cmp al,'X'
  je lettrex
  jmp rep25
  lettrey:  
  INC compteury
  jmp tet
  rep25:
  cmp al,'y'
  je lettrey
  cmp al,'Y'
  je lettrey
  jmp rep26
  lettrez:  
  INC compteurz
  jmp tet
  rep26:
  cmp al,'z'
  je lettrez
  cmp al,'Z'
  je lettrez
  jmp rep27
  chiffre1:  
  INC compteur1
  jmp tet
  rep27:
  cmp al,'1'
  je chiffre1
  jmp rep28
  chiffre2:  
  INC compteur2
  jmp tet
  rep28:
  cmp al,'2'
  je chiffre2
  jmp rep29
  chiffre3:  
  INC compteur3
  jmp tet
  rep29:
  cmp al,'3'
  je chiffre3
  jmp rep30
  chiffre4:  
  INC compteur4
  jmp tet
  rep30:
  cmp al,'4'
  je chiffre4
  jmp rep31
  chiffre5:  
  INC compteur5
  jmp tet
  rep31:
  cmp al,'5'
  je chiffre5
  jmp rep32
  jmp ch6
test1:
jmp tet

ch6:
  chiffre6:  
  INC compteur6
  jmp tet
  rep32:
  cmp al,'6'
  je chiffre6
  jmp rep33
  chiffre7:  
  INC compteur7
  jmp tet
  rep33:
  cmp al,'7'
  je chiffre7
  jmp rep34
  chiffre8:  
  INC compteur8
  jmp tet
  rep34:
  cmp al,'8'
  je chiffre8
  jmp rep35
  chiffre9:  
  INC compteur9
  jmp tet
  rep35:
  cmp al,'9'
  je chiffre9
  jmp rep36
  chiffre0:  
  INC compteur0
  jmp tet
  rep36:
  cmp al,'0'
  je chiffre0
  cmp al,'$'
  jne test1
  
  CALL add30h
  
   ;-------------Cherche le plus grand compteur-------*
  add grand,30h
  
  mov ax,compteura
  call plusgrand
  mov ax,compteurb
  call plusgrand
  mov ax,compteurc
  call plusgrand
  mov ax,compteurd
  call plusgrand
  mov ax,compteure
  call plusgrand
  mov ax,compteurf
  call plusgrand
  mov ax,compteurg
  call plusgrand
  mov ax,compteurh
  call plusgrand
  mov ax,compteuri
  call plusgrand
  mov ax,compteurj
  call plusgrand
  mov ax,compteurk
  call plusgrand
  mov ax,compteurl
  call plusgrand
  mov ax,compteurm
  call plusgrand
  mov ax,compteurn
  call plusgrand
  mov ax,compteuro
  call plusgrand
  mov ax,compteurp
  call plusgrand
  mov ax,compteurq
  call plusgrand
  mov ax,compteurr
  call plusgrand
  mov ax,compteurs
  call plusgrand
  mov ax,compteurt
  call plusgrand
  mov ax,compteuru
  call plusgrand
  mov ax,compteurv
  call plusgrand
  mov ax,compteurw
  call plusgrand
  mov ax,compteurx
  call plusgrand
  mov ax,compteury
  call plusgrand
  mov ax,compteurz
  call plusgrand
  mov ax,compteur0
  call plusgrand
  mov ax,compteur1
  call plusgrand
  mov ax,compteur2
  call plusgrand
  mov ax,compteur3
  call plusgrand
  mov ax,compteur4
  call plusgrand
  mov ax,compteur5
  call plusgrand
  mov ax,compteur6
  call plusgrand
  mov ax,compteur7
  call plusgrand
  mov ax,compteur8
  call plusgrand
  mov ax,compteur9
  call plusgrand
  
 
  ;--------Calcule de l'échelle-----------------------------*
  xor ax,ax
  mov tempor,10d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja petit3
  jmp s10
  petit3:
  mov diz,1d
  mov frequence,9d
  mov freq,1d
  jmp okechelle
  s10:
   
  mov tempor,50d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p50
  jmp s50
  p50:
  mov diz,5d
  mov frequence,45d
  mov freq,5d
  jmp okechelle 
  s50:

  mov tempor,100d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p100
  jmp s100
  p100:
  mov diz,10d
  mov frequence,90d
  mov freq,10d
  jmp okechelle 
  s100:
  
  mov tempor,200d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p200
  jmp s200
  p200:
  mov diz,20d
  mov frequence,180d
  mov freq,20d
  jmp okechelle 
  s200:
  
  mov tempor,300d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p300
  jmp s300
  p300:
  mov diz,30d
  mov frequence,270d
  mov freq,30d
  jmp okechelle 
  s300:
  
  mov tempor,400d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p400
  jmp s400
  p400:
  mov diz,40d
  mov frequence,360d
  mov freq,40d
  jmp okechelle 
  s400:
  
  mov tempor,500d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p500
  jmp s500
  p500:
  mov diz,50d
  mov frequence,450d
  mov freq,10d
  jmp okechelle 
  s500:
  
  mov tempor,1000d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p1000
  jmp s1000
  p1000:
  mov diz,100d
  mov frequence,900d
  mov freq,100d
  jmp okechelle 
  s1000:
  
  mov tempor,2500d
  add tempor,30h
  mov ax,tempor
  cmp ax,grand
  ja p2500
  jmp s2500
  p2500:
  mov diz,250d
  mov frequence,2250d
  mov freq,250d
  jmp okechelle 
  s2500:
  
  
  
  okechelle:
  
  CALL sub30h
  
 ;-------------Divise les compteurs par le nombre adéquoi (trouvé ds le calcul de l'échelle)------------*
 ;Pour que l'échelle se remette sur 10
   
  mov ax,compteura
  div diz
  mov compteura2,al
  
  mov ax,compteurb
  div diz
  mov compteurb2,al
  
  mov ax,compteurc
  div diz
  mov compteurc2,al
  
  mov ax,compteurd
  div diz
  mov compteurd2,al
  
  mov ax,compteure
  div diz
  mov compteure2,al
  
  mov ax,compteurf
  div diz
  mov compteurf2,al
  
  mov ax,compteurg
  div diz
  mov compteurg2,al
  
  mov ax,compteurh
  div diz
  mov compteurh2,al
  
  mov ax,compteuri
  div diz
  mov compteuri2,al
  
  mov ax,compteurj
  div diz
  mov compteurj2,al
  
  mov ax,compteurk
  div diz
  mov compteurk2,al
  
  mov ax,compteurl
  div diz
  mov compteurl2,al
  
  mov ax,compteurm
  div diz
  mov compteurm2,al
  
  mov ax,compteurn
  div diz
  mov compteurn2,al
  
  mov ax,compteuro
  div diz
  mov compteuro2,al
  
  mov ax,compteurp
  div diz
  mov compteurp2,al
  
  mov ax,compteurq
  div diz
  mov compteurq2,al
  
  mov ax,compteurr
  div diz
  mov compteurr2,al
  
  mov ax,compteurs
  div diz
  mov compteurs2,al
  
  mov ax,compteurt
  div diz
  mov compteurt2,al
  
  mov ax,compteuru
  div diz
  mov compteuru2,al
  
  mov ax,compteurv
  div diz
  mov compteurv2,al
  
  mov ax,compteurw
  div diz
  mov compteurw2,al
  
  mov ax,compteurx
  div diz
  mov compteurx2,al
  
  mov ax,compteury
  div diz
  mov compteury2,al
  
  mov ax,compteurz
  div diz
  mov compteurz2,al
  
  mov ax,compteur1
  div diz
  mov compteur12,al
  
  mov ax,compteur2
  div diz
  mov compteur22,al
  
  mov ax,compteur3
  div diz
  mov compteur32,al
  
  mov ax,compteur4
  div diz
  mov compteur42,al
  
  mov ax,compteur5
  div diz
  mov compteur52,al
  
  mov ax,compteur6
  div diz
  mov compteur62,al
  
  mov ax,compteur7
  div diz
  mov compteur72,al
  
  mov ax,compteur8
  div diz
  mov compteur82,al
  
  mov ax,compteur9
  div diz
  mov compteur92,al
 
  CALL add30h2
  
  ;------------- Affichage de l'histogramme ---------------*
    
  ;---Affiche cadre + titre
  lea dx,titre1
  mov ah,09h
  int 21h
  
  lea dx,titre2
  mov ah,09h
  int 21h
  
  lea dx,titre3
  mov ah,09h
  int 21h
  
  lea dx,titre4
  mov ah,09h
  int 21h
  
  lea dx,titre5
  mov ah,09h
  int 21h
  
  lea dx,flechehaut		; Affiche la flèche vers le haut
  mov ah,09h
  int 21h
  
  
  lea dx,lignev2		; Affiche ligne verticale
  mov ah,09h
  int 21h
  
  lea dx,passligne		; Passage à la ligne
  mov ah,09h
  int 21h
  
    
  add compa,30h
  add cmp1,30h
   
  
lignesuivante:
 
  call convfreq         ;Conversion décimale de la fréquence pour pouvoir l'afficher
  
  xor ax,ax
  mov ax,freq
  sub frequence,ax
  
  dec compa				; DECREMENTE compa pour passé a la ligne suivante

  lea dx,lignev			; Affiche ligne verticale
  mov ah,09h
  int 21h
  
  mov ah,compa			; Place compa dans ah pour la comparaison
  
  
  ;---COMPARE LETTRE A---*
  cmp compteura2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oka                ; Si + petit affiche espace
  jmp noa				; Si + grand affiche bloc
  
  oka:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letb
  
  noa:
  lea dx,bloc
  mov ah,09h
  int 21h
  
letb:
 ;---COMPARE LETTRE B---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurb2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okb
  jmp nob
  
  okb:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letc
  
  nob:
  lea dx,bloc
  mov ah,09h
  int 21h
  
letc:
  
  ;---COMPARE LETTRE C---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurc2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okc
  jmp noc
  
  okc:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letd
  
  noc:
  lea dx,bloc
  mov ah,09h
  int 21h
  
letd:
  
  ;---COMPARE LETTRE D---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurd2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okd
  jmp nod
  
  okd:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp lete
  
  nod:
  lea dx,bloc
  mov ah,09h
  int 21h
  
lete:
  
  ;---COMPARE LETTRE E---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteure2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oke
  jmp noe
  
  oke:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letf
  
  noe:
  lea dx,bloc
  mov ah,09h
  int 21h

letf:
  
  ;---COMPARE LETTRE F---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurf2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okf
  jmp nof
  
  okf:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letg
  
  nof:
  lea dx,bloc
  mov ah,09h
  int 21h
  
letg:
  
  ;---COMPARE LETTRE G---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurg2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okg
  jmp nog
  
  okg:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp leth
  
  nog:
  lea dx,bloc
  mov ah,09h
  int 21h
  
leth:

;---COMPARE LETTRE H---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurh2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okh
  jmp noh
  
  okh:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp leti
  
  noh:
  lea dx,bloc
  mov ah,09h
  int 21h

letI:
  
;---COMPARE LETTRE I---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteuri2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oki
  jmp noi
  
  oki:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letj
  
  noi:
  lea dx,bloc
  mov ah,09h
  int 21h
 
letJ:
  
;---COMPARE LETTRE J---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurj2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okj
  jmp noj
  
  okj:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letk
  
  noj:
  lea dx,bloc
  mov ah,09h
  int 21h

letk:
  
;---COMPARE LETTRE K---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurk2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okk
  jmp nok
  
  okk:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letl
  
  nok:
  lea dx,bloc
  mov ah,09h
  int 21h

letl:
  
;---COMPARE LETTRE L---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurl2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okl
  jmp nol
  
  okl:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letm
  
  nol:
  lea dx,bloc
  mov ah,09h
  int 21h
 
letm:
  
;---COMPARE LETTRE M---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurm2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okm
  jmp nom
  
  okm:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letn
  
  nom:
  lea dx,bloc
  mov ah,09h
  int 21h

letn:
  
;---COMPARE LETTRE N---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurn2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okn
  jmp non
  
  okn:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp leto
  
  non:
  lea dx,bloc
  mov ah,09h
  int 21h
 
leto:
  
;---COMPARE LETTRE O---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteuro2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oko
  jmp noo
  
  oko:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letp
  
  noo:
  lea dx,bloc
  mov ah,09h
  int 21h

letp:
 
;---COMPARE LETTRE P---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurp2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okp
  jmp nonp
  
  okp:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letq
  
  nonp:
  lea dx,bloc
  mov ah,09h
  int 21h

letq:
  
;---COMPARE LETTRE Q---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurq2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okq
  jmp noq
  
  okq:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letr
  
  noq:
  lea dx,bloc
  mov ah,09h
  int 21h

letr:
  
;---COMPARE LETTRE R---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurr2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okr
  jmp nor
  
  okr:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp lets
  
  nor:
  lea dx,bloc
  mov ah,09h
  int 21h

lets:
  
;---COMPARE LETTRE S---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurs2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oks
  jmp nos
  
  oks:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp lett
  
  nos:
  lea dx,bloc
  mov ah,09h
  int 21h

lett:
  
;---COMPARE LETTRE T---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurt2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okt
  jmp nont
  
  okt:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letu
  
  nont:
  lea dx,bloc
  mov ah,09h
  int 21h

letu:
  
;---COMPARE LETTRE U---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteuru2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oku
  jmp nou
  
  oku:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letv
  
  nou:
  lea dx,bloc
  mov ah,09h
  int 21h

letv:
  
;---COMPARE LETTRE V---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurv2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okv
  jmp nov
  
  okv:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letw
  
  nov:
  lea dx,bloc
  mov ah,09h
  int 21h
  
letw:
  
;---COMPARE LETTRE W---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurw2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okw
  jmp now
  
  okw:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letx
  
  now:
  lea dx,bloc
  mov ah,09h
  int 21h

letx:
  
;---COMPARE LETTRE X---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurx2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okx
  jmp nox
  
  okx:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp lety
  
  nox:
  lea dx,bloc
  mov ah,09h
  int 21h
 
lety:
 
;---COMPARE LETTRE Y---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteury2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB oky
  jmp noy
  
  oky:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp letz
  
  noy:
  lea dx,bloc
  mov ah,09h
  int 21h
  
letz:

;---COMPARE LETTRE Z---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteurz2,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okz
  jmp noz
  
  okz:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass0
  
  noz:
  lea dx,bloc
  mov ah,09h
  int 21h

jmp chifpass0
court2:
jmp lignesuivante
  
chifpass0:

;---COMPARE CHIFFRE 0---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur02,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre0
  jmp nochiffre0
  
  okchiffre0:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass1
  
  nochiffre0:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass1:

;---COMPARE CHIFFRE 1---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur12,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre1
  jmp nochiffre1
  
  okchiffre1:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass2
  
  nochiffre1:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass2:

;---COMPARE CHIFFRE 2---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur22,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre2
  jmp nochiffre2
  
  okchiffre2:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass3
  
  nochiffre2:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass3:

;---COMPARE CHIFFRE 3---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur32,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre3
  jmp nochiffre3
  
  okchiffre3:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass4
  
  nochiffre3:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass4:

;---COMPARE CHIFFRE 4---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur42,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre4
  jmp nochiffre4
  
  okchiffre4:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass5
  
  nochiffre4:
  lea dx,bloc
  mov ah,09h
  int 21h
  
 chifpass5:

;---COMPARE CHIFFRE 5---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur52,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre5
  jmp nochiffre5
  
  okchiffre5:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass6
  
  nochiffre5:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass6:

;---COMPARE CHIFFRE 6---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur62,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre6
  jmp nochiffre6
  
  okchiffre6:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass7
  
  nochiffre6:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass7:

;---COMPARE CHIFFRE 7---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur72,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre7
  jmp nochiffre7
  
  okchiffre7:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass8
  
  nochiffre7:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass8:

;---COMPARE CHIFFRE 8---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur82,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre8
  jmp nochiffre8
  
  okchiffre8:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp chifpass9
  
  nochiffre8:
  lea dx,bloc
  mov ah,09h
  int 21h
  
chifpass9:

;---COMPARE CHIFFRE 9---*
  mov ah,compa			; Place compa dans ah pour la comparaison
  cmp compteur92,ah		; Comparaison : si compteur est plus grand ou égale au n° de ligne il affiche un bloc sinon espace
  JB okchiffre9
  jmp nochiffre9
  
  okchiffre9:
  lea dx,espace2
  mov ah,09h
  int 21h
  jmp finboucle
    
  nochiffre9:
  lea dx,bloc
  mov ah,09h
  int 21h
  
  finboucle:
  lea dx,passligne		; Passage à la ligne
  mov ah,09h
  int 21h
  
  inc cmp1
  cmp cmp1,'9'
  je FIN
  
  jmp court2

FIN:
  
  lea dx,ligne		; Passage à la ligne
  mov ah,09h
  int 21h
  
  lea dx,lettreetchiffre
  mov ah,09h
  int 21h
  
  
;-------------FERMETURE DU FICHIER-----------------*
   
  mov 	bx,Handle    
  mov 	ah,3Eh
  int 	21h
  

;------------------------FIN-----------------------------------------*

  mov ax,4C00h       ;Appel de la fonction 4ch pour revenir au DOS
  int 21h          
  
  
  convfreq proc near
  
  mov ax,frequence
  
  xor dx,dx
  div mil		       ;divise le resultat par 1000
  mov millier,ax
  
  mov ax,dx
  
  xor dx,dx
  div cent		       ;divise le resultat par 100
  mov centaine,ax
  
  mov ax,dx
  
  xor dx,dx
  div dix2	       ;divise le resultat par 100
  mov dixaine,ax
  
  mov unite,dx
  
  add millier,48d
  add centaine,48d
  add dixaine,48d
  add unite,48d
  
  ;Affichage
  mov dx,millier
  mov ah,02h        ;Affiche caractère
  int 21h

  mov dx,centaine      
  mov ah,02h        ;Affiche caractère
  int 21h
  
  mov dx,dixaine
  mov ah,02h        ;Affiche caractère
  int 21h

  mov dx,unite       
  mov ah,02h        ;Affiche caractère
  int 21h
  
  RET
  convfreq ENDP
  
  
  
  plusgrand   proc near
  cmp ax,grand
  JA grand2       ;Si + grand on le place ds grand
  jmp petit	      ;Si + petit passe au plus petit
  grand2:
  mov grand,ax
  petit:
  RET
  plusgrand ENDP
  
  
  add30h proc near
  
  ADD compteura,30h
  ADD compteurb,30h
  ADD compteurc,30h
  ADD compteurd,30h
  ADD compteure,30h
  ADD compteurf,30h
  ADD compteurg,30h
  ADD compteurh,30h
  ADD compteuri,30h
  ADD compteurj,30h
  ADD compteurk,30h
  ADD compteurl,30h
  ADD compteurm,30h
  ADD compteurn,30h
  ADD compteuro,30h
  ADD compteurp,30h
  ADD compteurq,30h
  ADD compteurr,30h
  ADD compteurs,30h
  ADD compteurt,30h
  ADD compteuru,30h
  ADD compteurv,30h
  ADD compteurw,30h
  ADD compteurx,30h
  ADD compteury,30h
  ADD compteurz,30h
  ADD compteur0,30h
  ADD compteur1,30h
  ADD compteur2,30h
  ADD compteur3,30h
  ADD compteur4,30h
  ADD compteur5,30h
  ADD compteur6,30h
  ADD compteur7,30h
  ADD compteur8,30h
  ADD compteur9,30h
  RET
  add30h ENDP      
  
  
  sub30h proc near
  
  SUB compteura,30h
  SUB compteurb,30h
  SUB compteurc,30h
  SUB compteurd,30h
  SUB compteure,30h
  SUB compteurf,30h
  SUB compteurg,30h
  SUB compteurh,30h
  SUB compteuri,30h
  SUB compteurj,30h
  SUB compteurk,30h
  SUB compteurl,30h
  SUB compteurm,30h
  SUB compteurn,30h
  SUB compteuro,30h
  SUB compteurp,30h
  SUB compteurq,30h
  SUB compteurr,30h
  SUB compteurs,30h
  SUB compteurt,30h
  SUB compteuru,30h
  SUB compteurv,30h
  SUB compteurw,30h
  SUB compteurx,30h
  SUB compteury,30h
  SUB compteurz,30h
  SUB compteur0,30h
  SUB compteur1,30h
  SUB compteur2,30h
  SUB compteur3,30h
  SUB compteur4,30h
  SUB compteur5,30h
  SUB compteur6,30h
  SUB compteur7,30h
  SUB compteur8,30h
  SUB compteur9,30h
  
  RET
  sub30h ENDP    
  
  
    add30h2 proc near
  
  ADD compteura2,30h
  ADD compteurb2,30h
  ADD compteurc2,30h
  ADD compteurd2,30h
  ADD compteure2,30h
  ADD compteurf2,30h
  ADD compteurg2,30h
  ADD compteurh2,30h
  ADD compteuri2,30h
  ADD compteurj2,30h
  ADD compteurk2,30h
  ADD compteurl2,30h
  ADD compteurm2,30h
  ADD compteurn2,30h
  ADD compteuro2,30h
  ADD compteurp2,30h
  ADD compteurq2,30h
  ADD compteurr2,30h
  ADD compteurs2,30h
  ADD compteurt2,30h
  ADD compteuru2,30h
  ADD compteurv2,30h
  ADD compteurw2,30h
  ADD compteurx2,30h
  ADD compteury2,30h
  ADD compteurz2,30h
  ADD compteur02,30h
  ADD compteur12,30h
  ADD compteur22,30h
  ADD compteur32,30h
  ADD compteur42,30h
  ADD compteur52,30h
  ADD compteur62,30h
  ADD compteur72,30h
  ADD compteur82,30h
  ADD compteur92,30h
  RET
  add30h2 ENDP
  
  
  
  END debut


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec une capture DESSIN DE RECTANGLES (POSITION, TAILLE, COULEUR, ÉPAISSEUR) par macsou01
RECHERCHE DES PALINDROMES D'UN TEXTE SAISI. par PCBill
Source avec Zip LIBRAIRIE GRAPHIQUE (ET PLUS) EN MODE RÉEL par epineurien
Source avec Zip Source avec une capture LIB PROGRESSBAR (PERSONNALISABLE , DÉGRADÉ DE COULEUR,POURCE... par knetus
Source avec Zip Source avec une capture AFFICHE COULEUR par knetus

 Sources en rapport avec celle ci

Source avec une capture DESSIN DE RECTANGLES (POSITION, TAILLE, COULEUR, ÉPAISSEUR) par macsou01
Source avec Zip Source avec une capture PROGRAMME DE VISUALISATION ET D'ANALYSE SPECTRALE DE FICHIER... par Nasman
Source avec Zip CRÉATION DE GRAPHIQUES AVEC LES API WINDOWS par Nasman
Source avec Zip HORLOGE ET DATE NUMERIQUE MODE GRAPHIQUE par rythm_of_hell

Commentaires et avis

Commentaire de Vermifuge le 23/01/2006 11:01:20

Oula, t'as pas plus court ? Parce que là c'est très répétitif pour pas grand chose... :/

Commentaire de patatalo le 04/03/2006 12:54:57 administrateur CS

salut,

c'est vrai que un truc du style:

si = file position
compteurs dw 256 dup(0)

tantque !eof
movzx bx,byte ptr[filebuffer+si]
add bx,bx
inc word ptr [compteurs+bx]
inc si

ensuite, pour ne pas differencier 'a' et 'A' il suffit d'ajouter les 2 compteurs. ( [compteurs+('a'*2)] + [compteurs+('A'*2)] )

c'est pas parce que c'est de l'assembleur qu'il faut negliger l'algorithme, bien au contraire, dans l'etat actuel, c'est le genre de code tu aurais pu garder pour toi car c'est un mauvais exemple, ou plutot un bon exemple de ce qu'il ne faut pas faire.

@++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comment se servir du copross graphique!?!? [ par prunkdump ] Voilà, je voudrais savoir si quelq'un sait se servir du coprocesseur graphique ou aurait des liens sur ce sujet, car c'est complètement defferent de Fréquence clavier !!! [ par eldered ] Bonjour a tous !Je code actuellement en java un bomberMan et j'ai quelques soucis de fluidité dans mon scrolling de la carte. Certes, si je scroll pix interface graphique? [ par rominou ] Debutant, j'ignore comment et avec quels outils developper une interface graphique pour du C et C++.Pourriez vous m'indiquer une solution pour apprend tempo avec un 15F [ par tshib ] Slt à tous ne bref je débute en assembleur et je voudrai avoir la résolution de l'exercice suivant: j'ai un codes qui foire et je voudrai avoir le ver programmation graphique en mode 12h [ par masta_jigga ] J'aimerai poser surement une bete question. Comment puis-je faire pour travailler dans le mode 12h (640x480 en 16 couleurs)en accedant directemen help schema de carte graphique [ par busman ] salut a tous j ai recup une " saphirre radeon x1900 xtx 512m dual - dvi/vivo"SKU#21082-00PN 102-A 52021-52-ATje recherche desesperement le chema elect Impression d'une fenêtre [ par Nasman ] Bonjour,Je suis à la recherche des méthodes à employer pour permettre d'imprimer une fenêtre graphique sur une imprimante sélectionnée. Je n'ai pas de bug graphique [ par raoulli ] salut.c'est encore moi.je suis collant hein !Cette fois ci c'est donc pour un bug graphique.Voila, je ne vois pas dutout la maniere de debuguer ce pro


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,406 sec (4)

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