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
|
||||
AS := nasm
|
||||
ASFLAGS := -g -Wall
|
||||
ASFLAGS := -g -f elf64 -I src/
|
||||
CFLAGS := -g -Wall -Wextra -Wno-override-init -std=c2x
|
||||
MAIN := $(wildcard *.c)
|
||||
SRC := $(wildcard src/*.s)
|
||||
|
|
@ -27,7 +27,7 @@ $(OBJ_DIR)/%.o: %.c
|
|||
|
||||
$(OBJ_DIR)/%.o: %.s
|
||||
@mkdir -p $(@D)
|
||||
$(AS) $(ASFLAGS) -f elf64 $< -o $@
|
||||
$(AS) $(ASFLAGS) $< -o $@
|
||||
|
||||
clean:
|
||||
@rm -f $(NAME)
|
||||
|
|
|
|||
153
main.c
153
main.c
|
|
@ -1,7 +1,154 @@
|
|||
#include "main.h"
|
||||
|
||||
int main(void) {
|
||||
size_t size = ft_strlen("test\n");
|
||||
printf("size: %ld\n", size);
|
||||
void test_strlen();
|
||||
void test_strcpy();
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
// DONE
|
||||
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
|
||||
|
||||
%define STDOUT 1
|
||||
%define SYS_WRITE 1
|
||||
%define SYS_EXIT 60
|
||||
|
||||
section .text
|
||||
global ft_strlen
|
||||
ft_strlen:
|
||||
|
|
@ -13,11 +9,12 @@ section .text
|
|||
|
||||
; code
|
||||
mov rbx, rdi
|
||||
mov rsi, -1
|
||||
mov rsi, 0
|
||||
|
||||
loop:
|
||||
inc rsi
|
||||
mov al, [rbx + rsi]
|
||||
inc rsi
|
||||
|
||||
cmp al, 0
|
||||
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