This commit is contained in:
Jack Halford 2017-11-20 17:41:23 +01:00
parent 8e66148582
commit 3efbeb3903
6 changed files with 47 additions and 45 deletions

View file

@ -2,5 +2,6 @@
int main(void)
{
return (ft_puts("h2g2"));
ft_puts("h2g2");
return (0);
}

View file

@ -1,7 +1,8 @@
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:
push rdi
cmp rdi, 0

View file

@ -3,8 +3,8 @@
global _ft_putchar
global ft_putchar
section .bss
char: resb 1
section .data
string: db "A"
section .text
@ -15,10 +15,10 @@ ft_putchar:
push rdi
; int write(int fd, char *str, size_t len)
lea rsi, [char] ; char *str
lea rsi, [rel string] ; char *str
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
syscall

View file

@ -1,19 +1,20 @@
global _ft_puts
global ft_puts
extern ft_strlen
extern ft_putchar
extern _ft_strlen
extern _ft_putchar
%define STDOUT 1
section .data
string db "(null)"
string: db "(null)"
.len: equ $ - string
section .text
_ft_puts: ; int puts(const char *s)
ft_puts:
push rdi ; because strlen will clobber rdi
call ft_strlen
call _ft_strlen
pop rdi
cmp rax, 0
je print_nl ; if empty string skip printing
@ -26,20 +27,16 @@ print_string:
mov rax, WRITE ; WRITE
syscall
cmp rax, 0
jl error
jl finish
print_nl:
; xor rdi, rdi
; add rdi, 0xa
mov rdi, 0xa
call ft_putchar
call _ft_putchar
cmp rax, 0
jl error
ret
jl finish
success:
mov rax, 0xa ; success returns '\n'
ret
error:
mov rax, -1 ; Return EOF (alias -1) on error
finish:
ret

View file

@ -3,22 +3,24 @@ global ft_strdup
extern _malloc
extern malloc
extern ft_strlen
extern ft_memcpy
extern _ft_strlen
extern _ft_memcpy
_ft_strdup: ; void *ft_strdup(const char *d)
; void *ft_strdup(const char *d)
_ft_strdup:
ft_strdup:
mov rax, 0
cmp rdi, 0
je end
push rdi
call ft_strlen
call _ft_strlen
inc rax
push rax
mov rdi, rax
call malloc
call _malloc
cmp rax, 0
je end
mov rdi, rax
pop rcx
pop rsi

View file

@ -400,26 +400,26 @@ int test_strdup()
}
str = ft_strdup("Coucou");
str_cmp = strdup("Coucou");
len = strlen(str);
len_cmp = strlen(str_cmp);
if (len != len_cmp)
{
printf("FAILED: len is %d vs %d\n", len, len_cmp);
return (1);
}
i = -1;
while (++i < len)
{
if (str[i] != str_cmp[i])
{
ft_putnstr(str, len);
ft_putnstr(str_cmp, len);
printf("FAILED: %c vs %c\n", str[i], str_cmp[i]);
return (1);
}
}
free(str);
free(str_cmp);
/* len = strlen(str); */
/* len_cmp = strlen(str_cmp); */
/* if (len != len_cmp) */
/* { */
/* printf("FAILED: len is %d vs %d\n", len, len_cmp); */
/* return (1); */
/* } */
/* i = -1; */
/* while (++i < len) */
/* { */
/* if (str[i] != str_cmp[i]) */
/* { */
/* ft_putnstr(str, len); */
/* ft_putnstr(str_cmp, len); */
/* printf("FAILED: %c vs %c\n", str[i], str_cmp[i]); */
/* return (1); */
/* } */
/* } */
/* free(str); */
/* free(str_cmp); */
return (0);
}
@ -510,6 +510,7 @@ int main(int argc, char **argv)
test_memcpy() ||
test_strdup())
return (1);
exit(1);
ft_putstr("\nPART BONUS:\n_______\n");
if (test_isupper() ||
test_islower() ||