Вывести количество чисел, попадающих в отрезок [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
Объяснение кода листинга программы
- Количество чисел, попадающих в отрезок [a, b] Выводим сообщение с призывом ввести числа, затем с помощью цикла и условных операторов проверяем каждое введенное число. Если число больше или равно a и меньше или равно b, увеличиваем счетчик. После ввода всех чисел выводим количество, удовлетворяющих условию.
- Переменные
- A, B, Count - переменные для хранения введенных чисел
- PromptA, PromptB, Msg, MsgCount - переменные для хранения текстовых сообщений
- Условие цикла Цикл повторяется до тех пор, пока введенное число не будет равно 0Dh (что означает нажатие клавиши ENTER).
- Условные операторы
- Cmp al, 0Dh - проверка, равно ли введенное число 0Dh
- Jb @@Repeat - если число меньше 0Dh, продолжить цикл
- Cmp al, [A] - проверка, не больше ли введенное число значения переменной A
- Jb @@Repeat - если число меньше значения переменной A, продолжить цикл
- Cmp al, [B] - проверка, не меньше ли введенное число значения переменной B
- Ja @@Repeat - если число больше значения переменной B, продолжить цикл
- Inc [Count] - увеличение счетчика, если число удовлетворяет условию
- Вывод результата После окончания цикла выводим значение счетчика.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д