Skip to content

Commit 0efae04

Browse files
committed
group3: print first line
1 parent 3e794ed commit 0efae04

File tree

5 files changed

+93
-89
lines changed

5 files changed

+93
-89
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
[What is stack frame](https://stackoverflow.com/questions/3699283/what-is-stack-frame-in-assembly)
1010

11+
[C headers in Asm](http://thomasloven.com/blog/2012/06/C-Headers-In-Asm/)
12+
1113
```
1214
/usr/include/asm-generic/fcntl.h
1315
```

group3/group3.s

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,6 @@
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

3914
fh:
@@ -57,7 +32,9 @@ file:
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
@@ -76,7 +53,7 @@ exit:
7653
syscall
7754
return
7855

79-
open:
56+
open_file:
8057
enter
8158
mov $OPEN, %rax
8259
mov $file, %rdi
@@ -86,7 +63,7 @@ open:
8663
mov %rax, fh(%rip)
8764
return
8865

89-
stat:
66+
stat_file:
9067
enter
9168
mov $FSTAT, %rax
9269
mov fh(%rip), %rdi
@@ -96,7 +73,7 @@ stat:
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:
161138
copy_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-
173141
close:
174142
enter
175143
mov $CLOSE, %rax
@@ -191,20 +159,21 @@ munmap:
191159

192160
main:
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

print_int/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
build:
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

55
run: build

print_int/main.s

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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

print_int/print_int.s

Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,44 +24,42 @@
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
5855
write_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

6664
print_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

0 commit comments

Comments
 (0)