-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprogram_backup.nasm
239 lines (239 loc) · 9.37 KB
/
program_backup.nasm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
main:
push rbp
mov rbp, rsp
call __global_init
sub rsp, 32
push rbx
main_0_block_enter:
sub rsp, 8
call getString
add rsp, 8
mov rsi, rax
mov qword [@A + 0], rsi
sub rsp, 8
call getString
add rsp, 8
mov rsi, rax
mov qword [@B + 0], rsi
mov rdi, qword [@B + 0]
sub rsp, 8
call __string_parseInt
add rsp, 8
mov rsi, rax
mov qword [@N + 0], rsi
mov rdi, qword [@A + 0]
sub rsp, 8
call __string_length
add rsp, 8
mov rsi, rax
cmp rsi, qword [@N + 0]
mov rsi, 0
setl sil
cmp rsi, 1
je main_1_if_true
jmp main_2_if_false
main_1_if_true:
mov rdi, __const_string_0
sub rsp, 8
call println
add rsp, 8
mov rax, 0
jmp main_4_block_exit
main_2_if_false:
jmp main_3_if_exit
main_3_if_exit:
mov rbx, qword [@N + 0]
sub rbx, 1
mov rdi, qword [@A + 0]
mov rsi, 0
mov rdx, rbx
sub rsp, 8
call __string_substring
add rsp, 8
mov rsi, rax
mov rdi, rsi
sub rsp, 8
call calc
add rsp, 8
mov rsi, rax
mov qword [@C + 0], rsi
mov rdi, qword [@C + 0]
sub rsp, 8
call println
add rsp, 8
mov rax, 0
jmp main_4_block_exit
main_4_block_exit:
pop rbx
add rsp, 32
pop rbp
ret
calc:
push rbp
mov rbp, rsp
push r12
push r13
push rbx
calc_0_block_enter:
mov r13, rdi
mov rdi, r13
sub rsp, 8
call __string_length
add rsp, 8
mov rsi, rax
mov r8, rsi
mov rax, 1
cmp rax, r8
mov rsi, 0
sete sil
cmp rsi, 1
je calc_1_if_true
jmp calc_2_if_false
calc_1_if_true:
mov rax, r13
jmp calc_16_block_exit
calc_2_if_false:
jmp calc_3_if_exit
calc_3_if_exit:
mov rsi, r8
mov rax, rsi
mov rcx, 2
cdq
idiv ecx
mov rsi, rax
mov rbx, rsi
mov r12, rbx
sub r12, 1
mov rdi, r13
mov rsi, 0
mov rdx, r12
push r8
call __string_substring
pop r8
mov rsi, rax
mov rdi, rsi
push r8
call calc
pop r8
mov rsi, rax
mov r9, rsi
mov r12, r8
sub r12, 1
mov rdi, r13
mov rsi, rbx
mov rdx, r12
push r9
call __string_substring
pop r9
mov rsi, rax
mov rdi, rsi
push r9
call calc
pop r9
mov rsi, rax
mov r12, rsi
mov rdi, r9
mov rsi, r12
push r9
call __string_LE
pop r9
mov rsi, rax
cmp rsi, 1
je calc_4_if_true
jmp calc_5_if_false
calc_4_if_true:
mov rdi, r9
mov rsi, r12
sub rsp, 8
call __string_connection
add rsp, 8
mov rsi, rax
mov rax, rsi
jmp calc_16_block_exit
calc_5_if_false:
mov rdi, r9
mov rsi, r12
push r9
call __string_EQ
pop r9
mov rsi, rax
cmp rsi, 1
je calc_6_if_true
jmp calc_10_if_false
calc_6_if_true:
mov rdi, r9
mov rsi, 0
push r9
call __string_ord
pop r9
mov rsi, rax
mov rbx, rsi
mov rdi, r12
mov rsi, 0
push r9
call __string_ord
pop r9
mov rsi, rax
cmp rbx, rsi
mov rsi, 0
setl sil
cmp rsi, 1
je calc_7_if_true
jmp calc_8_if_false
calc_7_if_true:
mov rdi, r9
mov rsi, r12
sub rsp, 8
call __string_connection
add rsp, 8
mov rsi, rax
mov rax, rsi
jmp calc_16_block_exit
calc_8_if_false:
jmp calc_9_if_exit
calc_9_if_exit:
mov rdi, r12
mov rsi, r9
sub rsp, 8
call __string_connection
add rsp, 8
mov rsi, rax
mov rax, rsi
jmp calc_16_block_exit
calc_10_if_false:
mov rdi, r9
mov rsi, r12
push r9
call __string_GR
pop r9
mov rsi, rax
cmp rsi, 1
je calc_11_if_true
jmp calc_12_if_false
calc_11_if_true:
mov rdi, r12
mov rsi, r9
sub rsp, 8
call __string_connection
add rsp, 8
mov rsi, rax
mov rax, rsi
jmp calc_16_block_exit
calc_12_if_false:
jmp calc_13_if_exit
calc_13_if_exit:
jmp calc_14_if_exit
calc_14_if_exit:
jmp calc_15_if_exit
calc_15_if_exit:
mov rdi, __const_string_1
sub rsp, 8
call println
add rsp, 8
jmp calc_16_block_exit
calc_16_block_exit:
pop rbx
pop r13
pop r12
pop rbp
ret