aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--README.md18
-rw-r--r--ft_list_push_front.s23
-rw-r--r--ft_read.s12
-rw-r--r--ft_write.s14
5 files changed, 64 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index f1aa92d..9f45ddc 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@
# By: cacharle <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# 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