Я пытался отладить свою программу, но всегда кажется, что она застревает, когда я вызываю свою функцию.Я получаю сообщение об ошибке:
«Необработанное исключение в 0x0018fed8 в windows32.exe: 0xC0000005: нарушение доступа.»
Я попытался исследовать, и я понял, что этоошибка стека.Есть ли другие возможности?
.586
.MODEL FLAT
INCLUDE io.h
.STACK 4096
.DATA ; reserve storage for data
number1 WORD ?
anArray WORD 100 DUP (?)
count WORD ?
search WORD ?
prompt1 BYTE "Enter a number or -1 to quit.", 0
prompt2 BYTE "Enter a number to search for", 0
prompt3 BYTE "Search for another number Y/N",0
inString BYTE 40 DUP (?)
searchString BYTE 16 DUP (?)
outMsgLabel BYTE "Search Result", 0
frontOut1 BYTE 6 DUP (?)
outMsg1 BYTE " is element"
rearOut1 BYTE 6 DUP (?),0
frontOut2 BYTE 6 DUP (?)
outMsg2 BYTE " is not in array",0
EXTERN function1:PROC
.CODE ; start of main program code
_MainProc PROC
lea ebx, anArray
mov cx, count
moveThrough: input prompt1, inString, 40 ; read ASCII characters
atow inString ; convert to integer
cmp ax,0 ; check for -1
jl next
mov [ebx], eax ; store in memory
add ebx,2 ; move to next location in array
inc ecx
cmp ecx,50 ; check to make sure array isn't over 50
je next
jmp moveThrough ; jump to add more numbers
next: lea ebx, anArray ; get address of array
mov count, cx
input prompt2, inString, 40 ; prompt for number to search for
atow inString
mov dx,ax
mov cx,count ; prep cx to be the counter
lea eax, anArray
push eax
push edx
push ecx
call function1
add esp,6
cmp eax,0
je notThere
jmp equalTo
notThere: wtoa frontOut2, search
output outMsgLabel,frontOut2 ; output message
jmp searchAgain
equalTo: wtoa frontOut1, search
wtoa rearOut1, ax
output outMsgLabel,frontOut1 ; output message
mov cx,count
jmp searchAgain
searchAgain: input prompt3, searchString, 16 ; prompt for search again input
cmp searchString,"n" ; check for n
je end1
cmp searchString,"N" ; check forN
je end1
jmp next
end1:
mov eax, 0 ; exit with return code 0
ret
_MainProc ENDP
END ; end of source code
.586
.MODEL FLAT
.CODE
;void function1(int count, int search, int array[])
;outputs whether the search is in the array
function1 PROC
push ebp
mov ebp,esp
push ebx
push ecx
push edx
push esi
mov ecx,[ebp]
mov edx,[ebp+2]
mov esi,[ebp+4]
arraySearch: mov ax, dx
cmp [esi],ax ; check if number is in array
je equalTo
add ebx,2 ; move to next number in array
loop arraySearch ; loop back to top
notThere: pop esi
pop edx
pop ecx
pop ebx
mov ax,0
ret
equalTo: pop esi
pop edx
pop ecx
pop ebx
inc cx
mov ax,cx
ret
ret
function1 ENDP
END