File tree Expand file tree Collapse file tree 4 files changed +67
-95
lines changed Expand file tree Collapse file tree 4 files changed +67
-95
lines changed Original file line number Diff line number Diff line change 33define hook-quit
44 set confirm off
55end
6- break copy
6+ break print_lines_loop
Original file line number Diff line number Diff line change 1717 .quad 0
1818out:
1919 .quad 0
20- line :
20+ linebuf :
2121 .quad 0
2222file_size:
2323 .quad 0
@@ -101,14 +101,16 @@ copy_done:
101101
102102read_line:
103103 enter
104+ mov 16 (%rbp ), %rax
104105 sub $128 , %rsp
105106 mov $0 , %rcx
106107 cmp %rcx , file_size(%rip )
107108 je read_line_done
108109 mov in (%rip ), %rbx
110+ add %rax , %rbx
109111read_line_loop:
110112 mov %rcx , %rdi
111- add line (%rip ), %rdi
113+ add linebuf (%rip ), %rdi
112114 mov (%rbx , %rcx ), %rsi
113115 movb %sil , (%rdi )
114116 cmp $0xa , %sil
@@ -120,24 +122,6 @@ read_line_done:
120122 mov %rcx , %rax
121123 return
122124
123- copy_lines:
124- enter
125- sub $128 , %rsp
126- mov $0 , %rcx
127- cmp %rcx , file_size(%rip )
128- je copy_lines_done
129- mov in (%rip ), %rbx
130- copy_lines_loop:
131- mov %rcx , %rdi
132- add out (%rip ), %rdi
133- mov (%rbx , %rcx ), %rsi
134- movb %sil , (%rdi )
135- inc %rcx
136- cmp %rcx , file_size(%rip )
137- jne copy_lines_loop
138- copy_lines_done:
139- return
140-
141125close:
142126 enter
143127 mov $CLOSE, %rax
@@ -157,6 +141,42 @@ munmap:
157141 syscall
158142 return
159143
144+ print_lines:
145+ enter
146+ sub $128 , %rsp
147+ mov $0 , %rbx
148+
149+ print_lines_loop:
150+
151+ push %rbx
152+ call print_int
153+ pop %rbx
154+
155+ push %rbx
156+ call read_line
157+
158+ add %rax , %rbx
159+
160+
161+ push linebuf(%rip )
162+ push %rax
163+ call write_string
164+ pop %rax
165+ pop %rax
166+ pop %rax
167+
168+ call write_newline
169+
170+ inc %rbx
171+
172+ cmp $30 , %rbx
173+
174+ jl print_lines_loop
175+ print_lines_done:
176+ push $0x31
177+ call write_char_debug
178+ return
179+
160180main:
161181 enter
162182 call open_file
@@ -166,17 +186,14 @@ main:
166186 call get_memory
167187 mov %rax , out (%rip )
168188 call get_memory
169- mov %rax , line (%rip )
189+ mov %rax , linebuf (%rip )
170190 call init_file
171- call read_line
172- #call copy
173-
174- push line(%rip )
175- push %rax
176- call write_string
177- call write_newline
178- pop %rax
179- pop %rax
191+ call print_lines
192+ #push $0xc
193+ #call read_line
194+ #push linebuf(%rip)
195+ #push %rax
196+ #call write_string
180197
181198 call close
182199 call munmap
Original file line number Diff line number Diff line change 11 .text
22 .globl main
33
4- .include "../print_int/print_int.s"
4+ .include "print_int.s"
5+
6+ basic_method:
7+ enter
8+ mov $6 , %rcx
9+ return
510
611main:
712 mov $0x9084 , %rax
813 shl $16 , %rax
914 add $0xa412 , %rax
15+ mov $5 , %rcx
1016 push %rax
17+ call #print_int
18+ call basic_method
19+ push %rcx
1120 call print_int
1221 jmp exit
1322
Original file line number Diff line number Diff line change 44 .equ WRITE, 1
55 .equ EXIT, 60
66
7- .macro sys_enter
8- push %rcx
9- push %r11
10- .endm
11-
12- .macro sys_leave
13- pop %r11
14- pop %rcx
15- .endm
16-
17- .macro frame_enter
18- push %rbp
19- mov %rsp , %rbp
20- .endm
21-
22- .macro frame_leave
23- mov %rbp , %rsp
24- pop %rbp
25- .endm
26-
277 .macro enter
288 push %rbp
299 mov %rsp , %rbp
10+ push %rbx
3011 push %rcx
3112 push %r8
3213 push %r9
4425 pop %r9
4526 pop %r8
4627 pop %rcx
28+ pop %rbx
4729 mov %rbp , %rsp
4830 pop %rbp
4931 ret
5335 .globl main
5436
5537write_char_debug:
56- frame_enter
57- sys_enter
58- push %rax
59- push %rcx
60- push %rdx
61- push %rsi
62- push %rdi
38+ enter
6339 mov 16 (%rbp ), %rax
6440 movb $0x3e , -128 (%rbp )
6541 movb %al , -127 (%rbp )
@@ -70,42 +46,25 @@ write_char_debug:
7046 mov $STDOUT, %rdi
7147 mov $4 , %rdx
7248 syscall
73- pop %rdi
74- pop %rsi
75- pop %rdx
76- pop %rcx
77- pop %rax
78- sys_leave
79- frame_leave
80- ret
49+ return
8150
8251write_char:
8352 enter
84- push %rax
85- push %rcx
86- push %rdx
87- push %rsi
88- push %rdi
8953 mov 16 (%rbp ), %rax
9054 movb %al , -64 (%rbp )
9155 lea -64 (%rbp ), %rsi
9256 mov $WRITE, %rax
9357 mov $STDOUT, %rdi
9458 mov $1 , %rdx
9559 syscall
96- pop %rdi
97- pop %rsi
98- pop %rdx
99- pop %rcx
100- pop %rax
10160 return
10261
10362write_newline:
104- mov %rsp , %rbp
63+ enter
10564 push $0xa
10665 call write_char
107- mov %rbp , %rsp
108- ret
66+ pop %rax
67+ return
10968
11069write_string:
11170 enter
@@ -117,15 +76,9 @@ write_string:
11776 return
11877
11978print_int:
120- frame_enter
79+ enter
12180 sub $128 , %rsp
12281
123- push %rax
124- push %rsi
125- push %rdx
126- push %rcx
127- push %rdi
128-
12982 mov 16 (%rbp ), %rsi
13083 mov $0 , %rcx
13184
@@ -168,12 +121,5 @@ print_int_pop_loop:
168121 pop %rdx
169122 pop %rsi
170123
171- pop %rdi
172- pop %rcx
173- pop %rdx
174- pop %rsi
175- pop %rax
176-
177- frame_leave
124+ return
178125
179- ret
You can’t perform that action at this time.
0 commit comments