Skip to content

Commit b19e601

Browse files
committed
print_int: investigate rsi clobbering
1 parent e56ef1a commit b19e601

File tree

3 files changed

+49
-26
lines changed

3 files changed

+49
-26
lines changed

group3/group3.s

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

114111
read_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

162159
print_lines:
163160
enter
164-
push_all
165161
sub $128, %rsp
162+
push_all
166163
mov $0, %rbx
167164

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

print_int/main.s

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,48 @@
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-
156
main:
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

2249
exit:
2350
movq $EXIT, %rax

print_int/print_int.s

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
.macro log ex
1717
push \ex
18-
call write_string
18+
call print_int
1919
add $8, %rsp
2020
.endm
2121

@@ -26,6 +26,7 @@
2626
.endm
2727

2828
.macro push_all
29+
push %rsi
2930
push %rbx
3031
push %rcx
3132
push %r8
@@ -45,6 +46,7 @@
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

0 commit comments

Comments
 (0)