File tree Expand file tree Collapse file tree 3 files changed +49
-26
lines changed Expand file tree Collapse file tree 3 files changed +49
-26
lines changed Original file line number Diff line number Diff line change 11 .equ READ, 0
2- .equ STDOUT, 1
32 .equ CLOSE, 3
4- .equ WRITE, 1
53 .equ OPEN, 2
64 .equ FSTAT, 5
7- .equ EXIT, 60
85 .equ MMAP, 9
96 .equ MUNMAP, 11
107 .equ OFFSET_SIZE, 48 # struct stat
@@ -76,7 +73,7 @@ stat_file:
7673 mov fh(%rip ), %rdi
7774 lea st, %rsi
7875 syscall
79- mov 48 (%rsi ), %rbx
76+ mov OFFSET_SIZE (%rsi ), %rbx
8077 mov %rbx , file_size(%rip )
8178 pop_all
8279 return
@@ -113,9 +110,9 @@ copy_done:
113110
114111read_line:
115112 enter
113+ sub $128 , %rsp
116114 push_all
117115 mov 16 (%rbp ), %rax
118- sub $128 , %rsp
119116 mov $0 , %rcx
120117 cmp %rcx , file_size(%rip )
121118 je read_line_done
@@ -161,28 +158,23 @@ munmap:
161158
162159print_lines:
163160 enter
164- push_all
165161 sub $128 , %rsp
162+ push_all
166163 mov $0 , %rbx
167164
168165print_lines_loop:
169166
170167 push %rbx
171- call print_int
172- pop %rbx
173-
174- push %rbx
168+ log %rbx
175169 call read_line
176170
177171 add %rax , %rbx
178172
179173
180174 push linebuf(%rip )
181- log %rax
182175 plop
183176 plop
184177
185- call write_newline
186178
187179 inc %rbx
188180
Original file line number Diff line number Diff line change 33
44.include "print_int.s"
55
6- basic_method:
7- enter
8- sub $144 , %rsp
9- push_all
10- mov 16 (%rbp ), %rsi
11- mov $0 , %rcx
12- pop_all
13- return
14-
156main:
167 mov $0x9084 , %rax
178 shl $16 , %rax
189 add $0xa412 , %rax
19- push %rax
20- call print_int
10+
11+ mov $1 , %rbx
12+ mov $2 , %rcx
13+ mov $3 , %r8
14+ mov $4 , %r9
15+ mov $5 , %r10
16+ mov $6 , %r11
17+ mov $7 , %rdi
18+ mov $8 , %rdx
19+ mov $255 , %rsi
20+
21+ push %rsi
22+ log %rsi
23+
24+ log %rax
25+ log %rbx
26+ log %rcx
27+ log %r8
28+ log %r9
29+ log %r10
30+ log %r11
31+ log %rdi
32+ log %rdx
33+ log %rsi
34+
35+ log %rax
36+ log %rbx
37+ log %rcx
38+ log %r8
39+ log %r9
40+ log %r10
41+ log %r11
42+ log %rdi
43+ log %rdx
44+ log %rsi
45+
46+ pop %rsi
47+ log %rsi
2148
2249exit:
2350 movq $EXIT, %rax
Original file line number Diff line number Diff line change 1515
1616 .macro log ex
1717 push \ex
18- call write_string
18+ call print_int
1919 add $8 , %rsp
2020 .endm
2121
2626 .endm
2727
2828 .macro push_all
29+ push %rsi
2930 push %rbx
3031 push %rcx
3132 push %r8
4546 pop %r8
4647 pop %rcx
4748 pop %rbx
49+ pop %rsi
4850 .endm
4951
5052 .text
@@ -106,6 +108,7 @@ print_int:
106108
107109 sub $48 , %rsp
108110 push_all
111+ push %rax
109112
110113 mov $0 , %rcx
111114
@@ -145,9 +148,10 @@ print_int_pop_loop:
145148 push %rsi
146149 push %rdx
147150 call write_string
148- pop %rdx
149- pop %rsi
151+ plop
152+ plop
150153
154+ pop %rax
151155 pop_all
152156 return
153157
You can’t perform that action at this time.
0 commit comments