Найти максимальный элемент одномерного массива MASM - Assembler
Формулировка задачи:
Компилирует без ошибок, но exe вылетает в чем проблема? Подскажите пожалуйста
Решение задачи: «Найти максимальный элемент одномерного массива MASM»
textual
Листинг программы
.686 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc include \masm32\include\msvcrt.inc include \masm32\macros\macros.asm includelib \masm32\lib\masm32.lib includelib \masm32\lib\msvcrt.lib .data title_ db "Результат = %d ",0 mass dw 10,-20,127,-16,43,94 mass_sz = ($ - mass)/2 .code start: lea esi, mass xor ebx, ebx mov ecx, mass_sz @@: lodsw cmp ax, bx cmovge bx, ax loop @B movsx ebx,bx invoke crt_printf, ADDR title_, ebx invoke crt__getch exit: invoke crt_exit,0 end start
Объяснение кода листинга программы
- Объявление переменной
massтипаdw(двойное слово), содержащей массив из 5 элементов. - Вычисление размера массива
massв словах и сохранение результата в переменнойmass_sz. - Начало выполнения программы (метка
start). - Установка регистра
esiна адрес первого элемента массиваmass. - Установка регистра
ebxв 0. - Установка регистра
ecxна значениеmass_sz. - Использование команды
lodswдля загрузки двух младших слов из массива в регистрыaxиbx. - Сравнение содержимого регистров
axиbxи, при необходимости, замена значенияbxна значениеaxс помощью командыcmovge. - Повторение шагов 7-8 до тех пор, пока не будет выполнено условие выхода из цикла (когда
ecxстанет равным 0). - Преобразование значения регистра
bxв типsignedс помощью командыmovsx. - Использование функции
crt_printfдля вывода строкиtitle_и значения переменнойebx. - Использование функции
crt__getchдля получения ввода от пользователя. - Конец программы (метка
exit). - Использование функции
crt_exitдля завершения программы. Следует отметить, что данный код написан для поиска максимального элемента в массиве, но он не является оптимальным решением для больших массивов из-за использования цикла. В данном случае, максимальное значение будет сохранено в регистреebx.