Witam, chciałbym w fasm'ie sprawdzić długość string'a i dostaję "segmentation fault".
Napisałem taki kod:
strlen:
mov ebx,0 ;ustawiam ebx na 0
strlen_loop:
cmp byte [eax+ebx],0 ;sprawdzam czy byte o index'ie ebx ma wartość zero
inc ebx ;inkrementuje wartość ebx
jne strlen_loop ;jeżeli ten byte jest różny od zera wracam do strlen_loop
ret ;kończę funkcje
dalej w kodzie "wywołuję funkcje" w taki sposób:
mov eax,[esp+4] ;ustawiam eax na pierwszy argument (nazwę) programu
call strlen ;wywołuje funkcje
push ebx ;wynik funkcje daję na stos
później próbuję wypisać tekst:
mov eax,4 ;4 - sys_write
mov ebx,0 ;0 - stdout
mov ecx,[esp+4] ;pierwszy argument programu
pop edx ;ustawiam edx na to co wcześniej dałem na stos
int 80h ;i próbuję wypisać tekst
niestety nie znam się debugowaniu fasm'a, więc wiem tylko tyle, że błąd jest przy sprawdzaniu drugiego byte'a w string'u.