-
Notifications
You must be signed in to change notification settings - Fork 2
/
findPalinSubstring.asm
179 lines (146 loc) · 2.13 KB
/
findPalinSubstring.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
;Write a program to find all substrings of the given string which are palindrome(length > 1).
section .text
global _start
palin:
mov dword[l1], 0
mov eax, dword[i]
mov dword[k], eax
lop1:
mov eax, dword[k]
cmp eax, dword[j]
ja a1
mov ecx, dword[k]
mov al, byte[str+ecx]
cmp al, 32
je a2
cmp al, 9
je a2
cmp al, 'A'
jb a3
cmp al, 'Z'
ja a3
add al, 32
a3:
mov edx, dword[l1]
mov byte[strp+edx], al
inc dword[l1]
a2:
inc dword[k]
jmp lop1
a1:
mov dword[k], 0
lop2:
mov eax, dword[k]
cmp eax, dword[l1]
jae a4
mov ecx, dword[k]
mov al, byte[strp+ecx]
mov edx, dword[l1]
sub edx, dword[k]
sub edx, 1
mov bl, byte[strp+edx]
cmp al, bl
je a5
mov byte[fl], 1
ret
a5:
inc dword[k]
jmp lop2
a4:
ret
_start:
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, len1
int 80h
mov dword[len], 0
mov edi, str
loop_read:
mov eax, 3
mov ebx, 0
mov ecx, temp
mov edx, 1
int 80h
cmp byte[temp], 10
je b1
mov al, byte[temp]
stosb
inc dword[len]
jmp loop_read
b1:
mov dword[i], 0
loop1:
mov eax, dword[i]
add eax, 1
cmp eax, dword[len]
jae exit
mov ecx, dword[i]
mov al, byte[str+ecx]
cmp al, 32
je b2
cmp al, 9
je b2
mov eax, dword[i]
add eax, 1
mov dword[j], eax
loop2:
mov eax, dword[j]
cmp eax, dword[len]
jae b2
mov ecx, dword[j]
mov al, byte[str+ecx]
cmp al, 32
je b3
cmp al, 9
je b3
mov byte[fl], 0
call palin
cmp byte[fl], 0
jne b3
mov eax, dword[i]
mov dword[k], eax
prints:
mov eax, dword[k]
cmp eax, dword[j]
ja b4
mov ecx, dword[k]
mov al, byte[str+ecx]
mov byte[temp], al
mov eax, 4
mov ebx, 1
mov ecx, temp
mov edx, 1
int 80h
inc dword[k]
jmp prints
b4:
mov eax, 4
mov ebx, 1
mov ecx, newline
mov edx, 1
int 80h
b3:
inc dword[j]
jmp loop2
b2:
inc dword[i]
jmp loop1
exit:
mov eax, 1
mov ebx, 0
int 80h
section .bss
str: resb 100
len: resd 1
strp: resb 100
l1: resd 1
temp: resb 1
i: resd 1
j: resd 1
k: resd 1
fl: resb 1
section .data
msg1 db 'Enter a string: '
len1 equ $-msg1
newline db 10