From 0e73aff73d301aac59dd604f6137969c3e2403ce Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 6 Feb 2020 00:29:09 +0100 Subject: read write protection, ft_list_size, ft_list_push_front finished --- Makefile | 4 ++-- README.md | 18 ++++++++++++++++++ ft_list_push_front.s | 23 +++++++++++++++++++---- ft_read.s | 12 ++++++++++++ ft_write.s | 14 +++++++++++++- 5 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 README.md diff --git a/Makefile b/Makefile index f1aa92d..9f45ddc 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: cacharle +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2019/11/22 02:56:22 by cacharle #+# #+# # -# Updated: 2019/11/25 04:46:29 by cacharle ### ########.fr # +# Updated: 2020/02/05 21:15:19 by cacharle ### ########.fr # # # # **************************************************************************** # @@ -22,7 +22,7 @@ NASMFLAGS = -f macho64 NAME = libasm.a ASMSRC = ft_strlen.s ft_strcpy.s ft_strcmp.s ft_write.s ft_read.s \ ft_strdup.s ft_atoi_base.s ft_list_push_front.s \ - ft_list_size.s ft_list_sort.s ft_list_remove_if.s + ft_list_size.s #ft_list_sort.s ft_list_remove_if.s ASMOBJ = $(ASMSRC:.s=.o) all: $(NAME) diff --git a/README.md b/README.md new file mode 100644 index 0000000..c7af14f --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# libasm + +libasm project of school 42. + +## Test + +Clone the test [repository](https://github.com/HappyTramp/libasm_test) next to this project folder. + +``` +. +|- libasm +|- libasm_test +``` + +``` +cd libasm_test +make run +``` diff --git a/ft_list_push_front.s b/ft_list_push_front.s index 686ee10..6a95909 100644 --- a/ft_list_push_front.s +++ b/ft_list_push_front.s @@ -10,13 +10,28 @@ ; ; ; **************************************************************************** ; +extern _malloc + global _ft_list_push_front ; void ft_list_push_front(t_list **begin_list, void *data); _ft_list_push_front: - cmp rdi, 0 - je FT_LIST_PUSH_FRONT_END - mov [rsi + 8], [rdi] - mov [rdi], rsi + cmp rdi, 0 + je FT_LIST_PUSH_FRONT_END + + push rdi + push rsi + xor rdi, rdi + mov edi, 16 + call _malloc + 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 FT_LIST_PUSH_FRONT_END: ret diff --git a/ft_read.s b/ft_read.s index 00718e8..564f2fc 100644 --- a/ft_read.s +++ b/ft_read.s @@ -14,6 +14,18 @@ global _ft_read ; int ft_read(int, void*, size_t); _ft_read: + cmp rdx, 0 + je FT_READ_NO_SIZE + cmp rdi, 0 + jl FT_READ_ERROR + cmp rsi, 0 + je FT_READ_ERROR mov rax, 0x2000003 syscall ret +FT_READ_ERROR: + mov rax, -1 + ret +FT_READ_NO_SIZE: + xor rax, rax + ret diff --git a/ft_write.s b/ft_write.s index c558ab6..13f4c6a 100644 --- a/ft_write.s +++ b/ft_write.s @@ -12,8 +12,20 @@ global _ft_write -; int ft_write(int, const void*, size_t); +; int ft_write(int rdi, const void *rsi, size_t rdx); _ft_write: + cmp rdx, 0 + je FT_WRITE_NO_SIZE + cmp rdi, 0 + jl FT_WRITE_ERROR + cmp rsi, 0 + je FT_WRITE_ERROR mov rax, 0x2000004 syscall ret +FT_WRITE_ERROR: + mov rax, -1 + ret +FT_WRITE_NO_SIZE: + mov rax, 0 + ret -- cgit