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