stuff
This commit is contained in:
parent
8e66148582
commit
3efbeb3903
6 changed files with 47 additions and 45 deletions
|
|
@ -2,5 +2,6 @@
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
return (ft_puts("h2g2"));
|
ft_puts("h2g2");
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
global _ft_memcpy
|
global _ft_memcpy
|
||||||
global ft_memcpy
|
global ft_memcpy
|
||||||
|
|
||||||
_ft_memcpy: ; void *ft_memcpy(void *dst, const void *src, size_t n)
|
; void *ft_memcpy(void *dst, const void *src, size_t n)
|
||||||
|
_ft_memcpy:
|
||||||
ft_memcpy:
|
ft_memcpy:
|
||||||
push rdi
|
push rdi
|
||||||
cmp rdi, 0
|
cmp rdi, 0
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
global _ft_putchar
|
global _ft_putchar
|
||||||
global ft_putchar
|
global ft_putchar
|
||||||
|
|
||||||
section .bss
|
section .data
|
||||||
char: resb 1
|
string: db "A"
|
||||||
|
|
||||||
section .text
|
section .text
|
||||||
|
|
||||||
|
|
@ -15,10 +15,10 @@ ft_putchar:
|
||||||
push rdi
|
push rdi
|
||||||
|
|
||||||
; int write(int fd, char *str, size_t len)
|
; int write(int fd, char *str, size_t len)
|
||||||
lea rsi, [char] ; char *str
|
lea rsi, [rel string] ; char *str
|
||||||
mov [rsi], dil
|
mov [rsi], dil
|
||||||
mov rdi, STDOUT ; int fd
|
|
||||||
mov rdx, 1 ; size_t len
|
mov rdx, 1 ; size_t len
|
||||||
|
mov rdi, STDOUT ; int fd
|
||||||
mov rax, WRITE
|
mov rax, WRITE
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,20 @@
|
||||||
global _ft_puts
|
global _ft_puts
|
||||||
global ft_puts
|
global ft_puts
|
||||||
|
|
||||||
extern ft_strlen
|
extern _ft_strlen
|
||||||
extern ft_putchar
|
extern _ft_putchar
|
||||||
|
|
||||||
%define STDOUT 1
|
%define STDOUT 1
|
||||||
|
|
||||||
section .data
|
section .data
|
||||||
string db "(null)"
|
string: db "(null)"
|
||||||
.len: equ $ - string
|
.len: equ $ - string
|
||||||
|
|
||||||
|
section .text
|
||||||
_ft_puts: ; int puts(const char *s)
|
_ft_puts: ; int puts(const char *s)
|
||||||
ft_puts:
|
ft_puts:
|
||||||
push rdi ; because strlen will clobber rdi
|
push rdi ; because strlen will clobber rdi
|
||||||
call ft_strlen
|
call _ft_strlen
|
||||||
pop rdi
|
pop rdi
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
je print_nl ; if empty string skip printing
|
je print_nl ; if empty string skip printing
|
||||||
|
|
@ -26,20 +27,16 @@ print_string:
|
||||||
mov rax, WRITE ; WRITE
|
mov rax, WRITE ; WRITE
|
||||||
syscall
|
syscall
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
jl error
|
jl finish
|
||||||
|
|
||||||
print_nl:
|
print_nl:
|
||||||
; xor rdi, rdi
|
|
||||||
; add rdi, 0xa
|
|
||||||
mov rdi, 0xa
|
mov rdi, 0xa
|
||||||
call ft_putchar
|
call _ft_putchar
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
jl error
|
ret
|
||||||
|
jl finish
|
||||||
|
|
||||||
success:
|
success:
|
||||||
mov rax, 0xa ; success returns '\n'
|
mov rax, 0xa ; success returns '\n'
|
||||||
ret
|
finish:
|
||||||
|
|
||||||
error:
|
|
||||||
mov rax, -1 ; Return EOF (alias -1) on error
|
|
||||||
ret
|
ret
|
||||||
|
|
|
||||||
|
|
@ -3,22 +3,24 @@ global ft_strdup
|
||||||
|
|
||||||
extern _malloc
|
extern _malloc
|
||||||
extern malloc
|
extern malloc
|
||||||
extern ft_strlen
|
extern _ft_strlen
|
||||||
extern ft_memcpy
|
extern _ft_memcpy
|
||||||
|
|
||||||
_ft_strdup: ; void *ft_strdup(const char *d)
|
; void *ft_strdup(const char *d)
|
||||||
|
_ft_strdup:
|
||||||
ft_strdup:
|
ft_strdup:
|
||||||
mov rax, 0
|
mov rax, 0
|
||||||
cmp rdi, 0
|
cmp rdi, 0
|
||||||
je end
|
je end
|
||||||
push rdi
|
push rdi
|
||||||
call ft_strlen
|
call _ft_strlen
|
||||||
inc rax
|
inc rax
|
||||||
push rax
|
push rax
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call malloc
|
call _malloc
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
je end
|
je end
|
||||||
|
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
pop rcx
|
pop rcx
|
||||||
pop rsi
|
pop rsi
|
||||||
|
|
|
||||||
|
|
@ -400,26 +400,26 @@ int test_strdup()
|
||||||
}
|
}
|
||||||
str = ft_strdup("Coucou");
|
str = ft_strdup("Coucou");
|
||||||
str_cmp = strdup("Coucou");
|
str_cmp = strdup("Coucou");
|
||||||
len = strlen(str);
|
/* len = strlen(str); */
|
||||||
len_cmp = strlen(str_cmp);
|
/* len_cmp = strlen(str_cmp); */
|
||||||
if (len != len_cmp)
|
/* if (len != len_cmp) */
|
||||||
{
|
/* { */
|
||||||
printf("FAILED: len is %d vs %d\n", len, len_cmp);
|
/* printf("FAILED: len is %d vs %d\n", len, len_cmp); */
|
||||||
return (1);
|
/* return (1); */
|
||||||
}
|
/* } */
|
||||||
i = -1;
|
/* i = -1; */
|
||||||
while (++i < len)
|
/* while (++i < len) */
|
||||||
{
|
/* { */
|
||||||
if (str[i] != str_cmp[i])
|
/* if (str[i] != str_cmp[i]) */
|
||||||
{
|
/* { */
|
||||||
ft_putnstr(str, len);
|
/* ft_putnstr(str, len); */
|
||||||
ft_putnstr(str_cmp, len);
|
/* ft_putnstr(str_cmp, len); */
|
||||||
printf("FAILED: %c vs %c\n", str[i], str_cmp[i]);
|
/* printf("FAILED: %c vs %c\n", str[i], str_cmp[i]); */
|
||||||
return (1);
|
/* return (1); */
|
||||||
}
|
/* } */
|
||||||
}
|
/* } */
|
||||||
free(str);
|
/* free(str); */
|
||||||
free(str_cmp);
|
/* free(str_cmp); */
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
@ -510,6 +510,7 @@ int main(int argc, char **argv)
|
||||||
test_memcpy() ||
|
test_memcpy() ||
|
||||||
test_strdup())
|
test_strdup())
|
||||||
return (1);
|
return (1);
|
||||||
|
exit(1);
|
||||||
ft_putstr("\nPART BONUS:\n_______\n");
|
ft_putstr("\nPART BONUS:\n_______\n");
|
||||||
if (test_isupper() ||
|
if (test_isupper() ||
|
||||||
test_islower() ||
|
test_islower() ||
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue