Вводится последовательность цифр. Посчитать количество четных и сумму нечетных элементов - Assembler

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

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

С клавиатуры вводится последовательность цифр. Вывести на экран количество четных и сумму нечетных элементов. Tasm, DOSBox

Решение задачи: «Вводится последовательность цифр. Посчитать количество четных и сумму нечетных элементов»

textual
Листинг программы
_STACK  segment para stack
        db      1024 dup(?)
_STACK  ends
 
_DATA   segment
        Msg     db      'Vvedite cifry. Vyhod ENTER ', 0Dh, 0Ah, '$'
        MsgOdd  db      0Dh, 0Ah, 'Summa nechetnyh ', '$'
        MsgEven db      0Dh, 0Ah, 'Kolichestvo chetnyh ', '$'
        CrLf    db      0Dh, 0Ah, '$'
_DATA   ends
 
_TEXT   segment
        assume  cs:_TEXT, ds:_DATA, ss:_STACK
main    proc
        ;инициализация сегментного регистра данных
        mov     ax,     _DATA
        mov     ds,     ax
 
 
        mov     ah,     09h
        lea     dx,     [Msg]
        int     21h
 
        mov     bl,     0               ;сумма нечётных элементов
        mov     bh,     0               ;количество чётных элементов
        @@Repeat:
 
                mov     ah,     01h
                int     21h
                cmp     al,     0Dh
                jz      @@Break
 
                sub     al,     '0'
 
                test    al,     1
                jz      @@Even
        @@Odd:
                add     bl,     al      ;сумма нечётных элементов
                jmp     @@Repeat
 
        @@Even:
                inc     bh              ;количество чётных элементов
        jmp     @@Repeat
 
        @@Break:
 
        mov     ah,     09h
        lea     dx,     [MsgEven]
        int     21h
        mov     al,     bh
        aam
        add     ax,     '00'
        mov     dl,     ah
        mov     dh,     al
        mov     ah,     02h
        int     21h
        mov     dl,     dh
        int     21h
 
        mov     ah,     09h
        lea     dx,     [MsgOdd]
        int     21h
        mov     al,     bl
        aam
        add     ax,     '00'
        mov     dl,     ah
        mov     dh,     al
        mov     ah,     02h
        int     21h
        mov     dl,     dh
        int     21h
 
        ;завершение программы
        mov     ax,     4C00h
        int 21h
main    endp
 
_TEXT   ends
 
        end     main

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

В этом коде на языке Assembler с маленькой модификацией реализован алгоритм подсчёта количества четных и суммы нечётных чисел в последовательности. Он работает следующим образом:

  1. Сначала в регистр AX загружается стартовый адрес строки с сообщением «Vvedite cifry. Vyhod ENTER» в сегменте данных.
  2. Затем в регистр BL загружается начальное значение суммы нечётных чисел, а в регистр BH — начальное значение количества четных чисел.
  3. Далее выполняется цикл, в котором происходит следующее: — В каждый цикл с помощью команды int 21h с номером сервиса 01h (отображение одного символа) в регистр AL загружается очередной символ ввода. При этом, если введённый символ является десятичной цифрой, то он добавляется к сумме нечётных чисел (регистр BL) и к количеству четных чисел (регистр BH). — Если введённый символ является символом новой строки (0Dh), то выполняется переход на метку @@Break.
  4. Если введённый символ является нечётным числом, то происходит переход на метку @@Odd. В противном случае (если введённый символ является чётным числом) — на метку @@Even.
  5. Если введённый символ является символом новой строки (0Dh), то выполняется вывод суммы нечётных чисел (в сегменте данных по адресу [MsgOdd]) и количества четных чисел (в сегменте данных по адресу [MsgEven]) в регистре DX. Значения в регистрах BL и BH загружаются в регистр DX с предварительным добавлением символов «00» для корректного отображения результатов в 16-ричном формате.
  6. Если введённый символ является нечётным числом, то происходит переход на метку @@Odd. В противном случае (если введённый символ является чётным числом) — на метку @@Even.
  7. В конце программы выполняется вывод в регистре DX сообщения об успешном выполнении программы.

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


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

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

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