Skip to content

Commit 3e794ed

Browse files
committed
group3: parametric write
1 parent d5059c9 commit 3e794ed

File tree

2 files changed

+68
-18
lines changed

2 files changed

+68
-18
lines changed

group3/group3.s

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ in:
4242
.quad 0
4343
out:
4444
.quad 0
45-
siz:
45+
line:
46+
.quad 0
47+
file_size:
4648
.quad 0
4749
st:
4850
.zero 1024
@@ -60,7 +62,7 @@ mmap:
6062
mov $MMAP, %rax
6163
mov $0, %rdi #addr
6264
mov $3, %rdx #prot r=1 w=2
63-
mov siz(%rip), %rsi #len
65+
mov file_size(%rip), %rsi #len
6466
mov $-1, %r8 #fd
6567
mov $0, %r9 #offset
6668
mov $34, %r10 #flags map_private=0x02, map_anonymous=0x20
@@ -91,22 +93,22 @@ stat:
9193
lea st, %rsi
9294
syscall
9395
mov 48(%rsi), %rbx
94-
mov %rbx, siz(%rip)
96+
mov %rbx, file_size(%rip)
9597
return
9698

97-
read:
99+
read_file:
98100
enter
99101
mov $READ, %rax
100102
mov fh(%rip), %rdi
101103
mov in(%rip), %rsi
102-
mov siz(%rip), %rdx
104+
mov file_size(%rip), %rdx
103105
syscall
104106
return
105107

106108
copy:
107109
enter
108110
mov $0, %rcx
109-
cmp %rcx, siz(%rip)
111+
cmp %rcx, file_size(%rip)
110112
je copy_done
111113
mov in(%rip), %rbx
112114
copy_loop:
@@ -115,17 +117,56 @@ copy_loop:
115117
mov (%rbx, %rcx), %rsi
116118
movb %sil, (%rdi)
117119
inc %rcx
118-
cmp %rcx, siz(%rip)
120+
cmp %rcx, file_size(%rip)
119121
jne copy_loop
120122
copy_done:
121123
return
122124

125+
read_line:
126+
enter
127+
sub $128, %rsp
128+
mov $0, %rcx
129+
cmp %rcx, file_size(%rip)
130+
je read_line_done
131+
mov in(%rip), %rbx
132+
read_line_loop:
133+
mov %rcx, %rdi
134+
add line(%rip), %rdi
135+
mov (%rbx, %rcx), %rsi
136+
movb %sil, (%rdi)
137+
cmp $0xa, %sil
138+
je read_line_done
139+
inc %rcx
140+
cmp %rcx, file_size(%rip)
141+
jne read_line_loop
142+
read_line_done:
143+
mov %rcx, %rax
144+
return
145+
146+
copy_lines:
147+
enter
148+
sub $128, %rsp
149+
mov $0, %rcx
150+
cmp %rcx, file_size(%rip)
151+
je copy_lines_done
152+
mov in(%rip), %rbx
153+
copy_lines_loop:
154+
mov %rcx, %rdi
155+
add out(%rip), %rdi
156+
mov (%rbx, %rcx), %rsi
157+
movb %sil, (%rdi)
158+
inc %rcx
159+
cmp %rcx, file_size(%rip)
160+
jne copy_lines_loop
161+
copy_lines_done:
162+
return
163+
123164
write:
124165
enter
166+
mov 24(%rbp), %rsi # param: address
167+
mov 16(%rbp), %rdx # param: size
125168
mov $WRITE, %rax
126169
mov $STDOUT, %rdi
127-
mov out(%rip), %rsi
128-
mov siz(%rip), %rdx
129170
syscall
130171
return
131172

@@ -140,24 +181,33 @@ munmap:
140181
enter
141182
mov $MUNMAP, %rax
142183
lea in, %rdi
143-
mov siz(%rip), %rsi
184+
mov file_size(%rip), %rsi
144185
syscall
145186
mov $MUNMAP, %rax
146187
lea out, %rdi
147-
mov siz(%rip), %rsi
188+
mov file_size(%rip), %rsi
148189
syscall
149190
return
150191

151192
main:
193+
enter
152194
call open
153195
call stat
154196
call mmap
155197
mov %rax, in(%rip)
156-
call read
157198
call mmap
158199
mov %rax, out(%rip)
159-
call copy
200+
call mmap
201+
mov %rax, line(%rip)
202+
call read_file
203+
#call copy
204+
205+
push in(%rip)
206+
push file_size(%rip)
160207
call write
208+
pop %rax
209+
pop %rax
210+
161211
call close
162212
call munmap
163213
call exit

print_int/print_int.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,23 +92,23 @@ print_int_after_adjust:
9292

9393
mov $0, %rdx
9494

95-
movb $0x30, -128(%rbp, %rdx)
95+
movb $0x30, -96(%rbp, %rdx)
9696
inc %rdx
97-
movb $0x78, -128(%rbp, %rdx)
97+
movb $0x78, -96(%rbp, %rdx)
9898
inc %rdx
9999

100100
print_int_pop_loop:
101101
dec %rcx
102102
mov -64(%rbp, %rcx), %rax
103-
movb %al, -128(%rbp, %rdx)
103+
movb %al, -96(%rbp, %rdx)
104104
inc %rdx
105105
test %rcx, %rcx
106106
jnz print_int_pop_loop
107107

108-
movb $0xa, -128(%rbp, %rdx)
108+
movb $0xa, -96(%rbp, %rdx)
109109
inc %rdx
110110

111-
lea -128(%rbp), %rsi
111+
lea -96(%rbp), %rsi
112112
call write_string
113113

114114
pop %rdi

0 commit comments

Comments
 (0)