feat: ft_list_push_front

This commit is contained in:
lohhiiccc 2026-06-18 17:30:14 +02:00
parent e9bae396ca
commit 0e0434fcbc
3 changed files with 64 additions and 1 deletions

View file

@ -19,7 +19,8 @@ SRCS=$(SRC_DIR)/ft_strlen.asm \
$(SRC_DIR)/ft_memcpy.asm \ $(SRC_DIR)/ft_memcpy.asm \
$(SRC_DIR)/ft_isspace.asm \ $(SRC_DIR)/ft_isspace.asm \
$(SRC_DIR)/ft_bzero.asm \ $(SRC_DIR)/ft_bzero.asm \
$(SRC_DIR)/ft_atoibase.asm $(SRC_DIR)/ft_atoibase.asm \
$(SRC_DIR)/ft_list_push_front.asm \
OBJS=$(patsubst $(SRC_DIR)/%.asm,$(OBJ_DIR)/%.o,$(SRCS)) OBJS=$(patsubst $(SRC_DIR)/%.asm,$(OBJ_DIR)/%.o,$(SRCS))
DEPS=$(OBJS:.o=.d) DEPS=$(OBJS:.o=.d)

View file

@ -0,0 +1,55 @@
global ft_list_push_front
extern malloc
extern ft_memcpy
%define NODE_SIZE 16
section .text
;#include <stdlib.h>
;#include "ft_list.h"
;
;void ft_list_push_front(t_list **begin_list, void *data)
;{
; t_list *new_elem;
;
; if (!begin_list)
; return ;
; new_elem = (t_list *)malloc(sizeof(t_list));
; if (!new_elem)
; return ;
; new_elem->data = data;
; new_elem->next = *begin_list;
; *begin_list = new_elem;
;}
; rdi: t_list **begin_list
; rsi: void *data
ft_list_push_front:
; if NULL == begin_list return
test rdi, rdi
je .done
push rdi
push rsi
; malloc 16
mov rdi, NODE_SIZE
call malloc wrt ..plt
pop rsi
pop rdi
; if NULL == rax return
test rax, rax
je .done
; new_elem->data = data;
; new_elem->next = *begin_list;
; *begin_list = new_elem;
mov [rax], rsi
mov rdx, [rdi]
mov [rax + 8], rdx
mov [rdi], rax
.done:
ret

View file

@ -6,6 +6,12 @@
extern "C" { extern "C" {
#endif #endif
typedef struct s_list
{
void *data;
struct s_list *next;
} t_list;
size_t ft_strlen(const char *str); size_t ft_strlen(const char *str);
char *ft_strcpy(char *dest, const char *src); char *ft_strcpy(char *dest, const char *src);
int ft_strcmp (const char *p1, const char *p2); int ft_strcmp (const char *p1, const char *p2);
@ -15,6 +21,7 @@ ssize_t ft_read(int fd, void *buf, size_t count);
void *ft_memcpy(void *dest, const void *src, size_t n); void *ft_memcpy(void *dest, const void *src, size_t n);
void ft_bzero(void *s, size_t n); void ft_bzero(void *s, size_t n);
int ft_atoibase(char *str, char *base); int ft_atoibase(char *str, char *base);
void ft_list_push_front(t_list **begin_list, void *data);
#ifdef __cplusplus #ifdef __cplusplus
} }