Найти сумму первых и последних элементов массива.Значение большей суммы вывести на экран - Assembler

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

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

задан массив из элементов:21,31,47,13,1,2,3,4,100,15.Найти сумму первых и последних элементов массива.Значение большей суммы вывести на экран соответствующим сообщением

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

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8. Array           dw      21, 31, 47, 13, 1, 2, 3, 4, 100, 15     ;массив
  9. Len             dw      ($-Array)/2                             ;длина массива
  10. SumFirst        dw      0                                       ;сумма первой половины массива
  11. SumLast         dw      0                                       ;сумма второй половины массива
  12. Max             dw      0                                       ;максимальная сумма
  13. msgMaxSum       db      'Max summa is ', '$'
  14.  
  15. .code
  16.  
  17. main    proc
  18.         mov     ax,     @data
  19.         mov     ds,     ax
  20.  
  21.         mov     cx,     Len     ;cx - длина массива
  22.         shr     cx,     1       ;cx - длина первой половины массива
  23.         mov     dx,     Len     ;dx - длина второй половины массива
  24.         sub     dx,     cx
  25.         lea     si,     Array   ;si - адрес массива
  26.         mov     ax,     0       ;обнуление переменных для суммирования
  27.         mov     SumFirst,       ax
  28.         mov     SumLast,        ax
  29.         ;суммирование первой половины массива
  30. @@ForFirst:
  31.         mov     ax,     [si]    ;считывание очередного элемента массива
  32.         add     SumFirst,       ax      ;суммирование элементов массива
  33.         add     si,     2       ;увеличение si на размер элемента в байтах
  34.         loop    @@ForFirst
  35.         ;суммирование второй половины массива
  36.         mov     cx,     dx
  37. @@ForLast:
  38.         mov     ax,     [si]    ;считывание очередного элемента массива
  39.         add     SumLast,        ax      ;суммирование элементов массива
  40.         add     si,     2       ;увеличение si на размер элемента в байтах
  41.         loop    @@ForLast
  42.  
  43.         ;сравнение сумм
  44.         mov     ax,     [SumFirst]
  45.         cmp     ax,     [SumLast]
  46.         jae     @@SaveMax
  47.         mov     ax,     [SumLast]
  48. @@SaveMax:
  49.         mov     [Max],  ax
  50.  
  51.         ;вывод результатов
  52.         mov     ah,     09h
  53.         lea     dx,     msgMaxSum
  54.         int     21h
  55.         mov     ax,     [Max]
  56.         call    Show_AX
  57.  
  58.         ;завершение программы
  59.         mov     ax,     4C00h
  60.         int     21h
  61. main    endp
  62.  
  63. ; выводит число из регистра AX на экран
  64. ; входные данные:
  65. ; ax - число для отображения
  66. Show_AX proc
  67.         push    ax
  68.         push    bx
  69.         push    cx
  70.         push    dx
  71.         push    di
  72.  
  73.         mov     cx, 10
  74.         xor     di, di          ; di - кол. цифр в числе
  75.  
  76.         ; если число в ax отрицательное, то
  77.         ;1) напечатать '-'
  78.         ;2) сделать ax положительным
  79.         or      ax, ax
  80.         jns     @@Conv
  81.         push    ax
  82.         mov     dx, '-'
  83.         mov     ah, 2           ; ah - функция вывода символа на экран
  84.         int     21h
  85.         pop     ax
  86.  
  87.         neg     ax
  88.  
  89. @@Conv:
  90.         xor     dx, dx
  91.         div     cx              ; dl = num mod 10
  92.         add     dl, '0'         ; перевод в символьный формат
  93.         inc     di
  94.         push    dx              ; складываем в стэк
  95.         or      ax, ax
  96.         jnz     @@Conv
  97.         ; выводим из стэка на экран
  98. @@Show:
  99.         pop     dx              ; dl = очередной символ
  100.         mov     ah, 2           ; ah - функция вывода символа на экран
  101.         int     21h
  102.         dec     di              ; повторяем пока di<>0
  103.         jnz     @@Show
  104.  
  105.         pop     di
  106.         pop     dx
  107.         pop     cx
  108.         pop     bx
  109.         pop     ax
  110.         ret
  111. Show_AX endp
  112.  
  113. end     main

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

  1. Объяснение кода: В этом коде используется язык ассемблера. Он предназначен для выполнения задачи поиска суммы первых и последних элементов массива. Если сумма первых элементов больше, выводится сообщение Max summa is и сумма первых элементов. Если сумма последних элементов больше, выводится сообщение Max summa is и сумма последних элементов.
  2. Список действий:
    • Объявление переменных:
    • Array - массив
    • Len - длина массива
    • SumFirst - сумма первых элементов
    • SumLast - сумма последних элементов
    • Max - максимальная сумма
    • msgMaxSum - сообщение для вывода
    • Инициализация сегментных регистров для работы с массивом
    • Вычисление длины первых и последних элементов массива
    • Суммирование первых и последних элементов массива
    • Сравнение сумм и сохранение большей суммы в переменной Max
    • Вывод сообщения и значения переменной Max на экран
    • Завершение программы

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


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

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы