-
Notifications
You must be signed in to change notification settings - Fork 0
/
assignment2.asm
213 lines (174 loc) · 2.32 KB
/
assignment2.asm
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
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro scan 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
array dq 0x0123456789012345,0x1234567890123456,0x2345678901234567,0x3456789012345678,0x4567890123456789,0x0000000000000000,0x0000000000000000,0x0000000000000000
newline db 10
menu db "1. Display array",10
db "2. Non overlapping without string instruction",10
db "3. Overlapping without string instruction",10
db "4. Non overlapping with string instruction",10
db "5. Overlapping with string instruction",10
db "6. Exit",10
len equ $-menu
section .bss
answer resb 20
count resb 2
choice resb 2
section .text
global _start
_start:
up:
print menu,len
scan choice,2
cmp byte[choice],'1'
je display
cmp byte[choice],'2'
je nwos
cmp byte[choice],'3'
je owos
cmp byte[choice],'4'
je nws
cmp byte[choice],'5'
je ows
cmp byte[choice],'6'
jae exit
display:
mov byte[count],05H
mov rsi,array
l3:
mov rdx,rsi
push rsi
call h2a
pop rsi
mov rdx,[rsi]
push rsi
call h2a
pop rsi
add rsi,08H
dec byte[count]
jnz l3
jmp up
nwos:
mov rcx,05H
mov rsi,array
mov rdi,array+100
l4:
mov rbx,qword[rsi]
mov qword[rdi],rbx
add rsi,08H
add rdi,08H
loop l4
mov byte[count],05H
mov rsi,array+100
l5:
mov rdx,rsi
push rsi
call h2a
pop rsi
mov rdx,[rsi]
push rsi
call h2a
pop rsi
add rsi,08H
dec byte[count]
jnz l5
jmp up
owos:
mov rcx,05
mov rsi,array+24
mov rdi,array+100
l6:
mov rbx,qword[rsi]
mov qword[rdi],rbx
add rsi,08
add rdi,08
loop l6
mov byte[count],05H
mov rsi,array+100
l7:
mov rdx,rsi
push rsi
call h2a
pop rsi
mov rdx,[rsi]
push rsi
call h2a
pop rsi
add rsi,08H
dec byte[count]
jnz l7
jmp up
nws:
mov rcx,05
mov rsi,array
mov rdi,array+100
repnz movsq
mov byte[count],05
mov rsi,array+100
l8:
mov rdx,rsi
push rsi
call h2a
pop rsi
mov rdx,[rsi]
push rsi
call h2a
pop rsi
add rsi,08H
dec byte[count]
jnz l8
jmp up
ows:
mov rcx,05
mov rsi,array+24
mov rdi,array+100
repnz movsq
mov byte[count],05H
mov rsi,array+100
l9:
mov rdx,rsi
push rsi
call h2a
pop rsi
mov rdx,[rsi]
push rsi
call h2a
pop rsi
add rsi,08H
dec byte[count]
jnz l9
jmp up
h2a:
xor rax,rax
mov rsi,answer
mov rcx,16
l2:
rol rdx,04
mov al,dl
and al,0FH
cmp al,09H
jbe l1
add al,07H
l1:add al,30H
mov byte[rsi],al
inc rsi
loop l2
print answer,16
print newline,1
ret
exit:
mov rax,60
mov rdi,0
syscall