so i have written this program for linear search that first takes the number of numbers of array as input. then the user inputs the numbers and finally the number to be searched.it then searches from the last element and prints the position of the first match it finds and if no match is found, it prints "element not found".now the programs works fine as long as all the numbers of the array are below 256 but even if one of the inputs is above or equal to 256, the program doesnt work properly and i have no idea why.
section .data
msg1 : db "enter the number of elements of array : ", 10, 13
len1 : equ $-msg1
msg2 : db "enter the elements : ", 10, 13
len2 : equ $-msg2
msg3 : db "enter the element to be searched : ", 10, 13
len3 : equ $-msg3
msg4: db "element found at position : ", 10, 13
len4: equ $-msg4
msg5: db "element not found !! ", 10, 13
len5: equ $-msg5
section .bss
no: resd 1
no2: resd 1
divide: resd 1
dispcount: resd 1
no_of_elements: resd 1
array: resd 50
temp: resd 1
element: resd 1
pos: resd 1
section .text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, len1
int 80h
call getnumber
mov eax, [no]
mov [no_of_elements], eax
mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, len2
int 80h
mov eax, [no_of_elements]
mov [temp], eax
getarr:
cmp dword [temp], 0
je donegetno
call getnumber
mov eax, [no]
push eax
dec dword [temp]
jmp getarr
donegetno:
mov eax, 4
mov ebx, 1
mov ecx, msg3
mov edx, len3
int 80h
call getnumber
mov eax, [no]
mov [element], eax
mov ebx, [no_of_elements]
mov [temp], ebx
search:
pop eax
mov [no], eax
cmp [element], eax
je found
dec dword [temp]
cmp dword [temp], 0
jne search
jmp notfound
found :
add dword [temp], 30h
mov eax, 4
mov ebx, 1
mov ecx, msg4
mov edx, len4
int 80h
mov eax, 4
mov ebx, 1
mov ecx, temp
mov edx, 1
int 80h
mov dword [no], 10
mov eax, 4
mov ebx, 1
mov ecx, no
mov edx, 1
int 80h
jmp exit
notfound :
mov eax, 4
mov ebx, 1
mov ecx, msg5
mov edx, len5
int 80h
exit:
mov eax, 1
mov ebx, 0
int 80h
getnumber:
mov eax, 3
mov ebx, 0
mov ecx, no
mov edx, 1
int 80h
sub dword [no], 30h
l1: mov eax, 3
mov ebx, 0
mov ecx, no2
mov edx, 1
int 80h
cmp dword [no2], 10d
je done
sub dword [no2], 30h
mov eax, dword [no]
mov ecx, 10
mul ecx
mov edx, 0
add eax, dword [no2]
mov dword [no], eax
jmp l1
done:
ret