Подсчет количества слов на заданную букву - 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 - символ возврата каретки.
- В данной строке присутствует символ '$', который используется для обозначения конца строки в ассемблере.
- В данном коде нет никаких действий, связанных с подсчетом количества слов на заданную букву.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д