Подсчет количества слов на заданную букву - Assembler
Формулировка задачи:
Здравствуйте, не могу составить программу,которая подсчитывает количество слов на заданную букву. Всегда в количестве выдает 0, помогите пожалуйста.
EXTRN Cursor:Far,Clear:Far,Write_Str:Far,Vvod:Far,Vyvod:Far
;------------------ Сегмент стека -------------------------
Stacksg SEGMENT PARA STACK
DW 128 DUP(?)
Stacksg ENDS
;--------------------- Сегмент данных---------------------
Datasg SEGMENT PARA
STR1 LABEL BYTE
MAXLEN DB 100
STRLEN DB ?
FIELD DB 100 dup("$")
STR2 DB " $"
A DB 0
B DB 0
Datasg ENDS
;---------------------Кодовый сегмент --------------------
Codesg SEGMENT PARA
begin PROC FAR
;Пролог EXE-программы.
;Выполнение первого требования.
ASSUME CS:Codesg, DS:Datasg, SS:Stacksg
;Выполнение второго требования.
PUSH DS ; Записать DS в стек.
;Выполнение третьего требования.
XOR AX,AX ; Установить в нуль AX.
PUSH AX ; Записать AX в стек.
;Выполнение четвертого требования.
MOV AX,Datasg ; Занести адрес
MOV DS,AX ; Datasg в DS.
;Завершение пролога EXE-программы.
CALL Clear
MOV DX,0000H
CALL Cursor
; Ввод строки
MOV ah,0AH
LEA DX,STR1
int 21h
R2:
mov cx,0
mov cl,strlen
mov di,0
L1: mov bl, byte ptr FIELD[di]
cmp bl, 41h ; "A"
jb sled ; if <=
cmp bl, 5AH ; "Z"
ja sled
add bl, 20H
mov byte ptr FIELD[di],bl ; возвращаем на место
sled: inc di
loop L1
MOV dx,0200H
CALL Cursor
MOV ah,01 ; ввод буквы
int 21h
mov bl, al
cmp bl, 41h ; "A"
jb S3 ; if <=
cmp bl, 5AH ; "Z"
ja S3
add bl, 20H
mov A,bl
S3: CLD ; проверка первого слова
MOV B,' '
MOV AX,0 ; счетчик
MOV DI,0
MOV BL, byte ptr FIELD[DI]
CMP BL,A ; сравнение с буквой
JNZ M31 ; esli ne nol
INC AX
M31:
INC DI
;M3:
; ??????
MOV DX,0300H
CALL Cursor
MOV BX,AX
CALL Vyvod
RET
begin ENDP
Codesg ENDS
END beginРешение задачи: «Подсчет количества слов на заданную букву»
textual
Листинг программы
mess db 13,10,'Type string: $'
Объяснение кода листинга программы
- Задается строка
Type string: $ - Используется директива db для определения переменной mess как строки, состоящей из двух символов - 13 и 10. 13 - это символ перевода строки, а 10 - символ возврата каретки.
- В данной строке присутствует символ '$', который используется для обозначения конца строки в ассемблере.
- В данном коде нет никаких действий, связанных с подсчетом количества слов на заданную букву.