voici mes info système puisqu'elle sont demandées :
------------------
System Information
------------------
Time of this report: 11/29/2006, 14:49:38
Machine name: PC203-01
Operating System: Windows XP Professional (5.1, Build 2600) Service Pack 2 (2600.xpsp_sp2_gdr.050301-1519)
Language: French (Regional Setting: French)
System Manufacturer: AWARD_
System Model: AWRDACPI
BIOS: Phoenix - AwardBIOS v6.00PG
Processor: Intel(R) Pentium(R) 4 CPU 3.00GHz (2 CPUs)
Memory: 480MB RAM
Page File: 292MB used, 830MB available
Windows Dir: C:\WINDOWS
DirectX Version: DirectX 9.0c (4.09.0000.0904)
DX Setup Parameters: Not found
DxDiag Version: 5.03.2600.2180 32bit Unicode
Bon, je pose une grosse question pour mon premier post !
Je dois programmer le code vérificateur de hamming (avec TASM).
il faut créer des exécutables (.exe et non .com) : l'un va prendre une phrase au clavier et exécuter hamming et l'autre va la vérifier avec le code de parité transmis.
Il y a des erreurs, je sais, mais voici ce que j'ai pu trouver (avec l'aide de quelques potes qui sont aussi bloqués que moi) :
Code : 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
.386
donnees segment para public use16
	SFichier STRUC
		nom		db		64 dup(0)
		handle	dw		?
	SFichier	ENDS
 
	f_in	SFichier <'in.txt',?>
	buffer db 31 dup(?)
	taille dw ?
 
	msg_Erreur1 db 'Erreur ouverture in.txt','$'
	msg_Erreur2 db 'Erreur lecture in.txt','$'
	msg_Erreur3 db 'Erreur fermeture fichier','$'
 
	chaine	db ?
	hemming	db ?				;bits de controle de hemming
	indice	db ?
 
	port_com  equ  0        ;numéro port com 1
 
	param_connexion equ 11100011b     ;paramètres de la connexion
 
donnees ends
 
code 	segment para public use16
     	assume cs:code,ds:donnees
 
debut:
	mov	ax,donnees
	mov	ds,ax
 
	call	Init_connexion
	call	Ouvrir_fichier
	call	Lire_donnees
tant_que:
	cmp	taille,0
	je		fin_tant
	call	Test_taille_buffer   ;si taille buffer<30 -> rempli le reste avec des 
0
	call	Calculer_Hemming
	call	Send_donnees
	call	pause
	call	Lire_donnees
	jmp	tant_que
fin_tant:
	call  	Envoi_eof
	call	Fermer_fichier
 
Fin:
	mov	ax,4C00h
	int 	21h						;quitte
 
;----------------------------------------------------
Calculer_Hemming:
;	ah=données (8bit)
;	al=1 bit de donnée
;	bl=indice	(indice pour hemming)
;	dl=compteur pour1
;	dh=compteur pour2
;	utilise cl pour les shr
 
	;initialisation des variables
	mov	byte ptr hemming,0
	mov	bl,2		;indice pour hemming
	mov	dl,0		;compteur1
	mov	si,0		;si est utilisé pour se déplacer dans le buffer
CH_pour1:
	cmp	dl,30			;30 octets = 30*8 bits
	jge	CH_fpour1
	mov	ah,byte ptr buffer[si]
	inc	si
 
	mov	dh,0			;compteur2
	CH_pour2:
		cmp	dh,8
		jge	CH_fpour2
 
		;calcul indice
		inc	bl
		;si indice=puissance de 2 -> indice++
		mov	indice,bl
		call	test_indice_puissance_de_2
		jnz	CH_continue
		inc	bl
		CH_continue:
 
		;prendre un bit de ah et le placer dans al
		mov	al,ah
		mov	cl,7
		sub	cl,dh		;cl=nombre de shr à effectuer
		shr	al,cl
		and	al,1		;masque pour ne garder que le dernier bit
		call 	Modifier_bits_hemming
 
		inc	dh
		jmp	CH_pour2
	CH_fpour2:
	inc	dl
	jmp	CH_pour1
CH_fpour1:
	ret
 
;----------------------------------------------------
 
