Поиск буквы в строке - 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
Объяснение кода листинга программы
- Объявление переменных:
- Название переменной:
mes - Значение:
'Assembler$' - Название переменной:
len - Значение: длина строки
'Assembler$' - Название переменной:
res - Значение:
'kolichestvo povtorov = $'
- Название переменной:
- Ввод символа с клавиатуры:
mov ah,01h;- заносим символint 21h- вызов процедуры ввода символа
- Поиск и подсчёт совпадений:
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- переход к процедуре вывода результата
- Вывод результата:
mov ah,09h- установка номера сервиса для вывода строкиmov dx,offset res- передача адреса строки для выводаint 21h- вызов процедуры для вывода строкиmov al,bl- запись значения счётчика повторов в aladd al,'0'- конвертация числа в символint 29h- вызов процедуры для вывода значенияmov ah,1- установка номера сервиса для ввода символаint 21h- вызов процедуры ввода символаmov ax,4c00h- завершение программыint 21h- вызов процедуры завершения программы