无论数组排序如何,过程都返回 -1

Procedure returning -1 regardless of array being sorted

我目前正在用 Assembly 编写一个程序来查看数组是否已排序。这是我的代码:

.DATA

inputIntMessage BYTE "Enter an integer: ", 0
intArray     DWORD  4 DUP (?)
integerInput DWORD   ?
sorted DWORD ?

.CODE
main PROC
;Here is where I insert whatever the user input into the array
mov eax, 0
mov ecx, LENGTHOF intArray
L1:
    intInput inputIntMessage, integerInput ;This is the user input
    mov ebx, integerInput
    mov intArray[eax*4], ebx
    inc eax
    loop L1

call if_sorted
intOutput sorted
INVOKE ExitProcess, 0


if_sorted PROC
    mov esi, OFFSET intArray
    mov ebx, 0
    mov ecx, LENGTHOF intArray

    L2: 
        mov eax, [esi + TYPE intArray * ebx]
        inc ebx
        cmp eax, [esi+ TYPE intArray * ebx]
        jle less_than_or_equal
        jg greater_than
    less_than_or_equal:
        mov sorted, 1
        loop L2
    greater_than:
        mov sorted, -1
    ret
if_sorted endp

main ENDP

if_sorted 过程 returns 1 或 -1 取决于数组是否已排序(如果数组已排序则为 1,否则为 -1)。我有 运行 通过调试器,当数组排序时,调试器转到行 call if_sorted 然后立即转到 intOutput sorted 并输出 -1 (当它应该有 运行 通过 if_sorted 过程)。当数组未排序时,调试器转到第 call if_sorted 行并正确地执行 运行s 整个过程,并输出 -1。有什么想法吗?

我已经解决了!我忘记的是在循环结束后放一个 ret,所以:

less_than_or_equal:
        mov sorted, 1
        loop L2
        ret
    greater_than:
        mov sorted, -1
        ret

一旦我包括该程序就可以正常工作。