Массив: Получить сумму членов последовательности, принадлежащих [2;9] - Assembler

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

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

Снова я , помогите с программой ( говоря простым языком , кто не занят ,или кого не затруднит , напишите ее -_-) Даны целые числа a1, a2, ..., a10.. В этой последовательности все члены последовательности, больше 2, заменить 0. Получить сумму членов последовательности, принадлежащих [2;9]. В целочисленном массиве A(N) определить число, встречающееся максимальное количество раз. Если их несколько, то вывести одно из них. Спасибо.

Решение задачи: «Массив: Получить сумму членов последовательности, принадлежащих [2;9]»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       db      3, 2, 9, 0, 8, 4, 7, 1, 9, 5
        Sum     dw      ?
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;все члены последовательности, больше 2, заменить 0
        lea     si,     A
        mov     cx,     10
@@1:
        cmp     byte ptr [si],  2
        jbe     @@Next1
        mov     byte ptr [si],  0
@@Next1:
        add     si,     1
        loop    @@1
 
        ;Получить сумму членов последовательности, принадлежащих [2;9].
        lea     si,     A
        mov     cx,     10
        mov     bx,     0       ;сумма
@@2:
        mov     al,     [si]
        cmp     al,     2
        jb      @@Next2
        cmp     al,     9
        ja      @@Next2
        add     bl,     al
        adc     bh,     0
@@Next2:
        add     si,     1
        loop    @@2
        mov     Sum,    bx
 
        ;определить число, встречающееся максимальное количество раз.
        ;Если их несколько, то вывести одно из них.
        lea     si,     A
        mov     cx,     10-1
        mov     dl,     0       ;искомое число
        mov     dh,     0       ;количество в массиве
@@3:
        mov     al,     [si]
        add     si,     1
        mov     bh,     1
        mov     di,     si
        add     di,     1
        push    cx
        @@ForJ:
                cmp     al,     [di]
                jne     @@NextJ
                inc     bh
        @@NextJ:
                add     di,     1
                loop    @@ForJ
        pop     cx
        cmp     bh,     dh
        jbe     @@Next3
        mov     dh,     bh
        mov     dl,     al
@@Next3:
        loop    @@3
 
        mov     al,     dl
        aam
        add     ax,     '00'
        mov     dl,     ah
        mov     dh,     al
        mov     ah,     02
        int     21h
        mov     dl,     dh
        int     21h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

  1. Создаются переменные:
    • A - массив данных 3, 2, 9, 0, 8, 4, 7, 1, 9, 5
    • Sum - двойное слово для хранения суммы
  2. Инициализация сегментов:
    • Устанавливается размер стека
    • Устанавливается размер сегмента данных
  3. Начало процедуры:
    • Устанавливается указатель на начало массива A
    • Устанавливается количество элементов в массиве (10)
  4. Члены последовательности, больше 2, заменяются на 0:
    • Перебираются все элементы массива
    • Если элемент меньше или равен 2, то он заменяется на 0
  5. Получение суммы членов последовательности, принадлежащих [2;9]:
    • Считается сумма всех элементов массива, которые находятся в диапазоне от 2 до 9
  6. Определение числа, встречающегося максимальное количество раз:
    • Подсчитывается количество вхождений каждого элемента в массив
    • Находится число, которое встречается максимальное количество раз
  7. Вывод результата на экран:
    • Полученное число выводится на экран
  8. Завершение программы:
    • Программа завершается.

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

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