Skip to content

Commit f0ce47f

Browse files
committed
use printf
1 parent 4eca3f7 commit f0ce47f

File tree

8 files changed

+40
-87
lines changed

8 files changed

+40
-87
lines changed

draft/draft.c

Lines changed: 8 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -7,69 +7,14 @@
77
#include <sys/syscall.h>
88
#include <sys/types.h>
99

10-
char* in;
11-
char* out;
12-
13-
int get_zero() {
14-
int result = 128;
15-
while(true) {
16-
result = result / 2;
17-
if (result == 16) {
18-
return 0;
19-
}
20-
}
21-
return 1;
22-
}
23-
24-
int get_one() {
25-
int result = 128;
26-
while(true) {
27-
result = result / 2;
28-
if (result == 8) {
29-
return 1;
30-
}
31-
}
32-
return 2;
33-
}
34-
35-
int get_two() {
36-
int result = 128;
37-
while(true) {
38-
result = result / 2;
39-
if (result == 4) {
40-
return 2;
41-
}
42-
}
43-
return 1;
44-
}
45-
46-
int get_three() {
47-
int result = 128;
48-
while(true) {
49-
result = result / 2;
50-
if (result == 32) {
51-
return 3;
52-
}
53-
}
54-
return 2;
55-
}
56-
5710
int main(int argc, char *argv[])
5811
{
59-
in = malloc(4);
60-
out = malloc(4);
61-
in[0] = '0';
62-
in[1] = 'x';
63-
in[2] = 'a';
64-
in[3] = '\n';
65-
int zero = get_zero();
66-
int one = get_one();
67-
int two = get_two();
68-
int three = get_three();
69-
out[zero] = in[zero];
70-
out[one] = in[one];
71-
out[two] = in[two];
72-
out[three] = in[three];
73-
syscall(__NR_write, 1, out, 4);
74-
return 0;
12+
char message[3];
13+
message[0] = 0x41;
14+
message[1] = 0x55;
15+
message[2] = 0x41;
16+
printf("%.*s", 3, message);
17+
fflush(stdout);
18+
syscall(__NR_exit, 0);
19+
//return 0;
7520
}

group3/Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
default:
2-
$(CC) group3.s -c -g
3-
$(LD) -o group3 group3.o -e main
2+
$(CC) group3.s -g -o group3 -e main
43

54
clean:
65
@rm -f group3.o group3

group3/group3.s

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ close:
145145
enter
146146
push_all
147147
mov $CLOSE, %rax
148-
lea fh, %rdi
148+
mov fh, %rdi
149149
syscall
150150
pop_all
151151
return
@@ -154,11 +154,11 @@ munmap:
154154
enter
155155
push_all
156156
mov $MUNMAP, %rax
157-
lea inbuf, %rdi
157+
mov inbuf, %rdi
158158
mov file_size(%rip), %rsi
159159
syscall
160160
mov $MUNMAP, %rax
161-
lea out, %rdi
161+
mov out, %rdi
162162
mov file_size(%rip), %rsi
163163
syscall
164164
pop_all
@@ -192,14 +192,12 @@ print_lines_loop:
192192
test %r9, %r9
193193
jz print_lines_write_line
194194
write linebuf(%rip), $3
195-
writeln
196195
print_lines_write_line:
197196
mov linebuf(%rip), %r10
198197
add $2, %r10 # skip two chars from linebuf
199198
movb $0x9, (%r10) # replace third char with a tab
200199
sub $2, %rax
201200
write %r10, %rax
202-
writeln
203201
inc %rbx
204202
cmp file_size(%rip), %rbx
205203
jl print_lines_loop
@@ -222,6 +220,7 @@ main:
222220
mov %rax, linebuf(%rip)
223221
call init_file
224222
call print_lines
223+
call flush
225224

226225
call close
227226
call munmap

print_int/Makefile

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
print_int:
2-
$(CC) main.s -c -o print_int.o
3-
$(LD) -e main -o print_int print_int.o
2+
$(CC) main.s -o print_int
43

54
check: print_int
65
./print_int | md5sum | grep -q ^3cca2fa && printf "\033[1;32m[OK]\033[0m\n"
76

87
write:
9-
$(CC) write.s -c -o write.o
10-
$(LD) -e main -o write write.o
8+
$(CC) write.s -o write
119

1210
check_write: write
1311
./write | grep -q '^ABC$$' && printf "\033[1;32m[OK]\033[0m\n"
1412

1513
strcmp:
16-
$(CC) strcmp.s -c -o strcmp.o
17-
$(LD) -e main -o strcmp strcmp.o
14+
$(CC) strcmp.s -o strcmp
1815

1916
check_strcmp: strcmp
2017
./strcmp | md5sum | grep -q ^00350de && printf "\033[1;32m[OK]\033[0m\n"

print_int/main.s

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ main:
4040
log %rdx
4141
log %rsi
4242

43+
call flush
44+
call exit
45+
4346
exit:
4447
movq $EXIT, %rax
4548
movq $0, %rdi

print_int/print_int.s

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,21 @@
8686
pop %rsi
8787
.endm
8888

89+
.data
90+
format: .asciz "%.*s\n"
91+
8992
.text
9093
.globl main
9194

95+
flush:
96+
enter
97+
push_all
98+
xor %eax, %eax
99+
mov stdout(%rip), %rdi
100+
call fflush
101+
pop_all
102+
return
103+
92104
write_char_debug:
93105
enter
94106
push_all
@@ -133,11 +145,11 @@ write_string:
133145
enter
134146
push_all
135147
push %rax
136-
mov 24(%rbp), %rsi # param: address
137-
mov 16(%rbp), %rdx # param: size
138-
mov $WRITE, %rax
139-
mov $STDOUT, %rdi
140-
syscall
148+
lea format(%rip), %rdi
149+
mov 24(%rbp), %rdx # param: address
150+
mov 16(%rbp), %rsi # param: size
151+
mov $0, %rax # number of vector arguments
152+
call printf
141153
pop %rax
142154
pop_all
143155
return
@@ -179,9 +191,6 @@ print_int_pop_loop:
179191
test %rcx, %rcx
180192
jnz print_int_pop_loop
181193

182-
movb $0xa, -48(%rbp, %rdx)
183-
inc %rdx
184-
185194
lea -48(%rbp), %rsi
186195
write %rsi, %rdx
187196

print_int/strcmp.s

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ main:
3333
mov $2, %rax
3434
strcmp %rdi, %rsi, $3
3535
log %rax
36+
call flush
3637
call exit
3738

3839
exit:

print_int/write.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ main:
1212
movb $0x41, -24(%rbp)
1313
movb $0x42, -23(%rbp)
1414
movb $0x43, -22(%rbp)
15-
movb $0xa, -21(%rbp)
1615
mov %rbp, %rsi
1716
sub $24, %rsi
1817
mov %rsi, %rax
1918
sub $24, %rax
20-
memcpy %rsi, %rax, $4
21-
write %rax, $4
19+
memcpy %rsi, %rax, $3
20+
write %rax, $3
21+
call flush
2222
call exit
2323

2424
exit:

0 commit comments

Comments
 (0)