无论数组是否排序,程序返回-1

时间:2015-11-17 23:35:48

标签: arrays assembly procedure

我正在编写程序集以查看数组是否已排序。这是我的代码:

.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过程根据数组是否排序返回1或-1(如果数组已排序,则返回1;如果不排序则返回-1)。我已经运行了调试器,当数组被排序时,调试器转到行call if_sorted,然后立即转到intOutput sorted并输出-1(当它应该运行if_sorted过程时)。当数组未排序时,调试器转到行call if_sorted并正确运行该过程,并输出-1。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

一旦我认为该程序运作良好。