Найти сумму всех отрицательных элементов двухмерного массива, максимальный положительный элемент и его местоположение - Assembler

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

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

Проблема, нужно переписать программу чтобы она работала для двухбайтовых элементов массива, ниже листинг, заранее спасибо Что она должна делать: Находить сумму всех отрицательных элементов двухмерного массива, а среди положительных находить максимальный и указывать его местоположение Для однобайтовых и двухбайтовых элементов массива

Решение задачи: «Найти сумму всех отрицательных элементов двухмерного массива, максимальный положительный элемент и его местоположение»

textual
Листинг программы
cseg segment
    assume cs:cseg,ds:cseg,es:cseg
    org 0
start:    jmp beg
mas1 dw 7,-2,4,5,-8
     dw 2,4,-1,-9,2
     dw 7,8,9,-4,-2
     dw 4,5,6, 2,-1
     lenx dw 5
     leny dw 4
 
sum     dw 0
 
max    dw 0
sign    db  '+'
mess1 db "Sum of negative is $"
mess2 db "Max of positive is $"
 
beg: mov ax,cs
 
     mov ds,ax
     mov es,ax
     cld
     mov ax,lenx
     mov cx,leny
     mul cx
     mov cx,ax
     mov max,0
     mov sum,0
 
     mov si,offset mas1; начало данных
m1:
     lodsw
     or ax, ax
     jns m2
     add [sum], ax
     jmp next
m2:
     cmp ax, [max]
     jle next
     mov [max], ax
next:
     loop m1
 
     mov dx,offset mess1
     mov ah,9
     int 21h
     mov ax,sum
     call printval
     mov dx,offset mess2
     mov ah,9
     int 21h
     mov ax,max
     call printval
     mov ax,4C00h
     int 21h
 
printval:
        push    bx
        mov     bx,     10
        xor     cx,     cx      ;символов в модуле числа
        or      ax,     ax
        jns     @@div
                neg     ax
                push    ax
                mov     ah,     02h
                mov     dl,     '-'
                int     21h
                pop     ax
        @@div:
                xor     dx,     dx
                div     bx
                push    dx
                inc     cx      ;количество цифр в числе
                or      ax,     ax
        jnz     @@div
        mov     ah,     02h
        @@store:
                pop     dx
                add     dl,     '0'
                int     21h
        loop    @@store
        pop     bx
    ret
 
        cseg ends
    end start

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

  1. Описание сегментов и переменных:
    • cseg - сегмент кода
    • mas1 - двумерный массив (16 байт)
    • sum - сумма отрицательных элементов (4 байта)
    • max - максимальный положительный элемент (4 байта)
    • sign - знак для вывода суммы и максимального элемента ('+')
    • mess1, mess2 - строки для вывода результатов (10 байт каждая)
    • lenx, leny - длины строк в массиве mas1 (4 байта каждая)
    • printval - подпрограмма для печати чисел (10 байт)
  2. Описание работы программы: Программа выполняет следующие действия:
    • Инициализирует сегменты данных и кода равными CS и DS соответственно
    • Проверяет длину массива mas1 и сохраняет ее в переменных lenx и leny
    • Инициализирует переменные sum и max нулевыми значениями
    • Находит сумму всех отрицательных элементов массива и сохраняет ее в переменной sum
    • Находит максимальный положительный элемент массива и сохраняет его в переменной max
    • Выводит результаты на экран
  3. Решение: Для решения задачи используется цикл, который проходит по всем элементам массива. Если элемент отрицательный, он добавляется к переменной sum. Если элемент больше максимального значения, он становится новым максимальным значением. После завершения цикла программа выводит результаты на экран. Для печати чисел используется подпрограмма printval, которая преобразует число в строку и выводит его на экран. При этом используются символы '+' и '-' для обозначения положительных и отрицательных чисел соответственно.

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


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

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

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