Сделать заглавным средний символ слова - Assembler (223659)

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

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

Надо написать программу, которая будет принимать с консоли строку и символ. Необходимо оставить только те слова, содержащие этот символ, и вывести их в консоль. Помогите. Пожалуйста.

Решение задачи: «Сделать заглавным средний символ слова»

textual
Листинг программы
; fasm code...
org 100h
jmp start
 
mes0   db   13,10,'Type symbol: $'
mes1   db   13,10,'Type string: $'
mes2   db   13,10,'----------------------',13,10,'$'
crlf   db   13,10,'$'
 
char   db   0                  ; символ для поиска
poss   dw   10 dup(0)          ; позиции найденых слов (макс.10)
buff   db   80 dup(0)          ; буфер для строки
 
start: mov   dx,mes0
       call  Message
       mov   ah,1              ; вводим символ для поиска
       int   21h
       mov   [char],al         ; запомнить его..
;---------------------------------------------------
       mov   dx,mes1
       call  Message
       mov   di,buff           ; приёмник для строки
       mov   bp,poss           ; BP = позиция слова
 
@1:    xor   bl,bl             ; сбросим флаг найденного слова
       mov   [bp],di           ; запомнить адрес начала слова
       add   bp,2
@inp:  mov   ah,1              ; принимаем строку..
       int   21h
       stosb                   ; сохраняем её в ES:DI
 
       cmp   al,13             ; Enter - выход!
       je    @stop
       cmp   al,[char]         ; есть нужная буква в слове?
       jne   @fuck
       inc   bl                ; да - флаг найденного.
@fuck: cmp   al,' '            ; после пробела, начать всё/сначала
       je    @next
       jmp   @inp
 
@next: or    bl,bl             ; была такая буква в слове?
       jne   @ok
       sub   bp,2
       mov   word[bp],0        ; нет! Обнуляем адрес начала слова
@ok:   jmp   @1                ; да - на следующее слово в строке..
 
;---------------------------------------------------
@stop: mov   dx,mes2           ; Юзер закончил ввод.
       call  Message
 
       mov   bp,poss           ; указатель на позицию слова в строке
@prn:  mov   si,[bp]
       or    si,si             ; это последнее слово?
       je    @exit
       add   bp,2              ; нет - сдвигаем указатель
 
@2:    lodsb                   ; выводим все символы слова
       cmp   al,' '            ;   ..до пробела,
       je    @3
       cmp   al,13             ;   ..или до точки в конце строки
       je    @exit
       int   29h               ; печать символов на экране.
       jmp   @2
 
@3:    mov   dx,crlf           ; вывели очередное слово.
       call  Message           ; перевод строки.
       jmp   @prn              ; выводим сл.слово..
;---------------------------------------------------
@exit: xor   ax,ax           ; ждём любую клавишу..
       int   16h
       int   20h              ; выход в DOS!!!
 
;eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Message:         ;<------; функция вывода сообщений
    mov   ah,9
    int   21h
    ret

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


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

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

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