Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 14h51   #1
moukengue
Invité de passage
 
Homme Alexe Moukengue
Étudiant
Inscription : septembre 2012
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Alexe Moukengue
Localisation : Cameroun

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2012
Messages : 7
Points : 3
Points : 3
Par défaut ASM[x86 32-bits / 64-bits] difficulté à s'assurer du caractère lu au clavier

Bonsoir à tous,

J'ai un petit souci: roll:. En fait j'aimerais savoir quel est le caractère que j'ai lu au clavier en comparant la valeur du caractère courant avec les codes ASCII correspondants aux caractères. Dans le cas de ce code je teste si c'est le caractère 'a' qui est lu au clavier.
Vous trouverez ci-dessous le code que j'ai pu écrire

Code :
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
.intel_syntax noprefix
.data
buffer:.space 30,'0'
desc:.asciz "%d\n"
nbcar:.int 0
.global main
main:
	# Lecture de la chaine de caractère	
	push	offset nbcar
	call	lirechaine
	add	esp,4
	push	offset buffer
	push	nbcar
 
	# Traitement de la chaine de caractère
	call	affichechaine
	add	esp,8
	push	0
	call 	exit
 
# fonction permettant de lire une chaine de caractère au clavier
lirechaine:
	push	ebp
	mov	ebp,esp
	mov	eax,3
	mov	ebx,0
	mov	ecx,offset buffer
	mov	edx,30
	int	0x80
	mov	esi,[ebp+8]
	dec	eax
	mov	[esi],eax
	pop	ebp
	ret
 
# fonction permettant de traiter caractère par caractère de la chaine lue
affichechaine:
	push	ebp
	mov	ebp,esp
	mov	esi,[ebp+8]
	mov	edx,0
tque:	cmp	edx,esi
	je	ftque
	mov	ecx,[ebp+12]	
	add	ecx,edx
	push	ecx
	call	code_caractere
	add	esp,4
	inc	edx
	jmp	tque
ftque:	pop	ebp
	ret
 
affichecar:
	push	ebp
	mov	ebp,esp
	pusha
	mov	eax,4
	mov	ebx,1
	mov	ecx,[ebp+8]
	mov	edx,1
	int	0x80
	popa
	pop	ebp
	ret
 
print_int:
	push	ebp
	mov	ebp,esp
	pusha
	push	[ebp+8]
	push	offset desc
	call	printf
	add	esp,8
	popa
	pop	ebp
	ret
 
code_caractere:
	push	ebp
	mov	ebp,esp
	pusha
	mov	eax,[ebp+8]
 
	#Ici je veux me rassurer de la valeur entière du caractère en cour de traitement
	push	eax
	call	print_int
	add	esp,4
	cmp	eax,98
	je 	fin
 
	#Ici je veux me rassurer du caractère en cour de traitement	
	push	eax
	call	affichecar
	add	esp,4
	fin:	popa
	pop	ebp
	ret
Je compte sur votre bonne compréhension
moukengue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 19h17   #2
moukengue
Invité de passage
 
Homme Alexe Moukengue
Étudiant
Inscription : septembre 2012
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Alexe Moukengue
Localisation : Cameroun

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2012
Messages : 7
Points : 3
Points : 3
Par défaut Code corrigé

Code :
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
 
.intel_syntax noprefix
.data
buffer:.space 30,'0'
desc:.asciz "%d\n"
nbcar:.int 0
.global main
main:
	# Lecture de la chaine de caractère	
	push	offset nbcar
	call	lirechaine
	add	esp,4
	push	offset buffer
	push	nbcar
 
	# Traitement de la chaine de caractère
	call	affichechaine
	add	esp,8
	push	0
	call 	exit
 
# fonction permettant de lire une chaine de caractère au clavier
lirechaine:
	push	ebp
	mov	ebp,esp
	mov	eax,3
	mov	ebx,0
	mov	ecx,offset buffer
	mov	edx,30
	int	0x80
	mov	esi,[ebp+8]
	dec	eax
	mov	[esi],eax
	pop	ebp
	ret
 
# fonction permettant de traiter caractère par caractère de la chaine lue
affichechaine:
	push	ebp
	mov	ebp,esp
	mov	esi,[ebp+8]
	mov	edx,0
tque:	cmp	edx,esi
	je	ftque
	mov	ecx,[ebp+12]	
	add	ecx,edx
	push	ecx
	call	code_caractere
	add	esp,4
	inc	edx
	jmp	tque
ftque:	pop	ebp
	ret
 
affichecar:
	push	ebp
	mov	ebp,esp
	pusha
	mov	eax,4
	mov	ebx,1
	mov	ecx,[ebp+8]
	mov	edx,1
	int	0x80
	popa
	pop	ebp
	ret
 
print_int:
	push	ebp
	mov	ebp,esp
	pusha
	push	[ebp+8]
	push	offset desc
	call	printf
	add	esp,8
	popa
	pop	ebp
	ret
 
code_caractere:
	push	ebp
	mov	ebp,esp
	pusha
	mov	al,[ebp+8]
 
	cmp	al,98
	je 	fin
 	fin:	popa
	pop	ebp
	ret
moukengue est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h53.


 
 
 
 
Partenaires

Hébergement Web