diff options
| -rw-r--r-- | ft_strcpy.s | 12 | ||||
| -rw-r--r-- | ft_strlen.s | 24 | ||||
| -rw-r--r-- | main.c | 11 |
3 files changed, 29 insertions, 18 deletions
diff --git a/ft_strcpy.s b/ft_strcpy.s index 44a098d..2b7bbb9 100644 --- a/ft_strcpy.s +++ b/ft_strcpy.s @@ -2,10 +2,10 @@ _ft_strcpy: pop ax pop bx mov ecx, eax ; copy - FT_STRCPY_LOOP: - mov [ecx], ebx - inc ebx - inc ecx - cmp ebx, 0 - jneq FT_STRCPY_LOOP +FT_STRCPY_LOOP: + mov [ecx], ebx + inc ebx + inc ecx + cmp ebx, 0 + jneq FT_STRCPY_LOOP ret diff --git a/ft_strlen.s b/ft_strlen.s index 32eaf0c..82c0e34 100644 --- a/ft_strlen.s +++ b/ft_strlen.s @@ -1,12 +1,12 @@ -ft_strlen: - pop bx - mov eax, 0h -FT_STRLEN_LOOP: - mov ecx, [ebx] - cmp ecx, 0 - je FT_STRLEN_RET - inc eax - inc ebx - jmp FT_STRLEN_LOOP -FT_STRLEN_RET: - ret +.globl _ft_strlen + + _ft_strlen: + mov rbx, rdi # first argument in rbx + xor rax, rax # rax = 0 + FT_STRLEN_LOOP: + cmp byte ptr [rbx + rax], 0 # compare rbx[rax] and '\0' + je FT_STRLEN_RET + inc rax + jmp FT_STRLEN_LOOP + FT_STRLEN_RET: + ret @@ -2,11 +2,22 @@ int ft_strlen(char *); +/* extern void test(); */ + int main() { + /* extern say_hi(); */ + char *a = ""; + char *b = "a"; + /* printf("%d\n", sizeof(char*)); */ + /* printf("a: %p\n", (void*)a); */ + /* printf("b: %p\n", (void*)a); */ /* extern ft_strlen("bonjour"); */ + printf("%d\n", ft_strlen(a)); + printf("%d\n", ft_strlen(b)); printf("%d\n", ft_strlen("bonjour")); return 0; } + |
