From 589addcb91664f8963f52dac37e2f1ba1eece4bc Mon Sep 17 00:00:00 2001 From: tomoron Date: Thu, 27 Mar 2025 17:11:46 +0100 Subject: [PATCH] start project --- Makefile | 38 ++++++++++++++++++++++++++++++++++++++ ft_strlen.s | 24 ++++++++++++++++++++++++ srcs/ft_read.s | 0 srcs/ft_strcmp.s | 0 srcs/ft_strcpy.s | 0 srcs/ft_strdup.s | 0 srcs/ft_strlen.s | 24 ++++++++++++++++++++++++ srcs/ft_write.s | 0 tests.c | 27 +++++++++++++++++++++++++++ 9 files changed, 113 insertions(+) create mode 100644 Makefile create mode 100644 ft_strlen.s create mode 100644 srcs/ft_read.s create mode 100644 srcs/ft_strcmp.s create mode 100644 srcs/ft_strcpy.s create mode 100644 srcs/ft_strdup.s create mode 100644 srcs/ft_strlen.s create mode 100644 srcs/ft_write.s create mode 100644 tests.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5ff9782 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ +NAME ?= libasm.a + +SRCS_DIR = srcs +OBJS_DIR = .objs + +SRCS_NAMES = ft_strlen.s\ + ft_strcpy.s\ + ft_strcmp.s\ + ft_write.s\ + ft_read.s\ + ft_strdup.s + +SRCS = $(addprefix $(SRCS_DIR)/, $(SRCS_NAMES)) + +OBJS = $(addprefix $(OBJS_DIR)/, $(SRCS_NAMES:.s=.o)) + +all: $(NAME) + +test: test.c $(NAME) + gcc -o test.o -c test.c + ld tests.c -L. -lasm + +$(NAME): $(OBJS_DIR) $(OBJS) + ar rcs $@ $(OBJS) + +$(OBJS_DIR): + mkdir -p $(OBJS_DIR) + +$(OBJS_DIR)/%.o: $(SRCS_DIR)/%.s + nasm -o $@ $< + +clean: + rm -rf $(OBJS_DIR) + +fclean: clean + rm -f $(NAME) test + +.PHONY: fclean clean all diff --git a/ft_strlen.s b/ft_strlen.s new file mode 100644 index 0000000..df5fb91 --- /dev/null +++ b/ft_strlen.s @@ -0,0 +1,24 @@ +section .text + global ft_strlen + +ft_strlen: + test rdi, rdi + je err + mov rsi, rdi + jmp loop_start + +increase_pointer: + lea rsi, [rsi + 1] + +loop_start: + mov al, [rsi] + test al, al + jnz increase_pointer +end: + sub rsi, rdi + mov rax, rsi + ret + +err: + xor rax, rax + ret diff --git a/srcs/ft_read.s b/srcs/ft_read.s new file mode 100644 index 0000000..e69de29 diff --git a/srcs/ft_strcmp.s b/srcs/ft_strcmp.s new file mode 100644 index 0000000..e69de29 diff --git a/srcs/ft_strcpy.s b/srcs/ft_strcpy.s new file mode 100644 index 0000000..e69de29 diff --git a/srcs/ft_strdup.s b/srcs/ft_strdup.s new file mode 100644 index 0000000..e69de29 diff --git a/srcs/ft_strlen.s b/srcs/ft_strlen.s new file mode 100644 index 0000000..df5fb91 --- /dev/null +++ b/srcs/ft_strlen.s @@ -0,0 +1,24 @@ +section .text + global ft_strlen + +ft_strlen: + test rdi, rdi + je err + mov rsi, rdi + jmp loop_start + +increase_pointer: + lea rsi, [rsi + 1] + +loop_start: + mov al, [rsi] + test al, al + jnz increase_pointer +end: + sub rsi, rdi + mov rax, rsi + ret + +err: + xor rax, rax + ret diff --git a/srcs/ft_write.s b/srcs/ft_write.s new file mode 100644 index 0000000..e69de29 diff --git a/tests.c b/tests.c new file mode 100644 index 0000000..c130ad0 --- /dev/null +++ b/tests.c @@ -0,0 +1,27 @@ +#include +#include + +size_t ft_strlen(char *str); + +void test_strlen(void) +{ + int nb_tests; + int passed; + + nb_tests = 3; + passed = 0; + + if(ft_strlen("hello") == 5) + passed++; + if(ft_strlen("") == 0) + passed++; + if(ft_strlen(NULL) == 0) + passed++; + + +} + +int main(void) +{ + test_strlen(); +}