Я пытаюсь выполнить задание для класса, и я застрял здесь.Что мне нужно сделать, это найти массив двойных слов для указанного значения двойного слова.Вот что у меня сейчас:
; DriverSub assembly language program: SUB adds two numbers pushed by Driver and displays SUM
; Author: Daniel Strien
; Using Code from: RSzabo
; Date: 3/29/2012
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
INCLUDE io.h ; header file for input/output
cr EQU 0dh ; carriage return character
Lf EQU 0ah ; line feed
.STACK 4096 ; reserve 4096-byte stack
.DATA ; reserve storage for data
number12 DWORD ?
array DWORD 5 DUP (?)
prompt1 BYTE "Enter first number: ", 0
prompt2 BYTE "Enter another number: ", 0
prompt3 BYTE "Enter a number to search for: ", 0
string BYTE 13 DUP (?)
label1 BYTE cr, Lf, "The value was found at Position (0 if not found): "
pos BYTE 16 DUP (?)
BYTE cr, Lf, 0
.CODE ; start of main program code
_start:
lea ebx, array ; get address of array
output prompt1 ; prompt for first number
input string,13 ; read ASCII characters
atod string ; convert to integer
mov [ebx], eax ;move the input to the array
output prompt2 ; repeat for second number
input string, 13
atod string
mov [ebx], eax ;move the input to the array
output prompt2 ; repeat for third number
input string, 13
atod string
mov [ebx], eax ;move the input to the array
output prompt2 ; repeat for fourth number
input string, 13
atod string
mov [ebx], eax ;move the input to the array
output prompt2 ; repeat for fifth(last) number
input string, 13
atod string
mov [ebx], eax ;move the input to the array
push ebx ;pushing the array adress to the stack
output prompt3 ; get search number
input string, 13
atod string
push eax
lea eax, number12
push eax
call search
dtoa pos, number12 ; convert to ASCII characters
output label1 ; output label and position
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
search PROC NEAR32 ; add two words passed on the stack
; return the sum in the EAX register
push ebp ; save EBP
mov ebp,esp ; establish stack frame
;move search value to eax
mov eax, [ebp+12]
;compare values to the user input
mov ebx, [ebp+16] ; move array adress to EBX
mov ecx, [ebx] ;move first element to ECX
cmp ecx, eax ;comparing search number to the first value in the array
je first ;If equal return the position.
mov ecx, [ebx+4] ;move first element to ECX
cmp ecx, eax ;comparing search number to the second value in the array
je second ;If equal return the position.
mov ecx, [ebx+8]
cmp ecx, eax ;comparing search number to the third value in the array
je third ;If equal return the position.
mov ecx, [ebx+12]
cmp ecx, eax ;comparing search number to the fourth value in the array
je fourth ;If equal return the position.
mov ecx, [ebx+16]
cmp ecx, eax ;comparing search number to the fifth value in the array
je fifth ;If equal return the position.
jmp none
first: ;returns position 1
mov eax, 1
jmp done
second: ;returns position 2
mov eax, 2
jmp done
third: ;returns position 3
mov eax, 3
jmp done
fourth: ;returns position 4
mov eax, 4
jmp done
fifth: ;returns position 5
mov eax, 5
jmp done
none: ;returns 0 if the search value is not found.
mov eax, 0
jmp done
done:
mov ebx,[ebp+8]
mov [ebp],eax
pop ebp ; restore EBP
ret 12 ; return
search ENDP
END ; end of source code
Проблема, с которой я столкнулся, заключается в том, что программа будет проходить через все, но все равно будет возвращать 0, даже если значение существует в массиве.Кто-нибудь может понять, что я делаю не так?
Заранее спасибо