无论数组排序如何,过程都返回 -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
一旦我包括该程序就可以正常工作。
我目前正在用 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
一旦我包括该程序就可以正常工作。