diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2021-02-11 15:44:44 +0100 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2021-02-11 15:44:44 +0100 |
| commit | d6240e3f6aeb342aaf13284c7cc93226970648aa (patch) | |
| tree | a5fef5bd1d55e0dd63cb986a445254cf8caa94ce | |
| parent | cd5c9e6a923878e797212d27476ee217eb844a14 (diff) | |
| download | libasm-d6240e3f6aeb342aaf13284c7cc93226970648aa.tar.gz libasm-d6240e3f6aeb342aaf13284c7cc93226970648aa.tar.bz2 libasm-d6240e3f6aeb342aaf13284c7cc93226970648aa.zip | |
Replaced tab with spaces
| -rw-r--r-- | ft_atoi_base.s | 282 | ||||
| -rw-r--r-- | ft_list_push_front.s | 32 | ||||
| -rw-r--r-- | ft_list_remove_if.s | 126 | ||||
| -rw-r--r-- | ft_list_size.s | 14 | ||||
| -rw-r--r-- | ft_list_sort.s | 190 | ||||
| -rw-r--r-- | ft_read.s | 10 | ||||
| -rw-r--r-- | ft_strcmp.s | 44 | ||||
| -rw-r--r-- | ft_strcpy.s | 26 | ||||
| -rw-r--r-- | ft_strdup.s | 26 | ||||
| -rw-r--r-- | ft_strlen.s | 10 | ||||
| -rw-r--r-- | ft_write.s | 10 |
11 files changed, 385 insertions, 385 deletions
diff --git a/ft_atoi_base.s b/ft_atoi_base.s index 6803000..605190d 100644 --- a/ft_atoi_base.s +++ b/ft_atoi_base.s @@ -53,179 +53,179 @@ global M_FT_ATOI_BASE section .text ; int ft_atoi_base(const char *str, const char *base); M_FT_ATOI_BASE: - ; ===prolog=== - ; long int nb (8) - ; int radix (4) - ; int is_negative (4) - sub rsp, 16 - mov qword [rsp], 0x0 ; nb = 0 - mov dword [rsp + 8], 0x0 ; radix = 0 - mov dword [rsp + 12], 0x0 ; is_negative = 0 - push rbx - push r11 - push r15 - - ; ===body=== - ; check if the base is valid - push rdi - mov rdi, rsi - call _check_base - pop rdi - cmp eax, 0x0 - je FT_ATOI_BASE_ERROR - - ; ignore space in front - mov rbx, -1 ; rbx is rdi str index + ; ===prolog=== + ; long int nb (8) + ; int radix (4) + ; int is_negative (4) + sub rsp, 16 + mov qword [rsp], 0x0 ; nb = 0 + mov dword [rsp + 8], 0x0 ; radix = 0 + mov dword [rsp + 12], 0x0 ; is_negative = 0 + push rbx + push r11 + push r15 + + ; ===body=== + ; check if the base is valid + push rdi + mov rdi, rsi + call _check_base + pop rdi + cmp eax, 0x0 + je FT_ATOI_BASE_ERROR + + ; ignore space in front + mov rbx, -1 ; rbx is rdi str index FT_ATOI_BASE_IGNORE_SPACES: - inc rbx - push rdi - mov dil, byte [rdi + rbx] - call _ft_isspace - pop rdi - cmp rax, 1 - je FT_ATOI_BASE_IGNORE_SPACES - - ; ignore '+', '-' reverse the current sign - mov qword [rsp], 0x0 ; nb = 0 - mov dword [rsp + 8], 0x0 ; radix = 0 - mov dword [rsp + 12], 0x0 ; is_negative = 0 - mov dword [rsp + 12], 0x0 ; weird behavior FIXME - dec rbx - jmp FT_ATOI_BASE_SIGN_LOOP + inc rbx + push rdi + mov dil, byte [rdi + rbx] + call _ft_isspace + pop rdi + cmp rax, 1 + je FT_ATOI_BASE_IGNORE_SPACES + + ; ignore '+', '-' reverse the current sign + mov qword [rsp], 0x0 ; nb = 0 + mov dword [rsp + 8], 0x0 ; radix = 0 + mov dword [rsp + 12], 0x0 ; is_negative = 0 + mov dword [rsp + 12], 0x0 ; weird behavior FIXME + dec rbx + jmp FT_ATOI_BASE_SIGN_LOOP FT_ATOI_BASE_SIGN_LOOP_FOUND_NEG: - not dword [rsp + 12] + not dword [rsp + 12] FT_ATOI_BASE_SIGN_LOOP: - inc rbx - cmp byte [rdi + rbx], 0x2b ; if '+' - je FT_ATOI_BASE_SIGN_LOOP - cmp byte [rdi + rbx], 0x2d ; if '-' - je FT_ATOI_BASE_SIGN_LOOP_FOUND_NEG - - ; base radix - push rdi - mov rdi, rsi - call M_FT_STRLEN - pop rdi - mov dword [rsp + 8], eax - - ; main loop + inc rbx + cmp byte [rdi + rbx], 0x2b ; if '+' + je FT_ATOI_BASE_SIGN_LOOP + cmp byte [rdi + rbx], 0x2d ; if '-' + je FT_ATOI_BASE_SIGN_LOOP_FOUND_NEG + + ; base radix + push rdi + mov rdi, rsi + call M_FT_STRLEN + pop rdi + mov dword [rsp + 8], eax + + ; main loop FT_ATOI_BASE_LOOP: - push rdi - push rsi - mov dil, byte [rdi + rbx] - call _base_pos ; get value of the current char int the base - pop rsi - pop rdi - cmp rax, -1 ; if is not in base break - je FT_ATOI_BASE_LOOP_END - - mov r11, [rsp] ; place nb in register for multiplication - xor r15, r15 ; same for radix - mov r15d, dword [rsp + 8] - imul r11, r15 ; multiply by the radix - mov [rsp], r11 ; store multiplication result - add [rsp], rax ; add the current value - - inc rbx - jmp FT_ATOI_BASE_LOOP + push rdi + push rsi + mov dil, byte [rdi + rbx] + call _base_pos ; get value of the current char int the base + pop rsi + pop rdi + cmp rax, -1 ; if is not in base break + je FT_ATOI_BASE_LOOP_END + + mov r11, [rsp] ; place nb in register for multiplication + xor r15, r15 ; same for radix + mov r15d, dword [rsp + 8] + imul r11, r15 ; multiply by the radix + mov [rsp], r11 ; store multiplication result + add [rsp], rax ; add the current value + + inc rbx + jmp FT_ATOI_BASE_LOOP FT_ATOI_BASE_LOOP_END: - cmp dword [rsp + 12], 0 - je FT_ATOI_BASE_END - neg qword [rsp] + cmp dword [rsp + 12], 0 + je FT_ATOI_BASE_END + neg qword [rsp] - ; ===epilog=== + ; ===epilog=== FT_ATOI_BASE_END: - mov rax, [rsp] - pop r15 - pop r11 - pop rbx - add rsp, 16 - ret + mov rax, [rsp] + pop r15 + pop r11 + pop rbx + add rsp, 16 + ret FT_ATOI_BASE_ERROR: - mov rax, 0x0 - pop r15 - pop r11 - pop rbx - add rsp, 16 - ret + mov rax, 0x0 + pop r15 + pop r11 + pop rbx + add rsp, 16 + ret ; dil: char searched ; rsi: char *base _base_pos: - mov rax, -1 + mov rax, -1 BASE_POS_LOOP: - inc rax - cmp byte [rsi + rax], 0 ; if '\0' char not in base - je BASE_POS_NOT_FOUND - cmp dil, byte [rsi + rax] ; loop until '\0' or found - jne BASE_POS_LOOP - ret + inc rax + cmp byte [rsi + rax], 0 ; if '\0' char not in base + je BASE_POS_NOT_FOUND + cmp dil, byte [rsi + rax] ; loop until '\0' or found + jne BASE_POS_LOOP + ret BASE_POS_NOT_FOUND: - mov rax, -1 - ret + mov rax, -1 + ret ; rdi: char *base _check_base: - sub rsp, 4 - mov dword [rsp], 0 + sub rsp, 4 + mov dword [rsp], 0 ; check for empty or size 1 base - push rdi - call M_FT_STRLEN - pop rdi - cmp rax, 2 - jl CHECK_BASE_FALSE + push rdi + call M_FT_STRLEN + pop rdi + cmp rax, 2 + jl CHECK_BASE_FALSE - ; xor rcx, rcx + ; xor rcx, rcx CHECK_BASE_LOOP: - cmp byte [rdi], 0 - je CHECK_BASE_LOOP_END - cmp byte [rdi], 0x2b ; check '+' - je CHECK_BASE_FALSE - cmp byte [rdi], 0x2d ; check '-' - je CHECK_BASE_FALSE + cmp byte [rdi], 0 + je CHECK_BASE_LOOP_END + cmp byte [rdi], 0x2b ; check '+' + je CHECK_BASE_FALSE + cmp byte [rdi], 0x2d ; check '-' + je CHECK_BASE_FALSE ; check for spaces - push rdi - mov dil, [rdi] ; pass current char as argument - call _ft_isspace - pop rdi - cmp rax, 1 - je CHECK_BASE_FALSE + push rdi + mov dil, [rdi] ; pass current char as argument + call _ft_isspace + pop rdi + cmp rax, 1 + je CHECK_BASE_FALSE ; check for duplicates in base - xor rcx, rcx ; index from curr +1 + xor rcx, rcx ; index from curr +1 CHECK_BASE_DUP_LOOP: - inc rcx - mov r10b, byte [rdi] ; r10b = checked char - cmp r10b, byte [rdi + rcx] ; check if found dup - je CHECK_BASE_FALSE - cmp byte [rdi + rcx], 0 ; if \0 end dup check - jne CHECK_BASE_DUP_LOOP - - inc rdi - jmp CHECK_BASE_LOOP + inc rcx + mov r10b, byte [rdi] ; r10b = checked char + cmp r10b, byte [rdi + rcx] ; check if found dup + je CHECK_BASE_FALSE + cmp byte [rdi + rcx], 0 ; if \0 end dup check + jne CHECK_BASE_DUP_LOOP + + inc rdi + jmp CHECK_BASE_LOOP CHECK_BASE_LOOP_END: - add rsp, 4 - mov rax, 1 - ret + add rsp, 4 + mov rax, 1 + ret CHECK_BASE_FALSE: - add rsp, 4 - xor rax, rax - ret + add rsp, 4 + xor rax, rax + ret ; dil: char c _ft_isspace: - cmp dil, 0x20 - je ISSPACE_TRUE - sub dil, 0x9 - cmp dil, 0x5 - jl ISSPACE_TRUE - xor rax, rax - ret + cmp dil, 0x20 + je ISSPACE_TRUE + sub dil, 0x9 + cmp dil, 0x5 + jl ISSPACE_TRUE + xor rax, rax + ret ISSPACE_TRUE: - mov rax, 0x1 - ret + mov rax, 0x1 + ret diff --git a/ft_list_push_front.s b/ft_list_push_front.s index e4cfb02..4eedf75 100644 --- a/ft_list_push_front.s +++ b/ft_list_push_front.s @@ -24,22 +24,22 @@ global M_FT_LIST_PUSH_FRONT ; void ft_list_push_front(t_list **begin_list, void *data); M_FT_LIST_PUSH_FRONT: - cmp rdi, 0 - je FT_LIST_PUSH_FRONT_END + cmp rdi, 0 + je FT_LIST_PUSH_FRONT_END - push rdi - push rsi - xor rdi, rdi - mov edi, 16 - call M_MALLOC wrt ..plt - pop rsi - pop rdi - cmp rax, 0 - je FT_LIST_PUSH_FRONT_END + push rdi + push rsi + xor rdi, rdi + mov edi, 16 + call M_MALLOC wrt ..plt + pop rsi + pop rdi + cmp rax, 0 + je FT_LIST_PUSH_FRONT_END - mov qword [rax + 0], rsi - mov r10, [rdi] - mov [rax + 8], r10 - mov [rdi], rax + mov qword [rax + 0], rsi + mov r10, [rdi] + mov [rax + 8], r10 + mov [rdi], rax FT_LIST_PUSH_FRONT_END: - ret + ret diff --git a/ft_list_remove_if.s b/ft_list_remove_if.s index 7ce06a0..61f3410 100644 --- a/ft_list_remove_if.s +++ b/ft_list_remove_if.s @@ -25,78 +25,78 @@ extern M_FREE %define NULL 0x0 %macro EXTERN_FUNCTION_SAVE 0 - push rdi - push rsi - push rdx - push rcx + push rdi + push rsi + push rdx + push rcx %endmacro %macro EXTERN_FUNCTION_SAVE_END 0 - pop rcx - pop rdx - pop rsi - pop rdi + pop rcx + pop rdx + pop rsi + pop rdi %endmacro ; ft_list_remove_if(t_list **begin_list, void *data_ref, ; int (*cmp)(void *data, void *data_ref), ; void (*free_fct)(void *)) M_FT_LIST_REMOVE_IF: - ; t_list *saved_next - - ; === prolog === - push rbp - mov rbp, rsp - sub rsp, 8 - - ; === base condition === - cmp rdi, NULL - je FT_LIST_REMOVE_IF_END - cmp qword [rdi], NULL - je FT_LIST_REMOVE_IF_END - - ; === compare (*begin_list)->data and data_ref - EXTERN_FUNCTION_SAVE - mov rdi, [rdi] - mov rdi, [rdi + 0] - call rdx ; cmp((*begin_list)->data, data_ref) - EXTERN_FUNCTION_SAVE_END - cmp rax, 0 - je FT_LIST_REMOVE_IF_REMOVE - - ; === next element === - push rdi - mov rdi, [rdi] - lea rdi, [rdi + 8] - call M_FT_LIST_REMOVE_IF - pop rdi - jmp FT_LIST_REMOVE_IF_END - - ; === remove head and go next === + ; t_list *saved_next + + ; === prolog === + push rbp + mov rbp, rsp + sub rsp, 8 + + ; === base condition === + cmp rdi, NULL + je FT_LIST_REMOVE_IF_END + cmp qword [rdi], NULL + je FT_LIST_REMOVE_IF_END + + ; === compare (*begin_list)->data and data_ref + EXTERN_FUNCTION_SAVE + mov rdi, [rdi] + mov rdi, [rdi + 0] + call rdx ; cmp((*begin_list)->data, data_ref) + EXTERN_FUNCTION_SAVE_END + cmp rax, 0 + je FT_LIST_REMOVE_IF_REMOVE + + ; === next element === + push rdi + mov rdi, [rdi] + lea rdi, [rdi + 8] + call M_FT_LIST_REMOVE_IF + pop rdi + jmp FT_LIST_REMOVE_IF_END + + ; === remove head and go next === FT_LIST_REMOVE_IF_REMOVE: - mov rax, [rdi] ; rax = *begin_list - mov rax, [rax + 8] ; rax = rax->next - mov [rbp - 8], rax ; saved_next = (*begin_list)->next - - push rdi ; strange behavior - EXTERN_FUNCTION_SAVE - mov rdi, [rdi] - mov rdi, [rdi + 0] - call rcx ; free_fct((*begin_list)->data) - EXTERN_FUNCTION_SAVE_END - pop rdi - - EXTERN_FUNCTION_SAVE - mov rdi, [rdi] - call M_FREE wrt ..plt ; free(*begin_list) - EXTERN_FUNCTION_SAVE_END - - mov rax, [rbp - 8] - mov [rdi], rax - call M_FT_LIST_REMOVE_IF + mov rax, [rdi] ; rax = *begin_list + mov rax, [rax + 8] ; rax = rax->next + mov [rbp - 8], rax ; saved_next = (*begin_list)->next + + push rdi ; strange behavior + EXTERN_FUNCTION_SAVE + mov rdi, [rdi] + mov rdi, [rdi + 0] + call rcx ; free_fct((*begin_list)->data) + EXTERN_FUNCTION_SAVE_END + pop rdi + + EXTERN_FUNCTION_SAVE + mov rdi, [rdi] + call M_FREE wrt ..plt ; free(*begin_list) + EXTERN_FUNCTION_SAVE_END + + mov rax, [rbp - 8] + mov [rdi], rax + call M_FT_LIST_REMOVE_IF FT_LIST_REMOVE_IF_END: - ; === epilog === - mov rsp, rbp - pop rbp - ret + ; === epilog === + mov rsp, rbp + pop rbp + ret diff --git a/ft_list_size.s b/ft_list_size.s index 0d80bd9..31fa613 100644 --- a/ft_list_size.s +++ b/ft_list_size.s @@ -21,12 +21,12 @@ global M_FT_LIST_SIZE section .text ; int ft_list_size(t_list *begin_list); M_FT_LIST_SIZE: - xor eax, eax + xor eax, eax FT_LIST_SIZE_LOOP: - cmp rdi, 0 - je FT_LIST_SIZE_END - inc eax - mov rdi, [rdi + 8] - jmp FT_LIST_SIZE_LOOP + cmp rdi, 0 + je FT_LIST_SIZE_END + inc eax + mov rdi, [rdi + 8] + jmp FT_LIST_SIZE_LOOP FT_LIST_SIZE_END: - ret + ret diff --git a/ft_list_sort.s b/ft_list_sort.s index b4899ef..55f3a9f 100644 --- a/ft_list_sort.s +++ b/ft_list_sort.s @@ -22,111 +22,111 @@ global M_FT_LIST_SORT ; void ft_list_sort(t_list **begin_list, int (*cmp)(void*, void*)); M_FT_LIST_SORT: - ; t_list *slow : rax = *begin_list - ; t_list *fast : rbx = (*begin_list)->next - ; t_list *middle : rsp + 0 - - ; === base condition === - cmp rdi, NULL - je FT_LIST_SORT_END ; if begin_list == NULL return - mov rax, [rdi] - cmp rax, NULL - je FT_LIST_SORT_END ; if *begin_list == NULL return - mov rbx, [rax + 8] - cmp rbx, NULL - je FT_LIST_SORT_END ; if (*begin_list)->next == NULL return - - ; === find list middle loop === + ; t_list *slow : rax = *begin_list + ; t_list *fast : rbx = (*begin_list)->next + ; t_list *middle : rsp + 0 + + ; === base condition === + cmp rdi, NULL + je FT_LIST_SORT_END ; if begin_list == NULL return + mov rax, [rdi] + cmp rax, NULL + je FT_LIST_SORT_END ; if *begin_list == NULL return + mov rbx, [rax + 8] + cmp rbx, NULL + je FT_LIST_SORT_END ; if (*begin_list)->next == NULL return + + ; === find list middle loop === FT_LIST_SORT_MIDDLE_LOOP: ; do { - mov rbx, [rbx + 8] ; fast = fast->next - cmp rbx, NULL - je FT_LIST_SORT_MIDDLE_LOOP_END ; if fast == NULL break - mov rbx, [rbx + 8] ; fast = fast->next - mov rax, [rax + 8] ; slow = slow->next - cmp rbx, NULL - jne FT_LIST_SORT_MIDDLE_LOOP ; } while (fast != NULL) + mov rbx, [rbx + 8] ; fast = fast->next + cmp rbx, NULL + je FT_LIST_SORT_MIDDLE_LOOP_END ; if fast == NULL break + mov rbx, [rbx + 8] ; fast = fast->next + mov rax, [rax + 8] ; slow = slow->next + cmp rbx, NULL + jne FT_LIST_SORT_MIDDLE_LOOP ; } while (fast != NULL) FT_LIST_SORT_MIDDLE_LOOP_END: - ; create a stack frame for local variable to store middle address - push rbp - mov rbp, rsp - sub rsp, 8 - - ; store middle in [rbp - 8] - mov rcx, [rax + 8] - mov [rbp - 8], rcx - mov qword [rax + 8], NULL ; slow->next = NULL - - ; === sorting both child list === - push rdi - push rsi - call M_FT_LIST_SORT ; ft_list_sort(begin_list, cmp) - lea rdi, [rbp - 8] - call M_FT_LIST_SORT ; ft_list_sort(&middle, cmp) - pop rsi - pop rdi - - ; === merging sorted child === - push rdi - push rsi - mov rdi, [rdi] ; arg_1 = *begin_list - mov rdx, rsi ; arg_3 = cmp - mov rsi, [rbp - 8] ; arg_2 = middle - call _st_merge_sorted_list - pop rsi - pop rdi - mov [rdi], rax ; *begin_list = st_merge_sorted_list(...); - - ; restoring stack frame - mov rsp, rbp - pop rbp + ; create a stack frame for local variable to store middle address + push rbp + mov rbp, rsp + sub rsp, 8 + + ; store middle in [rbp - 8] + mov rcx, [rax + 8] + mov [rbp - 8], rcx + mov qword [rax + 8], NULL ; slow->next = NULL + + ; === sorting both child list === + push rdi + push rsi + call M_FT_LIST_SORT ; ft_list_sort(begin_list, cmp) + lea rdi, [rbp - 8] + call M_FT_LIST_SORT ; ft_list_sort(&middle, cmp) + pop rsi + pop rdi + + ; === merging sorted child === + push rdi + push rsi + mov rdi, [rdi] ; arg_1 = *begin_list + mov rdx, rsi ; arg_3 = cmp + mov rsi, [rbp - 8] ; arg_2 = middle + call _st_merge_sorted_list + pop rsi + pop rdi + mov [rdi], rax ; *begin_list = st_merge_sorted_list(...); + + ; restoring stack frame + mov rsp, rbp + pop rbp FT_LIST_SORT_END: - ret + ret ; t_list *st_merge_sorted_list(t_list* l1, t_list* l2, int (*cmp)(void*, void*)) _st_merge_sorted_list: - cmp rdi, NULL - je MERGE_SORTED_LIST_RETURN_L2 ; if l1 == NULL return l2 - cmp rsi, NULL - je MERGE_SORTED_LIST_RETURN_L1 ; if l2 == NULL return l1 - - push rdi - push rsi - push rdx - mov rdi, [rdi + 0] ; l1->data - mov rsi, [rsi + 0] ; l2->data - xor rax, rax - call rdx ; cmp - pop rdx - pop rsi - pop rdi - - cmp eax, 0 - jl MERGE_SORTED_LIST_L1_LT_L2 - - ; if l1 >= l2 - push rsi ; save l2 - mov rsi, [rsi + 8] ; l2 = l2->next - call _st_merge_sorted_list ; merge_sorted_list(l1, l2->next, cmp) - pop rsi ; restore rsi - mov [rsi + 8], rax - mov rax, rsi - jmp MERGE_SORTED_LIST_END - ; else + cmp rdi, NULL + je MERGE_SORTED_LIST_RETURN_L2 ; if l1 == NULL return l2 + cmp rsi, NULL + je MERGE_SORTED_LIST_RETURN_L1 ; if l2 == NULL return l1 + + push rdi + push rsi + push rdx + mov rdi, [rdi + 0] ; l1->data + mov rsi, [rsi + 0] ; l2->data + xor rax, rax + call rdx ; cmp + pop rdx + pop rsi + pop rdi + + cmp eax, 0 + jl MERGE_SORTED_LIST_L1_LT_L2 + + ; if l1 >= l2 + push rsi ; save l2 + mov rsi, [rsi + 8] ; l2 = l2->next + call _st_merge_sorted_list ; merge_sorted_list(l1, l2->next, cmp) + pop rsi ; restore rsi + mov [rsi + 8], rax + mov rax, rsi + jmp MERGE_SORTED_LIST_END + ; else MERGE_SORTED_LIST_L1_LT_L2: - push rdi - mov rdi, [rdi + 8] - call _st_merge_sorted_list ; merge_sort_list(l1->next, l2, cmp) - pop rdi - mov [rdi + 8], rax - mov rax, rdi - jmp MERGE_SORTED_LIST_END + push rdi + mov rdi, [rdi + 8] + call _st_merge_sorted_list ; merge_sort_list(l1->next, l2, cmp) + pop rdi + mov [rdi + 8], rax + mov rax, rdi + jmp MERGE_SORTED_LIST_END MERGE_SORTED_LIST_RETURN_L1: - mov rax, rdi - ret + mov rax, rdi + ret MERGE_SORTED_LIST_RETURN_L2: - mov rax, rsi + mov rax, rsi MERGE_SORTED_LIST_END: - ret + ret @@ -27,15 +27,15 @@ global M_FT_READ section .text ; int ft_read(int, void*, size_t); M_FT_READ: - mov rax, M_SYSCALL_READ - syscall + mov rax, M_SYSCALL_READ + syscall %ifdef __LINUX__ cmp rax, 0 jl FT_READ_ERROR %else jc FT_READ_ERROR %endif - ret + ret FT_READ_ERROR: %ifdef __LINUX__ neg rax @@ -43,5 +43,5 @@ FT_READ_ERROR: push rax call M_ERRNO_LOCATION wrt ..plt pop qword [rax] - mov rax, -1 - ret + mov rax, -1 + ret diff --git a/ft_strcmp.s b/ft_strcmp.s index 7c55a43..bdab204 100644 --- a/ft_strcmp.s +++ b/ft_strcmp.s @@ -22,31 +22,31 @@ global M_FT_STRCMP section .text ; int ft_strcmp(const char *s1, const char *s2); M_FT_STRCMP: - push r12 - push r13 - push rcx - mov r12, rdi ; s1 - mov r13, rsi ; s2 - mov rcx, -1 ; index + push r12 + push r13 + push rcx + mov r12, rdi ; s1 + mov r13, rsi ; s2 + mov rcx, -1 ; index FT_STRCMP_LOOP: - inc rcx - cmp byte [r12 + rcx], 0 ; check and of s1 - je FT_STRCMP_LOOP_END - mov dl, byte [r12 + rcx] - cmp dl, byte [r13 + rcx] ; s1[rcx] == s2[rcx] - je FT_STRCMP_LOOP + inc rcx + cmp byte [r12 + rcx], 0 ; check and of s1 + je FT_STRCMP_LOOP_END + mov dl, byte [r12 + rcx] + cmp dl, byte [r13 + rcx] ; s1[rcx] == s2[rcx] + je FT_STRCMP_LOOP FT_STRCMP_LOOP_END: - xor rax, rax - mov al, byte [r12 + rcx] - sub al, byte [r13 + rcx] - jnc FT_STRCMP_END ; jump end if no substraction overflow + xor rax, rax + mov al, byte [r12 + rcx] + sub al, byte [r13 + rcx] + jnc FT_STRCMP_END ; jump end if no substraction overflow - neg al ; negate al to cancel overflow - neg eax ; negate the whole int since the function returns that type + neg al ; negate al to cancel overflow + neg eax ; negate the whole int since the function returns that type FT_STRCMP_END: - pop rcx - pop r13 - pop r12 - ret + pop rcx + pop r13 + pop r12 + ret diff --git a/ft_strcpy.s b/ft_strcpy.s index eb8ea1a..d7cfac7 100644 --- a/ft_strcpy.s +++ b/ft_strcpy.s @@ -21,17 +21,17 @@ global M_FT_STRCPY section .text ; char *ft_strcpy(char *dst, const char *src); M_FT_STRCPY: - push rbx - push rcx - mov rax, rdi ; dst - mov rbx, rsi ; src - mov rcx, -1 + push rbx + push rcx + mov rax, rdi ; dst + mov rbx, rsi ; src + mov rcx, -1 FT_STRCPY_LOOP: - inc rcx - mov dl, byte [rbx + rcx] - mov byte [rax + rcx], dl - cmp byte [rbx + rcx], 0 - jne FT_STRCPY_LOOP - pop rcx - pop rbx - ret + inc rcx + mov dl, byte [rbx + rcx] + mov byte [rax + rcx], dl + cmp byte [rbx + rcx], 0 + jne FT_STRCPY_LOOP + pop rcx + pop rbx + ret diff --git a/ft_strdup.s b/ft_strdup.s index 346f2b4..09ae2ba 100644 --- a/ft_strdup.s +++ b/ft_strdup.s @@ -32,20 +32,20 @@ global M_FT_STRDUP section .text ; char *ft_strdup(const char *str); M_FT_STRDUP: - push rdi ; save rdi because it will be overwrite for malloc + push rdi ; save rdi because it will be overwrite for malloc - call M_FT_STRLEN ; rdi is still == str - inc rax ; len++ for '\0' + call M_FT_STRLEN ; rdi is still == str + inc rax ; len++ for '\0' - mov rdi, rax ; size to malloc - call M_MALLOC wrt ..plt - cmp rax, 0 - je FT_STRDUP_ERROR + mov rdi, rax ; size to malloc + call M_MALLOC wrt ..plt + cmp rax, 0 + je FT_STRDUP_ERROR - pop rsi ; original str as src - mov rdi, rax ; allocated as dest - call M_FT_STRCPY - ret + pop rsi ; original str as src + mov rdi, rax ; allocated as dest + call M_FT_STRCPY + ret FT_STRDUP_ERROR: - pop rdi - ret + pop rdi + ret diff --git a/ft_strlen.s b/ft_strlen.s index b0f84e7..d9b74cc 100644 --- a/ft_strlen.s +++ b/ft_strlen.s @@ -21,9 +21,9 @@ global M_FT_STRLEN section .text ; int ft_strlen(char *); M_FT_STRLEN: - mov eax, -1 + mov eax, -1 FT_STRLEN_LOOP: - inc eax - cmp byte [rdi + rax], 0 ; compare rbx[rax] and '\0' - jne FT_STRLEN_LOOP - ret + inc eax + cmp byte [rdi + rax], 0 ; compare rbx[rax] and '\0' + jne FT_STRLEN_LOOP + ret @@ -27,15 +27,15 @@ global M_FT_WRITE section .text ; int ft_write(int rdi, const void *rsi, size_t rdx); M_FT_WRITE: - mov rax, M_SYSCALL_WRITE - syscall + mov rax, M_SYSCALL_WRITE + syscall %ifdef __LINUX__ cmp rax, 0 jl FT_WRITE_ERROR %else jc FT_WRITE_ERROR %endif - ret + ret FT_WRITE_ERROR: %ifdef __LINUX__ neg rax @@ -43,5 +43,5 @@ FT_WRITE_ERROR: push rax call M_ERRNO_LOCATION wrt ..plt pop qword [rax] - mov rax, -1 - ret + mov rax, -1 + ret |
