Skip to content

Commit 202adcc

Browse files
committed
Enhance
1 parent f862f03 commit 202adcc

File tree

6 files changed

+115
-2
lines changed

6 files changed

+115
-2
lines changed

Makefile

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
SRCS = ft_strlen.s ft_strcpy.s
1+
SRCS = ft_strlen.s\
2+
ft_strcpy.s\
3+
ft_strcmp.s\
4+
ft_write.s\
5+
ft_read.s
6+
27
SRCC = main.c
38
NAME = libasm.a
49

ft_read.s

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
global _ft_read
2+
3+
section .text
4+
5+
_ft_read:
6+
mov rax, 0x02000003 ;4th instruct on eax
7+
syscall
8+
jb .err
9+
ret
10+
11+
.err:
12+
mov rax, -1
13+
ret

ft_strcmp.s

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
global _ft_strcmp
2+
3+
section .text
4+
5+
_ft_strcmp: ;rdi rsi
6+
mov rax, 0
7+
8+
.loop:
9+
mov bl, [rsi]
10+
mov bh, [rdi]
11+
cmp bl, bh
12+
jg .sup
13+
jl .inf
14+
cmp bl, 0
15+
je .end
16+
cmp bh, 0
17+
je .end
18+
inc rdi
19+
inc rsi
20+
jmp .loop
21+
22+
.sup:
23+
mov rax, -1
24+
ret
25+
26+
.inf:
27+
mov rax, 1
28+
ret
29+
30+
.end:
31+
ret

ft_strdup.s

Whitespace-only changes.

ft_write.s

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
global _ft_write
2+
3+
section .text
4+
5+
_ft_write:
6+
mov rax, 0x02000004 ;4th instruct on eax
7+
syscall
8+
jb .err
9+
ret
10+
11+
.err:
12+
mov rax, -1
13+
ret

main.c

+52-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22
#include <string.h>
33
#include <stdlib.h>
44
#include <unistd.h>
5+
#include <fcntl.h>
56

67
int ft_strlen(const char *str);
78
char *ft_strcpy(char *dest, char *src);
9+
int ft_strcmp(char *a, char *b);
10+
int ft_write(int fd, char *a, int len);
11+
int ft_read(int fd, char *a, int len);
812

913
void
1014
test_strlen(char *str)
@@ -22,6 +26,42 @@ void
2226
printf("\n%s = ft_strcpy(dest[20], \"%s\")\n", dest, str);
2327
}
2428

29+
void
30+
test_strcmp(char *a, char *b)
31+
{
32+
printf("\n%d = ft_strcmp(\"%s\", \"%s\")\n", ft_strcmp(a, b), a, b);
33+
printf("%d = strcmp(\"%s\", \"%s\")\n", strcmp(a, b), a, b);
34+
}
35+
36+
void
37+
test_write(int fd, char *str, int len)
38+
{
39+
printf("\nft_write(%d, '%s', %d) ==> '", fd, str, len);
40+
fflush(stdout);
41+
int ret = ft_write(fd, str, len);
42+
printf("' (%d)\n", ret);
43+
printf("write(%d, '%s', %d) ==> '", fd, str, len);
44+
fflush(stdout);
45+
int ret2 = (int)write(fd, str, len);
46+
printf("' (%d)\n", ret2);
47+
}
48+
49+
void
50+
test_read(char *path, int buffsize)
51+
{
52+
int fd = open(path, O_RDONLY);
53+
int fd2 = open(path, O_RDONLY);
54+
char buffer[buffsize + 1];
55+
char buffer2[buffsize + 1];
56+
// char buffer2[buffsize];
57+
memset(buffer, 0, buffsize + 1);
58+
memset(buffer2, 0, buffsize + 1);
59+
int ret = (int)read(fd, buffer, buffsize);
60+
int ret2 = ft_read(fd2, buffer2, buffsize);
61+
printf("\nread(%d, [BUFFER], %d) ==> (%d) '%s'", fd, buffsize, ret, buffer);
62+
printf("\nft_read(%d, [BUFFER], %d) ==> (%d) '%s'\n", fd, buffsize, ret2, buffer2);
63+
}
64+
2565

2666
int
2767
main(int ac, char **av)
@@ -31,6 +71,17 @@ int
3171
test_strlen("Bonjour");
3272
test_strlen("");
3373
test_strlen("a");
34-
3574
test_strcpy("Bonjour");
75+
test_strcmp("Abc", "Abc");
76+
test_strcmp("Abc", "Abd");
77+
test_strcmp("Abc", "Abce");
78+
test_strcmp("aaa", "aaa");
79+
test_strcmp("c", "b");
80+
test_write(1, "Bonjour", strlen("Bonjour"));
81+
test_write(1, "", 1);
82+
test_write(1, NULL, 1);
83+
test_write(-1, "yo", 2);
84+
85+
test_read("ft_read.s", 10);
86+
test_read("", 10);
3687
}

0 commit comments

Comments
 (0)