Найти наименьшее в массиве из 10-ти двухбайтных чисел - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите написать прогу . Дан массив из 10 двухбайтовых чисел. Найти среди них наименьшее и вывести на экран в символьной форме . Прога должна состоять из сегментов данных, кода и стека . Оченб надо . Спасибо

Решение задачи: «Найти наименьшее в массиве из 10-ти двухбайтных чисел»

textual
Листинг программы
.386
      .model flat, stdcall
      option casemap :none
 
      include \masm32\include\windows.inc
 
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\msvcrt.inc
 
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\msvcrt.lib
 
.data
mas dw 142,138,214,596,745,124,5432,235,753,895
length_mas equ ($-mas)/2
msg db "min = %d",0
s db 60 dup(0)
 
.code
 
 Main proc
   LOCAL hOutPut          :DWORD ;хэндл для вывода
   LOCAL nWriten          :DWORD ;напечатано байт
 
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOutPut, eax 
 
xor ebx, ebx
lea esi, mas
mov ecx, length_mas
mov bx, word ptr [esi]
_l:
lodsw
cmp ax, bx
jnb _no
mov bx, ax
_no:
loop _l
 
_out:
invoke wsprintf, offset s, offset msg, ebx
invoke lstrlen, addr s
inc eax
mov nWriten, eax
invoke WriteConsole, hOutPut, addr s, nWriten, addr nWriten, NULL
 
invoke ExitProcess,0
 
Main endp
end Main

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

  1. .386 - это идентификатор версии ассемблера.
  2. .model flat, stdcall - это описание модели памяти и сегментации кода.
  3. option casemap :none - это настройка соответствия регистровых и регистровых символов.
  4. include \masm32\include\windows.inc - это включение файла с определениями функций Windows API.
  5. include \masm32\include\user32.inc - это включение файла с определениями функций API пользовательского режима.
  6. include \masm32\include\kernel32.inc - это включение файла с определениями функций API ядра Windows.
  7. include \masm32\include\msvcrt.inc - это включение файла с определениями функций API стандартной библиотеки C.
  8. includelib \masm32\lib\user32.lib - это подключение библиотеки функций API пользовательского режима.
  9. includelib \masm32\lib\kernel32.lib - это подключение библиотеки функций API ядра Windows.
  10. includelib \masm32\lib\msvcrt.lib - это подключение библиотеки функций API стандартной библиотеки C.
  11. .data - это раздел данных.
  12. mas dw 142,138,214,596,745,124,5432,235,753,895 - это определение массива из 10 двухбайтных чисел.
  13. length_mas equ ($-mas)/2 - это вычисление длины массива.
  14. msg db min = %d,0 - это строка, которая будет выводиться на экран после нахождения минимума.
  15. s db 60 dup(0) - это буфер для вывода.
  16. .code - это раздел кода.
  17. Main proc - это определение главной функции программы.
  18. invoke GetStdHandle, STD_OUTPUT_HANDLE - это получение дескриптора стандартного вывода.
  19. mov hOutPut, eax - это сохранение дескриптора в переменной.
  20. xor ebx, ebx - это обнуление рабочего регистра.
  21. lea esi, mas - это установка указателя на начало массива.
  22. mov ecx, length_mas - это установка счетчика длины массива.
  23. mov bx, word ptr [esi] - это загрузка первого элемента массива в рабочий регистр.
  24. _l: - это метка цикла.
  25. lodsw - это загрузка двухбайтного числа в рабочий регистр.
  26. cmp ax, bx - это сравнение текущего и предыдущего элементов массива.
  27. jnb _no - это переход к следующему элементу, если текущий больше предыдущего.
  28. mov bx, ax - это обновление предыдущего элемента.
  29. loop _l - это цикл до тех пор, пока не будут пройдены все элементы массива.
  30. _out: - это метка выхода из цикла.
  31. invoke wsprintf, offset s, offset msg, ebx - это форматирование строки с минимумом из массива.
  32. invoke lstrlen, addr s - это определение длины отформатированной строки.
  33. inc eax - это увеличение счетчика количества выведенных символов.
  34. invoke WriteConsole, hOutPut, addr s, eax, addr nWriten, NULL - это вывод отформатированной строки на экран.
  35. invoke ExitProcess,0 - это завершение работы программы.
  36. Main endp - это окончание определения главной функции программы.
  37. end Main - это завершение программы.

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


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

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

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