Я написал программу, чтобы найти длину наибольшей увеличивающейся последовательности с учетом большего array
(array
инициализируется в c ++, а главная функция c ++ вызывает процедуру), я получил откомпилированный код, однако вывод программы постоянно меняется?
Я пытался заменить и наблюдать регистры, и они, похоже, никак не влияют на вывод программы.
Наконец, я попытался удалить все инструкции внутри процедуры, которые могли бы повлиять на ret
(возвращает EAX
), однако программа по-прежнему выводит случайные целые числа на консоль
Sequence.asm (.asm file)
.586
.MODEL flat,C
.data
.code
longestSequence PROC USES eax ebx esi edi ,theArrayOFFSET: PTR DWORD,theArraySize: DWORD
LOCAL temp[10]: DWORD
LOCAL lengthc: DWORD
LOCAL k: DWORD
LOCAL temp1: DWORD
LOCAL temp2: DWORD
//the algorithm to find the longest sequence of integer should be here, but its not shown for simplicity and the program still output random integers
*
*
*
mov eax,8 //suppose I move 8 into eax, it still generates random output
ret
longestSequence ENDP
END
Class ConsoleApplication3(cpp file)
#include "pch.h"
#include <iostream>
extern "C" int longestSequence(int array[], unsigned count);
int main()
{
int array1[10] = { -5, 10, 20, 14, 17, 26, 42, 22, 19, -5 };
int seq;
seq = longestSequence(array1, 10);
cout << seq << endl;
return 0;
}
Выходные данные меняются при каждом запуске программы, например:
1-й пробег - 7338264
2-й пробег - 19920684
Правильный вывод для array1 = { -5, 10, 20, 14, 17, 26, 42, 22, 19, -5 };
должен быть 4
, поскольку длина самой длинной последовательности составляет 4
для {14,17,26,42}