I'm working on a little project where I have to recode a function from the lib C. Actually I'm working on strcasecmp
:
BITS 64
%include "minilib.inc"
section .text
my_strcasecmp:
init:
mov r10b, [rdi]
mov r11b, [rsi]
jmp while
while:
cmp r10b, 0
je end
cmp r11b, 0
je end
cmp r10b, 90
jle checkfirstup
cmp r11b, 90
jle checksecondup
jmp strcasecmp
strcasecmp:
cmp r10b, r11b
jne end
inc rdi
inc rsi
jmp init
checkfirstup:
cmp r10b, 65
jge r10btolowcase
jmp checksecondup
r10btolowcase:
add r10b, 32
jmp while
checksecondup:
cmp r11b, 65
jge r11btolowcase
jmp strcasecmp
r11btolowcase:
add r11b, 32
jmp while
end:
movzx rax, r10b
movzx rbx, r11b
sub rax, rbx
ret
and this is the code in c :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int my_strcasecmp(const char *string1, const char *string2); /* Prototype */
int main(void)
{
char *str1 = "S";
char *str2 = "S";
int result;
result = strcasecmp(str1, str2);
if (result == 0)
printf("Strings compared equal.\n");
else if (result < 0)
printf("\"%s\" is less than \"%s\".\n", str1, str2);
else
printf("\"%s\" is greater than \"%s\".\n", str1, str2);
return 0;}
when I try my strcasecmp I always have "nanana is greater than nanana" and I don't understand why.
How can I fix this?