Hi I am new to NASM and still familiarizing with the syntax. I have a problem running my code array.asm
This is my code: array.asm
%include "asm_io.inc"
segment .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
segment .bss
inbuf resb 12
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
segment .text
global _asm_main
_asm_main:
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, inbuf
mov edx, 11
int 80h
push inbuf
call atoi
add esp, 4
mov dword [no], eax ; or could just return result in eax
ret
;--------------------
atoi:
mov edx, [esp + 4] ; pointer to string
xor eax, eax ; clear "result"
.top:
movzx ecx, byte [edx]
inc edx
cmp ecx, byte '0'
jb .done
cmp ecx, byte '9'
ja .done
; we have a valid character - multiply
; result-so-far by 10, subtract '0'
; from the character to convert it to
; a number, and add it to result.
lea eax, [eax + eax * 4]
lea eax, [eax * 2 + ecx - '0']
jmp short .top
.done:
ret
when I run my code at the terminal with these commands:
nasm -f win32 array.asm
gcc -o array array.obj driver.c asm_io.obj array
it doesn't return any error but the code is not running either. Can you please help me identify the issue? Thank you