Вывести количество чисел, попадающих в отрезок [a , b] - Assembler

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

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

3) С клавиатуры вводится последовательность цифр. Вывести количество чисел, попадающих в отрезок [a , b], a и b также вводятся с клавиатуры. Помогите! Заранее спасибо. Выложил материал по которому нужно будет сделать! 6 лабораторная.

Решение задачи: «Вывести количество чисел, попадающих в отрезок [a , b]»

textual
Листинг программы
_STACK  segment para stack
        db      1024 dup(?)
_STACK  ends
 
_DATA   segment
        PromptA db      'Vvedite A: ', 0Dh, 0Ah, '$'
        PromptB db      0Dh, 0Ah, 'Vvedite B: ', 0Dh, 0Ah, '$'
        Msg     db      0Dh, 0Ah, 'Vvedite cifry. Vyhod ENTER ', 0Dh, 0Ah, '$'
        MsgCount db     0Dh, 0Ah, 'Kolichestvo cifr [a, b]: ', 0Dh, 0Ah, '$'
        CrLf    db      0Dh, 0Ah, '$'
        A       db      ?
        B       db      ?
        Count   db      ?
_DATA   ends
 
_TEXT   segment
        assume  cs:_TEXT, ds:_DATA, ss:_STACK
main    proc
        ;инициализация сегментного регистра данных
        mov     ax,     _DATA
        mov     ds,     ax
 
 
        mov     ah,     09h
        lea     dx,     [PromptA]
        int     21h
        mov     ah,     01h
        int     21h
        sub     al,     '0'
        mov     [A],    al
 
        mov     ah,     09h
        lea     dx,     [PromptB]
        int     21h
        mov     ah,     01h
        int     21h
        sub     al,     '0'
        mov     [B],    al
 
        mov     ah,     09h
        lea     dx,     [Msg]
        int     21h
 
        mov     [Count],0               ;количество искомых элементов
        @@Repeat:
 
                mov     ah,     01h
                int     21h
                cmp     al,     0Dh
                jz      @@Break
 
                sub     al,     '0'
 
                cmp     al,     [A]
                jb      @@Repeat
                cmp     al,     [B]
                ja      @@Repeat
                inc     [Count]
        jmp     @@Repeat
 
        @@Break:
 
        mov     ah,     09h
        lea     dx,     [MsgCount]
        int     21h
        mov     al,     [Count]
        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

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

  1. Количество чисел, попадающих в отрезок [a, b] Выводим сообщение с призывом ввести числа, затем с помощью цикла и условных операторов проверяем каждое введенное число. Если число больше или равно a и меньше или равно b, увеличиваем счетчик. После ввода всех чисел выводим количество, удовлетворяющих условию.
  2. Переменные
    • A, B, Count - переменные для хранения введенных чисел
    • PromptA, PromptB, Msg, MsgCount - переменные для хранения текстовых сообщений
  3. Условие цикла Цикл повторяется до тех пор, пока введенное число не будет равно 0Dh (что означает нажатие клавиши ENTER).
  4. Условные операторы
    • Cmp al, 0Dh - проверка, равно ли введенное число 0Dh
    • Jb @@Repeat - если число меньше 0Dh, продолжить цикл
    • Cmp al, [A] - проверка, не больше ли введенное число значения переменной A
    • Jb @@Repeat - если число меньше значения переменной A, продолжить цикл
    • Cmp al, [B] - проверка, не меньше ли введенное число значения переменной B
    • Ja @@Repeat - если число больше значения переменной B, продолжить цикл
    • Inc [Count] - увеличение счетчика, если число удовлетворяет условию
  5. Вывод результата После окончания цикла выводим значение счетчика.

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


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

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

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