Поиск буквы в строке - Assembler

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

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

Мне нужно написать программу, которая ищет символ s в строке и пишет сколько раз он встречается, есть такая программа, но почему-то не считает. Помогите, пожалуйста.
name a
.model small
.stack 100h
 
.data
mes db 'Assembler$'
res db 'kolichestvo povtorov = $'
 
.code
main:
mov ax,@data
mov ds,ax
 
mov al,01h ; zanosim simvol 
int 21h
 
mov bx,0 ; schetchik povtorov
mov cx,20
 
m1:
cmp mes[bx], al 
je Lequal
eqback:
loop m1
jmp print
 
Lequal: 
inc cx  
jmp eqback  
 
print:
mov ah,09h
mov dx,offset res
int 21h
 
mov ah,02h
mov dx, bx
int 21h
 
end main

Решение задачи: «Поиск буквы в строке»

textual
Листинг программы
name a
.model small
.stack 100h
 
.data
mes db 'Assembler$'
len dw $-mes
res db 'kolichestvo povtorov = $'
 
.code
main:
mov ax,@data
mov ds,ax
 
mov ah,01h ; zanosim simvol
int 21h
 
mov bx,0 ; schetchik povtorov
mov cx,len
mov si,0
m1:
cmp mes[si], al
jne next
inc bx
next:
inc si
loop m1
jmp print
 
print:
mov ah,09h
mov dx,offset res
int 21h
mov  al,bl
add  al,'0'
int  29h
 
mov  ah,1
int  21h
mov  ax,4c00h
int  21h
 
end main

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

  1. Объявление переменных:
    • Название переменной: mes
    • Значение: 'Assembler$'
    • Название переменной: len
    • Значение: длина строки 'Assembler$'
    • Название переменной: res
    • Значение: 'kolichestvo povtorov = $'
  2. Ввод символа с клавиатуры:
    • mov ah,01h; - заносим символ
    • int 21h - вызов процедуры ввода символа
  3. Поиск и подсчёт совпадений:
    • mov bx,0 - инициализация счётчика повторов
    • mov cx,len - инициализация счётчика цикла
    • mov si,0 - инициализация индекса строки
    • m1: - метка начала цикла
    • cmp mes[si], al - сравнение символа с текущим элементом строки
    • jne next - переход к следующему элементу при неравенстве
    • inc bx - инкремент счётчика повторов
    • next: - метка для перехода
    • inc si - увеличение индекса
    • loop m1 - повторение цикла для всех символов
    • jmp print - переход к процедуре вывода результата
  4. Вывод результата:
    • mov ah,09h - установка номера сервиса для вывода строки
    • mov dx,offset res - передача адреса строки для вывода
    • int 21h - вызов процедуры для вывода строки
    • mov al,bl - запись значения счётчика повторов в al
    • add al,'0' - конвертация числа в символ
    • int 29h - вызов процедуры для вывода значения
    • mov ah,1 - установка номера сервиса для ввода символа
    • int 21h - вызов процедуры ввода символа
    • mov ax,4c00h - завершение программы
    • int 21h - вызов процедуры завершения программы

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


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

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

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