我正在编写程序集以查看数组是否已排序。这是我的代码:
.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。有什么想法吗?
答案 0 :(得分:0)
我已经解决了!我忘记的是在循环结束后放置ret
,所以:
less_than_or_equal:
mov sorted, 1
loop L2
ret
greater_than:
mov sorted, -1
ret
一旦我认为该程序运作良好。