Вывод элементов, находящихся после максимального элемента в массиве - Assembler

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

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

Требуется помощь начинающему программисту в ассемблере. Задание:

Дан одномерный массив, вывести элементы, находящиеся после максимального элемента.

Примерно как должен выглядеть код:
Листинг программы
  1. masm
  2. model small
  3. .stack 256
  4. .data
  5. a dw ?
  6. b dw ?
  7. c dw ?
  8. h dw ?
  9. .code
  10. .startup
  11. jmp main
  12. include io1.inc
  13. main:
  14. call Procinint
  15. mov a, ax
  16. call Procinint
  17. mov b, ax
  18. call Procinint
  19. mov c, ax
  20. mov ax,c
  21. mov bx,b
  22. imul bx
  23. mov h,ax
  24. mov ax,a
  25. add ax,b
  26. mov b,ax
  27. mov ax,h
  28. div b
  29. mov dh, 1
  30. mov dl, 5
  31. call procoutnum
  32. .exit
  33. end

Заранее спасибо!!!

Решение задачи: «Вывод элементов, находящихся после максимального элемента в массиве»

textual
Листинг программы
  1. masm
  2. model small
  3. .stack 256
  4. .data
  5. Mosiv   dw      45, 65, 78, 88, 10, 555, 12, 45, 88, 97, 100
  6. dlena   dw      ($-Mosiv)/2
  7. .code
  8. .startup
  9. jmp main
  10. include io1.inc
  11. main:
  12. mov ax, mosiv
  13. mov dh, 0
  14. mov dl, 5
  15. call procoutnum
  16.         lea     si,     [Mosiv]
  17.         mov     cx,     [dlena]
  18.         mov     di,     si
  19.         mov     ax,     [si]
  20.         mov     bx,     cx
  21. @@ForMax:
  22.         cmp     ax,     [si]
  23.         jle     @@Next
  24.         mov     di,     si
  25.         mov     ax,     [si]
  26.         mov     bx,     cx
  27. @@Next:
  28.         add     si,     2
  29.         loop    @@ForMax
  30.  
  31.         mov     cx,     bx
  32.         dec     cx
  33.         mov     si,     di
  34.         add     si,     2
  35.         jcxz    @@Exit
  36. @@ForOut:
  37.         mov     ax,     [si]
  38.         call    procoutnum
  39.         add     si,     2
  40.         loop    @@ForOut
  41. @@Exit:
  42. .exit
  43. end

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

  1. Объявляются переменные:
    • Mosiv - массив чисел [45, 65, 78, 88, 10, 555, 12, 45, 88, 97, 100],
    • dlena - длина массива Mosiv в байтах.
  2. Инициализируется программа и переход на метку main.
  3. Выводится содержимое переменной Mosiv.
  4. Устанавливаются значения регистров:
    • ax получает значение переменной Mosiv,
    • dh устанавливается в 0,
    • dl устанавливается в 5.
  5. Вызывается подпрограмма procoutnum.
  6. Загружается адрес массива Mosiv в регистр si.
  7. Загружается длина массива Mosiv в регистр cx.
  8. Копируются значения регистров si и di.
  9. Загружается значение первого элемента массива в регистр ax и значение длины массива в регистр bx.
  10. Начинается цикл ForMax.
  11. Сравнивается значение регистра ax с текущим элементом массива.
  12. Если текущий элемент массива меньше или равен значению регистра ax, выполняется переход к метке Next.
  13. Иначе, обновляются значения регистров di (хранит адрес максимального элемента) и ax (хранит значение максимального элемента).
  14. Обновляются значения регистра si (указывает на следующий элемент массива) и регистра cx (количество оставшихся элементов).
  15. Проверяется условие окончания цикла ForMax.
  16. Если условие не выполняется, выполняется переход к метке Exit.
  17. Устанавливается значение регистра cx равным значению регистра bx (количество элементов массива - 1).
  18. Уменьшается значение регистра cx на 1.
  19. Копируется значение регистра di в регистр si (указывает на элемент после максимального элемента).
  20. Увеличивается значение регистра si на 2 (размер элемента массива).
  21. Проверяется условие окончания цикла ForOut.
  22. Выводится текущий элемент массива с помощью подпрограммы procoutnum.
  23. Увеличивается значение регистра si на 2 (размер элемента массива).
  24. Проверяется условие окончания цикла ForOut.
  25. Если условие выполняется, выполняется переход к метке Exit.
  26. Завершение программы.

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


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

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

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы