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 |
Partager