Найти сумму первых и последних элементов массива.Значение большей суммы вывести на экран - 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 на экран
- Завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д