J'ai un problème de comptage de la longueur d'une chaîne. Je reçois toujours un nombre comme 2432, tu me passes une chaîne comme "abc".Quelques questions sur le comptage de longueur de chaîne
Je pense que le problème est dans cette ligne
mov bl, byte [esi]
mais je ne sais pas pourquoi. Peut-être que c'est quelque chose avec la longueur du caractère en bits?
Le problème peut-il être un système d'exploitation 64 bits ou un processeur dual core? (dont je doute quelque peu, car je pense que la première ligne "bits 32" devrait résoudre le problème). PS: C'est un exercice, c'est pourquoi j'ai besoin de déterminer la longueur de la chaîne comme ceci.
Le code:
bits 32
extern _printf
extern _scanf
global _main
section .data
number_frmt db 10,"%d",10,0
enter_str db "Enter some string: ", 10,0
string_frmt db "%s", 0
section .bss
entered_string resb 100
section .text
_main:
pushad
push dword enter_str
call _printf
add esp, 4
push dword entered_string
push dword string_frmt
call _scanf
add esp, 4 ;leave the entered string in the stack
call count ; count it and put the result to eax
push dword eax
push dword number_frmt
call _printf
add esp, 12
popad
ret
count:
push esi ;save it
push ebx ;save it
mov eax, 0 ;init eax=0
mov esi, [esp+12] ;put the entered string to esi
.loop:
mov bl, byte [esi] ;get the first char
inc eax ;eax++
add esi,1 ;point to next char
cmp bl,10 ;is it new line?
jne .loop ;if not loop
dec eax ;eax-- (because of newline at the end)
pop ebx ;retrieve ebx
pop esi ;retrieve esi
ret