Bonjour,

Je suis en train d’écrire un programme assembleur qui (entre autres) détermine le caractère le plus récurrent dans une chaîne de caractères précédemment saisie et qui se termine toujours pas un "#".

Bon, algorithmiquement, je lis la chaîne caractère par caractère et, quand je tombe sur une lettre (comme sa je ne compte pas les séparateurs), je vais sur un tableau "tab" d'entiers initialisés à 0 (je ne sais pas comment le faire ça) et j’incrémente de 1 la case correspondant à la lettre que je suis en train de traiter (j'ai fait en sorte que tab[1] corresponde à "a", tab[2] a "b" et ainsi de suite jusqu’à "z").

Donc voilà, à l’exécution je n'ai rien qui marche donc je m'en remets à vous pour m'aider .

NB : mes connaissances en Assembleur sont très très limitées donc le code vous semblera sûrement long et répétitif mais bon j'ai fait de mon mieux.
Voilà le code :
Code asm : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
 
Title chaine
.model small
.stack 100h
.386
.data
 
msg db 10,13,"donner votre texte  :  $"
nombredesep dw 0
nbre_mot dw 0
longueurchaine dw 0
recurrent dw 0
var dw 0
bi dw 0
max dw 0
varr dw 0
 
 
chaine db 200 dup("$")
tab dw 200 dup("$")
 
.code
main PROC
 
 
separateur2:
mov ax,0
 
cmp  chaine[si],"."
jne herenot1111
mov ax,1
jmp finn
herenot1111:
cmp  chaine[si]," "
jne herenot2222
mov ax,1
jmp finn
herenot2222:
cmp  chaine[si],","
jne herenot3333
mov ax,1
jmp finn
herenot3333:
cmp  chaine[si],":"
jne herenot4444
mov ax,1
jmp finn
herenot4444:
finn:
JMP retourtraittt
 
 
 
caractererecurrent : 
 
mov si,0
mov bx,0             
mov max,0
mov di,0
mov varr,0
 
repeter4: 
inc si                 
JMP test22              
 
 
retour5:
mov di,0
mov ah,chaine[si]
mov di,ax
jmp separateur2
retourtraittt:
cmp ax,1
JE repeter4
sub di,'a'
 
mov ax,tab[di]
add ax,1
mov tab[di],ax            
JMP repeter4
 
suite:
mov ax,varr
add ax,1
mov varr,ax
mov ax,tab[bx]
cmp ax,max
jg maxi
jMP suite
 
 
maxi:
mov di,'a'
mov ax,tab[bx]
mov max,ax
mov ax,di
ADD ax,bx
mov di,ax        
mov ax,di
mov recurrent,ax
mov ax,longueurchaine
SUB ax,nombredesep
mov longueurchaine,ax     
mov ax,varr
cmp ax,26
JG fin33
add bx,1
JMP suite
 
test22:
cmp chaine[si],"#"
JNE retour5
cmp si,1
JG suite
JMP fin33
 
 
fin33:
mov dh,recurrent
mov ah,2
int 21h
 
 
.exit
main ENDP
END main

PS : vous remarquerez l’étiquette de séparateur plus qu'inutile; en fait, je n'ai pas le droit d'utiliser les procédures pour ce sujet-ci.
PS2 : longueurchaine est le nombre de caractères de la chaîne (déterminé précédemment) et nombredesep est le nombre de séparateurs dans la chaîne de caractères (également déterminé précédemment).