Найти максимальный элемент одномерного массива 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

Объяснение кода листинга программы

  1. Объявление переменной mass типа dw (двойное слово), содержащей массив из 5 элементов.
  2. Вычисление размера массива mass в словах и сохранение результата в переменной mass_sz.
  3. Начало выполнения программы (метка start).
  4. Установка регистра esi на адрес первого элемента массива mass.
  5. Установка регистра ebx в 0.
  6. Установка регистра ecx на значение mass_sz.
  7. Использование команды lodsw для загрузки двух младших слов из массива в регистры ax и bx.
  8. Сравнение содержимого регистров ax и bx и, при необходимости, замена значения bx на значение ax с помощью команды cmovge.
  9. Повторение шагов 7-8 до тех пор, пока не будет выполнено условие выхода из цикла (когда ecx станет равным 0).
  10. Преобразование значения регистра bx в тип signed с помощью команды movsx.
  11. Использование функции crt_printf для вывода строки title_ и значения переменной ebx.
  12. Использование функции crt__getch для получения ввода от пользователя.
  13. Конец программы (метка exit).
  14. Использование функции crt_exit для завершения программы. Следует отметить, что данный код написан для поиска максимального элемента в массиве, но он не является оптимальным решением для больших массивов из-за использования цикла. В данном случае, максимальное значение будет сохранено в регистре ebx.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.4 из 5
Похожие ответы