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

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

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

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

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

Примерно как должен выглядеть код:
masm
model small
.stack 256
.data
a dw ?
b dw ?
c dw ?
h dw ?
.code
.startup
jmp main
include io1.inc
main:
call Procinint
mov a, ax
call Procinint
mov b, ax
call Procinint
mov c, ax
mov ax,c
mov bx,b
imul bx
mov h,ax
mov ax,a
add ax,b
mov b,ax
mov ax,h
div b
mov dh, 1
mov dl, 5
call procoutnum
.exit
end

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

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

textual
Листинг программы
masm
model small
.stack 256
.data
Mosiv   dw      45, 65, 78, 88, 10, 555, 12, 45, 88, 97, 100
dlena   dw      ($-Mosiv)/2
.code
.startup
jmp main
include io1.inc
main:
mov ax, mosiv
mov dh, 0
mov dl, 5
call procoutnum
        lea     si,     [Mosiv]
        mov     cx,     [dlena]
        mov     di,     si
        mov     ax,     [si]
        mov     bx,     cx
@@ForMax:
        cmp     ax,     [si]
        jle     @@Next
        mov     di,     si
        mov     ax,     [si]
        mov     bx,     cx
@@Next:
        add     si,     2
        loop    @@ForMax
 
        mov     cx,     bx
        dec     cx
        mov     si,     di
        add     si,     2
        jcxz    @@Exit
@@ForOut:
        mov     ax,     [si]
        call    procoutnum
        add     si,     2
        loop    @@ForOut
@@Exit:
.exit
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
Похожие ответы