diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c11a989 --- /dev/null +++ b/Makefile @@ -0,0 +1,45 @@ +#******************************************************************************# +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: vvaas +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/03/15 14:16:21 by vvaas #+# #+# # +# Updated: 2024/03/15 16:52:30 by vvaas ### ########.fr # +# # +#******************************************************************************# + +NAME = libasm.a + +SRCS = ft_strlen.s \ + ft_write.s \ + ft_read.s \ + ft_strcpy.s \ + ft_strcmp.s \ + +OBJS = ${SRCS:.s=.o} + +CC = nasm + +FLAGS = -f elf64 + +AR = ar + +ARFLAG = rc + +.s.o : + ${CC} $< -o ${<:.s=.o} ${FLAGS} + +all: ${NAME} + +${NAME}: ${OBJS} + ${AR} ${ARFLAGS} ${NAME} ${OBJS} + +clean: + rm -f ${OBJS} + +fclean: clean + rm -f ${NAME} + +re: fclean all diff --git a/ft_read.s b/ft_read.s new file mode 100644 index 0000000..6aed3c1 --- /dev/null +++ b/ft_read.s @@ -0,0 +1,17 @@ +global _read +extern __errno_location + +_read: + mov eax, 0x11 + syscall + test rax, rax + js .error + ret + +.error: + mov ebx, eax + call __errno_location wrt ..plt + neg ebx + mov dword [rax], ebx + mov rax, -1 + ret \ No newline at end of file diff --git a/ft_strcmp.s b/ft_strcmp.s new file mode 100644 index 0000000..bfc9dfa --- /dev/null +++ b/ft_strcmp.s @@ -0,0 +1,16 @@ +extern _strcmp + + +_strcmp: + xor rax, rax + xor rbx, rbx +.count: + mov rax, [rdi + rbx] + sub rax, [rsi + rbx] + cmp rax, 0 + jne .end + inc rbx + jmp .count + +.end: + ret diff --git a/ft_strcpy.s b/ft_strcpy.s new file mode 100644 index 0000000..82dfb2f --- /dev/null +++ b/ft_strcpy.s @@ -0,0 +1,16 @@ +extern _strcpy + +_strcpy: + xor rbx, rbx + +.cpy: + cmp dword [rsi + rbx], 0 + je .end + mov rax, [rsi + rbx] + mov [rdi + rbx], rax + inc rbx + jmp .cpy + +.end: + mov rax, rdi + ret diff --git a/ft_write.s b/ft_write.s index 69f63d4..50a29db 100644 --- a/ft_write.s +++ b/ft_write.s @@ -1,10 +1,17 @@ global _write +extern __errno_location _write: mov eax, 0x1 syscall - jc .error + test rax, rax + js .error ret + .error: + mov ebx, eax + call __errno_location wrt ..plt + neg ebx + mov dword [rax], ebx mov rax, -1 ret \ No newline at end of file diff --git a/libasm.a b/libasm.a new file mode 100644 index 0000000..39ce1eb Binary files /dev/null and b/libasm.a differ diff --git a/mauvaisdavid.txt b/mauvaisdavid.txt new file mode 100644 index 0000000..a40e22c --- /dev/null +++ b/mauvaisdavid.txt @@ -0,0 +1 @@ +mauvaisdavid \ No newline at end of file