File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 99 .equ MUNMAP, 11
1010 .equ OFFSET_SIZE, 48 # struct stat
1111
12- .macro enter
13- push %rbp
14- mov %rsp , %rbp
15- push %rcx
16- push %r8
17- push %r9
18- push %r10
19- push %r11
20- push %rdi
21- push %rdx
22- .endm
23-
24- .macro return
25- pop %rdx
26- pop %rdi
27- pop %r11
28- pop %r10
29- pop %r9
30- pop %r8
31- pop %rcx
32- mov %rbp , %rsp
33- pop %rbp
34- ret
35- .endm
36-
3712 .data
3813
3914fh:
5732 .text
5833 .globl main
5934
60- mmap:
35+ .include "../print_int/print_int.s"
36+
37+ get_memory:
6138 enter
6239 mov $MMAP, %rax
6340 mov $0 , %rdi #addr
7653 syscall
7754 return
7855
79- open :
56+ open_file :
8057 enter
8158 mov $OPEN, %rax
8259 mov $file, %rdi
8663 mov %rax , fh(%rip )
8764 return
8865
89- stat :
66+ stat_file :
9067 enter
9168 mov $FSTAT, %rax
9269 mov fh(%rip ), %rdi
9673 mov %rbx , file_size(%rip )
9774 return
9875
99- read_file :
76+ init_file :
10077 enter
10178 mov $READ, %rax
10279 mov fh(%rip ), %rdi
@@ -161,15 +138,6 @@ copy_lines_loop:
161138copy_lines_done:
162139 return
163140
164- write:
165- enter
166- mov 24 (%rbp ), %rsi # param: address
167- mov 16 (%rbp ), %rdx # param: size
168- mov $WRITE, %rax
169- mov $STDOUT, %rdi
170- syscall
171- return
172-
173141close:
174142 enter
175143 mov $CLOSE, %rax
@@ -191,20 +159,21 @@ munmap:
191159
192160main:
193161 enter
194- call open
195- call stat
196- call mmap
162+ call open_file
163+ call stat_file
164+ call get_memory
197165 mov %rax , in (%rip )
198- call mmap
166+ call get_memory
199167 mov %rax , out (%rip )
200- call mmap
168+ call get_memory
201169 mov %rax , line(%rip )
202- call read_file
170+ call init_file
171+ call read_line
203172 #call copy
204173
205- push in (%rip )
206- push file_size( %rip )
207- call write
174+ push line (%rip )
175+ push %rax
176+ call write_string
208177 pop %rax
209178 pop %rax
210179
Original file line number Diff line number Diff line change 11build :
2- $(CC ) print_int .s -c
2+ $(CC ) main .s -c -o print_int.o
33 $(LD ) -e main -o print_int print_int.o
44
55run : build
Original file line number Diff line number Diff line change 1+ .text
2+ .globl main
3+
4+ .include "../print_int/print_int.s"
5+
6+ print_char: # debugging
7+ frame_enter
8+ sys_enter
9+ push %rax
10+ push %rcx
11+ push %rdx
12+ push %rsi
13+ push %rdi
14+ mov 16 (%rbp ), %rax
15+ movb $0x3e , -128 (%rbp )
16+ movb %al , -127 (%rbp )
17+ movb $0x3c , -126 (%rbp )
18+ movb $0xa , -125 (%rbp )
19+ lea -128 (%rbp ), %rsi
20+ mov $WRITE, %rax
21+ mov $STDOUT, %rdi
22+ mov $4 , %rdx
23+ syscall
24+ pop %rdi
25+ pop %rsi
26+ pop %rdx
27+ pop %rcx
28+ pop %rax
29+ sys_leave
30+ frame_leave
31+ ret
32+
33+ main:
34+ mov $0x9084 , %rax
35+ shl $16 , %rax
36+ add $0xa412 , %rax
37+ push %rax
38+ call print_int
39+ jmp exit
40+
41+ exit:
42+ movq $EXIT, %rax
43+ movq $0 , %rdi
44+ syscall
Original file line number Diff line number Diff line change 2424 pop %rbp
2525 .endm
2626
27- .text
28- .globl main
29-
30- print_char: # debugging
31- frame_enter
32- sys_enter
33- push %rax
27+ .macro enter
28+ push %rbp
29+ mov %rsp , %rbp
3430 push %rcx
35- push %rdx
36- push %rsi
31+ push %r8
32+ push %r9
33+ push %r10
34+ push %r11
3735 push %rdi
38- mov 16 (%rbp ), %rax
39- movb $0x3e , -128 (%rbp )
40- movb %al , -127 (%rbp )
41- movb $0x3c , -126 (%rbp )
42- movb $0xa , -125 (%rbp )
43- lea -128 (%rbp ), %rsi
44- mov $WRITE, %rax
45- mov $STDOUT, %rdi
46- mov $4 , %rdx
47- syscall
48- pop %rdi
49- pop %rsi
36+ push %rdx
37+ .endm
38+
39+ .macro return
5040 pop %rdx
41+ pop %rdi
42+ pop %r11
43+ pop %r10
44+ pop %r9
45+ pop %r8
5146 pop %rcx
52- pop %rax
53- sys_leave
54- frame_leave
47+ mov %rbp , %rsp
48+ pop %rbp
5549 ret
50+ .endm
51+
52+ .text
53+ .globl main
5654
57- # char *rsi, int rdx
5855write_string:
59- sys_enter
56+ enter
57+ mov 24 (%rbp ), %rsi # param: address
58+ mov 16 (%rbp ), %rdx # param: size
6059 mov $WRITE, %rax
6160 mov $STDOUT, %rdi
6261 syscall
63- sys_leave
64- ret
62+ return
6563
6664print_int:
6765 frame_enter
@@ -109,7 +107,11 @@ print_int_pop_loop:
109107 inc %rdx
110108
111109 lea -96 (%rbp ), %rsi
110+ push %rsi
111+ push %rdx
112112 call write_string
113+ pop %rdx
114+ pop %rsi
113115
114116 pop %rdi
115117 pop %rcx
@@ -120,16 +122,3 @@ print_int_pop_loop:
120122 frame_leave
121123
122124 ret
123-
124- main:
125- mov $0x9084 , %rax
126- shl $16 , %rax
127- add $0xa412 , %rax
128- push %rax
129- call print_int
130- jmp exit
131-
132- exit:
133- movq $EXIT, %rax
134- movq $0 , %rdi
135- syscall
You can’t perform that action at this time.
0 commit comments