cmp cpy write read done; need to manage errno
This commit is contained in:
parent
d5ec65bbcd
commit
83bd3495a1
4
Makefile
4
Makefile
|
|
@ -1,6 +1,6 @@
|
||||||
CC := gcc
|
CC := gcc
|
||||||
AS := nasm
|
AS := nasm
|
||||||
ASFLAGS := -g -Wall
|
ASFLAGS := -g -f elf64 -I src/
|
||||||
CFLAGS := -g -Wall -Wextra -Wno-override-init -std=c2x
|
CFLAGS := -g -Wall -Wextra -Wno-override-init -std=c2x
|
||||||
MAIN := $(wildcard *.c)
|
MAIN := $(wildcard *.c)
|
||||||
SRC := $(wildcard src/*.s)
|
SRC := $(wildcard src/*.s)
|
||||||
|
|
@ -27,7 +27,7 @@ $(OBJ_DIR)/%.o: %.c
|
||||||
|
|
||||||
$(OBJ_DIR)/%.o: %.s
|
$(OBJ_DIR)/%.o: %.s
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
$(AS) $(ASFLAGS) -f elf64 $< -o $@
|
$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@rm -f $(NAME)
|
@rm -f $(NAME)
|
||||||
|
|
|
||||||
153
main.c
153
main.c
|
|
@ -1,7 +1,154 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
int main(void) {
|
void test_strlen();
|
||||||
size_t size = ft_strlen("test\n");
|
void test_strcpy();
|
||||||
printf("size: %ld\n", size);
|
void test_strcmp();
|
||||||
|
void test_write();
|
||||||
|
void test_read();
|
||||||
|
void test_strdup();
|
||||||
|
void test_calloc();
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void) {
|
||||||
|
|
||||||
|
test_strlen();
|
||||||
|
printf("\n");
|
||||||
|
test_strcpy();
|
||||||
|
printf("\n");
|
||||||
|
test_strcmp();
|
||||||
|
printf("\n");
|
||||||
|
test_write();
|
||||||
|
printf("\n");
|
||||||
|
test_read();
|
||||||
|
printf("\n");
|
||||||
|
test_strdup();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_strlen() {
|
||||||
|
// ft_strlen
|
||||||
|
{
|
||||||
|
char *test = "test";
|
||||||
|
printf("ft_strlen: %ld\n", ft_strlen(test));
|
||||||
|
}
|
||||||
|
// strlen
|
||||||
|
{
|
||||||
|
char *test = "test";
|
||||||
|
printf("strlen: %ld\n", strlen(test));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_strcpy() {
|
||||||
|
|
||||||
|
// ft_strcpy
|
||||||
|
{
|
||||||
|
char src[10] = "src";
|
||||||
|
char dst[10] = "dst";
|
||||||
|
char *ret;
|
||||||
|
printf ("src: %s, dest: %s\n", src, dst);
|
||||||
|
ret = ft_strcpy(dst, src);
|
||||||
|
printf ("ft_strcpy ret: %s, src: %s, dest: %s\n", ret, src, dst);
|
||||||
|
printf ("ret: %p, src: %p, dest: %p\n", ret, src, dst);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
// strcpy
|
||||||
|
{
|
||||||
|
char src[10] = "src";
|
||||||
|
char dst[10] = "dst";
|
||||||
|
char *ret;
|
||||||
|
ret = strcpy(dst, src);
|
||||||
|
printf ("strcpy ret: %s, src: %s, dest: %s\n", ret, src, dst);
|
||||||
|
printf ("ret: %p, src: %p, dest: %p\n", ret, src, dst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_strcmp() {
|
||||||
|
|
||||||
|
// ft_strcmp
|
||||||
|
{
|
||||||
|
char *s1 = "test4";
|
||||||
|
char *s2 = "test5";
|
||||||
|
printf("ft_strcmp: %d, s1: %s, s2: %s\n", ft_strcmp(s1, s2), s1 , s2);
|
||||||
|
|
||||||
|
s1 = "te";
|
||||||
|
s2 = "test";
|
||||||
|
printf("ft_strcmp: %d, s1: %s, s2: %s\n", ft_strcmp(s1, s2), s1 , s2);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
// strcmp
|
||||||
|
{
|
||||||
|
char *s1 = "test4";
|
||||||
|
char *s2 = "test5";
|
||||||
|
printf("strcmp: %d, s1: %s, s2: %s\n", strcmp(s1, s2), s1 , s2);
|
||||||
|
|
||||||
|
s1 = "te";
|
||||||
|
s2 = "test";
|
||||||
|
printf("strcmp: %d, s1: %s, s2: %s\n", strcmp(s1, s2), s1 , s2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_write() {
|
||||||
|
// ft_write
|
||||||
|
{
|
||||||
|
printf("ft_write ret: %ld\n", ft_write(1, "test ", 5));
|
||||||
|
}
|
||||||
|
|
||||||
|
// write
|
||||||
|
{
|
||||||
|
printf("write ret: %ld\n", write(1, "test ", 5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_read() {
|
||||||
|
// ft_read
|
||||||
|
{
|
||||||
|
char buf[10];
|
||||||
|
printf("ft_read ret: %ld\n", ft_read(open("main.c", O_RDONLY), buf, 10));
|
||||||
|
printf ("buf: %s\n", buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
// read
|
||||||
|
{
|
||||||
|
char buf[10];
|
||||||
|
printf("read ret: %ld\n", read(open("main.c", O_RDONLY), buf, 10));
|
||||||
|
printf ("buf: %s\n", buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_strdup() {
|
||||||
|
// ft_strdup
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// strdup
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_calloc() {
|
||||||
|
// ft_calloc
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// calloc
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
14
main.h
14
main.h
|
|
@ -1,6 +1,18 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string.h>
|
#include <sys/types.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
// DONE
|
||||||
extern size_t ft_strlen(const char *s);
|
extern size_t ft_strlen(const char *s);
|
||||||
|
extern char *ft_strcpy(char *restrict dst, const char *restrict src);
|
||||||
|
extern int ft_strcmp(const char *s1, const char *s2);
|
||||||
|
extern ssize_t ft_write(int fd, const void *buf, size_t count);
|
||||||
|
extern ssize_t ft_read(int fd, void *buf, size_t count);
|
||||||
|
|
||||||
|
// WIP
|
||||||
|
extern char *ft_strdup(const char *s);
|
||||||
|
extern void *ft_calloc(size_t n, size_t size);
|
||||||
|
|
|
||||||
12
src/defines.inc
Normal file
12
src/defines.inc
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
%ifndef DEFINES_INC
|
||||||
|
%define DEFINES_INC
|
||||||
|
|
||||||
|
%define STDOUT 1
|
||||||
|
%define SYS_WRITE 1
|
||||||
|
%define SYS_READ 0
|
||||||
|
%define SYS_EXIT 60
|
||||||
|
|
||||||
|
extern ft_strlen
|
||||||
|
extern ft_strcpy
|
||||||
|
|
||||||
|
%endif
|
||||||
12
src/ft_read.s
Normal file
12
src/ft_read.s
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
bits 64
|
||||||
|
|
||||||
|
%include "defines.inc"
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global ft_read
|
||||||
|
ft_read:
|
||||||
|
; rdi = fd, rsi = buf, rdx = count
|
||||||
|
mov rax, SYS_READ
|
||||||
|
syscall
|
||||||
|
|
||||||
|
ret
|
||||||
29
src/ft_strcmp.s
Normal file
29
src/ft_strcmp.s
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
bits 64
|
||||||
|
|
||||||
|
%include "defines.inc"
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global ft_strcmp
|
||||||
|
ft_strcmp:
|
||||||
|
|
||||||
|
mov rax, 0
|
||||||
|
loop:
|
||||||
|
mov cl, [rdi + rax]
|
||||||
|
mov dl, [rsi + rax]
|
||||||
|
|
||||||
|
inc rax
|
||||||
|
|
||||||
|
cmp cl, 0
|
||||||
|
je endloop
|
||||||
|
|
||||||
|
cmp dl, 0
|
||||||
|
je endloop
|
||||||
|
|
||||||
|
cmp cl, dl
|
||||||
|
je loop
|
||||||
|
endloop:
|
||||||
|
|
||||||
|
sub cl, dl
|
||||||
|
movsx rax, cl
|
||||||
|
ret
|
||||||
|
|
||||||
27
src/ft_strcpy.s
Normal file
27
src/ft_strcpy.s
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
bits 64
|
||||||
|
|
||||||
|
%include "defines.inc"
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global ft_strcpy
|
||||||
|
; rdi = dst, rsi = src
|
||||||
|
ft_strcpy:
|
||||||
|
push rbp
|
||||||
|
|
||||||
|
mov rax, 0 ; counter
|
||||||
|
mov rcx, 0
|
||||||
|
mov rdx, 0
|
||||||
|
|
||||||
|
loop:
|
||||||
|
mov dl, [rsi + rax]
|
||||||
|
mov [rdi + rax], dl ; replace char by char
|
||||||
|
|
||||||
|
inc rax
|
||||||
|
|
||||||
|
cmp dl, 0
|
||||||
|
jne loop
|
||||||
|
|
||||||
|
pop rbp
|
||||||
|
|
||||||
|
mov rax, rdi
|
||||||
|
ret
|
||||||
7
src/ft_strdup.s
Normal file
7
src/ft_strdup.s
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
bits 64
|
||||||
|
|
||||||
|
%include "defines.inc"
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global ft_strdup
|
||||||
|
ft_strdup:
|
||||||
|
|
@ -1,9 +1,5 @@
|
||||||
bits 64
|
bits 64
|
||||||
|
|
||||||
%define STDOUT 1
|
|
||||||
%define SYS_WRITE 1
|
|
||||||
%define SYS_EXIT 60
|
|
||||||
|
|
||||||
section .text
|
section .text
|
||||||
global ft_strlen
|
global ft_strlen
|
||||||
ft_strlen:
|
ft_strlen:
|
||||||
|
|
@ -13,11 +9,12 @@ section .text
|
||||||
|
|
||||||
; code
|
; code
|
||||||
mov rbx, rdi
|
mov rbx, rdi
|
||||||
mov rsi, -1
|
mov rsi, 0
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
inc rsi
|
|
||||||
mov al, [rbx + rsi]
|
mov al, [rbx + rsi]
|
||||||
|
inc rsi
|
||||||
|
|
||||||
cmp al, 0
|
cmp al, 0
|
||||||
jne loop
|
jne loop
|
||||||
|
|
||||||
|
|
|
||||||
12
src/ft_write.s
Normal file
12
src/ft_write.s
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
bits 64
|
||||||
|
|
||||||
|
%include "defines.inc"
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global ft_write
|
||||||
|
ft_write:
|
||||||
|
; rdi = fd, rsi = buf, rdx = count
|
||||||
|
mov rax, SYS_WRITE
|
||||||
|
syscall
|
||||||
|
|
||||||
|
ret
|
||||||
Loading…
Reference in a new issue