В настоящее время я пишу процедуру в Assembly, чтобы узнать, отсортирован ли массив. Вот мой код:Процедура, возвращающая -1, независимо от сортируемого массива
.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. Есть идеи?
Возможно, вы хотите выйти из своей программы после 'intOutput sorted'? Как только он распечатает значение, он продолжит выполнение, выполняющее то, что находится в процедуре 'if_sorted' –
Итак, я бы написал' main ENDP' после 'intOutput sorted'? Но если массив отсортирован, он не запускается через 'if_sorted' вообще перед печатью' sorted'. Вторая часть этой проблемы (которую я еще не написал из-за этой проблемы), которая заключается в том, чтобы распечатать элементы массива, если массив отсортирован, и если массив не отсортирован, программа предложит пользователю ввести числа еще раз. Но так как сейчас, он будет постоянно запрашивать новые номера, потому что он всегда возвращает -1 – MistFTW
Вам не нужно делать правильное завершение работы, чтобы выйти из вашей программы, иначе он просто продолжит выполнение какого-либо кода под ним (что, скорее всего, выполнит код в процедуре, приведенной ниже. –