Найти сумму первых и последних элементов массива.Значение большей суммы вывести на экран - Assembler
Формулировка задачи:
задан массив из элементов:21,31,47,13,1,2,3,4,100,15.Найти сумму первых и последних элементов массива.Значение большей суммы вывести на экран соответствующим сообщением
Решение задачи: «Найти сумму первых и последних элементов массива.Значение большей суммы вывести на экран»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- Array dw 21, 31, 47, 13, 1, 2, 3, 4, 100, 15 ;массив
- Len dw ($-Array)/2 ;длина массива
- SumFirst dw 0 ;сумма первой половины массива
- SumLast dw 0 ;сумма второй половины массива
- Max dw 0 ;максимальная сумма
- msgMaxSum db 'Max summa is ', '$'
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov cx, Len ;cx - длина массива
- shr cx, 1 ;cx - длина первой половины массива
- mov dx, Len ;dx - длина второй половины массива
- sub dx, cx
- lea si, Array ;si - адрес массива
- mov ax, 0 ;обнуление переменных для суммирования
- mov SumFirst, ax
- mov SumLast, ax
- ;суммирование первой половины массива
- @@ForFirst:
- mov ax, [si] ;считывание очередного элемента массива
- add SumFirst, ax ;суммирование элементов массива
- add si, 2 ;увеличение si на размер элемента в байтах
- loop @@ForFirst
- ;суммирование второй половины массива
- mov cx, dx
- @@ForLast:
- mov ax, [si] ;считывание очередного элемента массива
- add SumLast, ax ;суммирование элементов массива
- add si, 2 ;увеличение si на размер элемента в байтах
- loop @@ForLast
- ;сравнение сумм
- mov ax, [SumFirst]
- cmp ax, [SumLast]
- jae @@SaveMax
- mov ax, [SumLast]
- @@SaveMax:
- mov [Max], ax
- ;вывод результатов
- mov ah, 09h
- lea dx, msgMaxSum
- int 21h
- mov ax, [Max]
- call Show_AX
- ;завершение программы
- mov ax, 4C00h
- int 21h
- main endp
- ; выводит число из регистра AX на экран
- ; входные данные:
- ; ax - число для отображения
- Show_AX proc
- push ax
- push bx
- push cx
- push dx
- push di
- mov cx, 10
- xor di, di ; di - кол. цифр в числе
- ; если число в ax отрицательное, то
- ;1) напечатать '-'
- ;2) сделать ax положительным
- or ax, ax
- jns @@Conv
- push ax
- mov dx, '-'
- mov ah, 2 ; ah - функция вывода символа на экран
- int 21h
- pop ax
- neg ax
- @@Conv:
- xor dx, dx
- div cx ; dl = num mod 10
- add dl, '0' ; перевод в символьный формат
- inc di
- push dx ; складываем в стэк
- or ax, ax
- jnz @@Conv
- ; выводим из стэка на экран
- @@Show:
- pop dx ; dl = очередной символ
- mov ah, 2 ; ah - функция вывода символа на экран
- int 21h
- dec di ; повторяем пока di<>0
- jnz @@Show
- pop di
- pop dx
- pop cx
- pop bx
- pop ax
- ret
- Show_AX endp
- end main
Объяснение кода листинга программы
- Объяснение кода:
В этом коде используется язык ассемблера. Он предназначен для выполнения задачи поиска суммы первых и последних элементов массива. Если сумма первых элементов больше, выводится сообщение
Max summa is
и сумма первых элементов. Если сумма последних элементов больше, выводится сообщениеMax summa is
и сумма последних элементов. - Список действий:
- Объявление переменных:
- Array - массив
- Len - длина массива
- SumFirst - сумма первых элементов
- SumLast - сумма последних элементов
- Max - максимальная сумма
- msgMaxSum - сообщение для вывода
- Инициализация сегментных регистров для работы с массивом
- Вычисление длины первых и последних элементов массива
- Суммирование первых и последних элементов массива
- Сравнение сумм и сохранение большей суммы в переменной Max
- Вывод сообщения и значения переменной Max на экран
- Завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д