Подсчет количества слов на заданную букву - 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: $'

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

  1. Задается строка Type string: $
  2. Используется директива db для определения переменной mess как строки, состоящей из двух символов - 13 и 10. 13 - это символ перевода строки, а 10 - символ возврата каретки.
  3. В данной строке присутствует символ '$', который используется для обозначения конца строки в ассемблере.
  4. В данном коде нет никаких действий, связанных с подсчетом количества слов на заданную букву.

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


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

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

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