test_indice_puissance_de_2:
;compte le nombre de 1 de indice
;méthode: on calcule dans bl le nombre de 1 qu'il y a dans indice
;         si bl=1 -> indice est une puissance de 2
;			 puis on soustrait 1 de bl
;résultat: zf=1 si indice est une puissance de 2
 
	push	ax
	push	bx				;sauvegarde ax et bx sur la pile
 
	mov	bh,0			;compteur
	mov	bl,0			;resultat
	mov	al,indice
TI_boucle:
	mov	ah,1
	and	ah,al
	add	bl,ah
	shr	al,1
	inc	bh
	cmp	bh,8
	jne	TI_boucle
 
	dec	bl				;place le zf
	pop	bx
	pop	ax				;récupère ax et bx
	ret
 
;----------------------------------------------------
 
Modifier_bits_hemming:
	cmp	al,1
	jne 	MBH_fin
	xor	hemming,bl		;hemming+=indice
MBH_fin:
	ret
 
;----------------------------------------------------
Test_taille_buffer:
;si taille<30 -> rempli le reste du buffer avec des 0
	cmp	taille,30
	je	TTB_fin
 
	mov	si,taille
	mov	cx,30
	sub	cx,taille	;cx=nbre de passage dans la boucle
TTB_boucle:
	mov	byte ptr buffer[si],00h
	inc	si
	loop	TTB_boucle
 
TTB_fin:
	ret
 
;----------------------------------------------------
Init_connexion:
	mov	ah,00
	mov	al,param_connexion
	mov	dx,port_com
	int	14h
	ret
 
;----------------------------------------------------
 
;envoi 31 octet (30 octet de données + 1 octet de controle)
;via le port com
Send_donnees:
	mov	cx,1		;compteur
	mov	si,0		;indice dans le buffer
SD_pour:
	cmp	cx,30
	jg		SD_fpour
	mov	bl,byte ptr buffer[si]
	inc	si
	call	Send_carac
	inc	cx
	jmp	SD_pour
SD_fpour:
 
	mov	bl,hemming
	call	Send_carac
	ret
;----------------------------------------------------
 
;Envoi d'un caractère
;in: bl=caractère a envoyé
Send_carac:
	push	ax
	push	dx
	mov 	ah,01
	mov 	al,bl
	mov 	dx,port_com
	int 	14h
	pop	ax
	pop	dx
	ret
;----------------------------------------------------
pause:
	pusha
	mov  	ecx,0
P_boucle:
	add 	ecx,1
	pusha
	popa
	cmp   	ecx,0FFFFFh
	jb    	P_boucle
	popa
	ret
 
;----------------------------------------------------
Envoi_eof:
;Envoi le caractère FF pour signifier la fin au programme receveur
	call	pause
	call	pause
	call	pause
	mov	bl,0FFh
	call  	send_carac
	call	pause
	call	pause
	ret
 
;----------------------------------------------------
Ouvrir_fichier:
;ouvre le F_in en lecture
	mov 	ax,3D00h
	mov	dx,offset f_in
	int 	21h
	jc 	Erreur1
	mov 	f_in.handle,ax				;place le handle dans la structure
	ret
;----------------------------------------------------
Lire_donnees:
	mov	ax,3F00h
	mov	bx,f_in.handle
	mov	cx,30
	mov	dx,offset buffer
	int	21h
	jc	Erreur2
	mov	taille,ax
	ret
;----------------------------------------------------
Fermer_fichier:
	mov	ah,3Eh
	mov	si,offset f_in
	mov	bx,word ptr [si].handle
	int	21h
	jc	Erreur3
	ret
;----------------------------------------------------
Erreur1:
;affiche un message d'erreur et quitte
	mov	dx,offset msg_Erreur1
	mov	ax,0900h
	int 	21h						;affiche erreur
	jmp	Fin
;----------------------------------------------------
Erreur2:
	mov	dx,offset msg_Erreur2
	mov	ax,0900h
	int 	21h						;affiche erreur
	jmp	Fin
;----------------------------------------------------
Erreur3:
	mov	dx,offset msg_Erreur3
	mov	ax,0900h
	int 	21h						;affiche erreur
	jmp	Fin
;----------------------------------------------------
 
code ends
 
pile	segment stack
      db      100 dup (?)
pile 	ends
end debut
Quelqu'un pourrait-il m'aider car là je (enfin moi et toute ma classe lol) patauge complètement.