Skip to content

Commit e712684

Browse files
committed
use printf
1 parent 4eca3f7 commit e712684

File tree

4 files changed

+30
-75
lines changed

4 files changed

+30
-75
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: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ get_memory:
5151
pop_all
5252
return
5353

54+
flush:
55+
enter
56+
push_all
57+
xor %eax, %eax
58+
mov stdout(%rip), %rdi
59+
call fflush
60+
pop_all
61+
return
62+
5463
exit:
5564
enter
5665
push_all
@@ -145,7 +154,7 @@ close:
145154
enter
146155
push_all
147156
mov $CLOSE, %rax
148-
lea fh, %rdi
157+
mov fh, %rdi
149158
syscall
150159
pop_all
151160
return
@@ -154,11 +163,11 @@ munmap:
154163
enter
155164
push_all
156165
mov $MUNMAP, %rax
157-
lea inbuf, %rdi
166+
mov inbuf, %rdi
158167
mov file_size(%rip), %rsi
159168
syscall
160169
mov $MUNMAP, %rax
161-
lea out, %rdi
170+
mov out, %rdi
162171
mov file_size(%rip), %rsi
163172
syscall
164173
pop_all
@@ -192,14 +201,12 @@ print_lines_loop:
192201
test %r9, %r9
193202
jz print_lines_write_line
194203
write linebuf(%rip), $3
195-
writeln
196204
print_lines_write_line:
197205
mov linebuf(%rip), %r10
198206
add $2, %r10 # skip two chars from linebuf
199207
movb $0x9, (%r10) # replace third char with a tab
200208
sub $2, %rax
201209
write %r10, %rax
202-
writeln
203210
inc %rbx
204211
cmp file_size(%rip), %rbx
205212
jl print_lines_loop
@@ -222,6 +229,7 @@ main:
222229
mov %rax, linebuf(%rip)
223230
call init_file
224231
call print_lines
232+
call flush
225233

226234
call close
227235
call munmap

print_int/print_int.s

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

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

@@ -133,11 +136,11 @@ write_string:
133136
enter
134137
push_all
135138
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
139+
lea format(%rip), %rdi
140+
mov 24(%rbp), %rdx # param: address
141+
mov 16(%rbp), %rsi # param: size
142+
mov $0, %rax # number of vector arguments
143+
call printf
141144
pop %rax
142145
pop_all
143146
return

0 commit comments

Comments
 (0)