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

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

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

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

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

textual
Листинг программы
  1. ; fasm code...
  2. org 100h
  3. jmp start
  4.  
  5. mes0   db   13,10,'Type symbol: $'
  6. mes1   db   13,10,'Type string: $'
  7. mes2   db   13,10,'----------------------',13,10,'$'
  8. crlf   db   13,10,'$'
  9.  
  10. char   db   0                  ; символ для поиска
  11. poss   dw   10 dup(0)          ; позиции найденых слов (макс.10)
  12. buff   db   80 dup(0)          ; буфер для строки
  13.  
  14. start: mov   dx,mes0
  15.        call  Message
  16.        mov   ah,1              ; вводим символ для поиска
  17.        int   21h
  18.        mov   [char],al         ; запомнить его..
  19. ;---------------------------------------------------
  20.        mov   dx,mes1
  21.        call  Message
  22.        mov   di,buff           ; приёмник для строки
  23.        mov   bp,poss           ; BP = позиция слова
  24.  
  25. @1:    xor   bl,bl             ; сбросим флаг найденного слова
  26.        mov   [bp],di           ; запомнить адрес начала слова
  27.        add   bp,2
  28. @inp:  mov   ah,1              ; принимаем строку..
  29.        int   21h
  30.        stosb                   ; сохраняем её в ES:DI
  31.  
  32.        cmp   al,13             ; Enter - выход!
  33.        je    @stop
  34.        cmp   al,[char]         ; есть нужная буква в слове?
  35.        jne   @fuck
  36.        inc   bl                ; да - флаг найденного.
  37. @fuck: cmp   al,' '            ; после пробела, начать всё/сначала
  38.        je    @next
  39.        jmp   @inp
  40.  
  41. @next: or    bl,bl             ; была такая буква в слове?
  42.        jne   @ok
  43.        sub   bp,2
  44.        mov   word[bp],0        ; нет! Обнуляем адрес начала слова
  45. @ok:   jmp   @1                ; да - на следующее слово в строке..
  46.  
  47. ;---------------------------------------------------
  48. @stop: mov   dx,mes2           ; Юзер закончил ввод.
  49.        call  Message
  50.  
  51.        mov   bp,poss           ; указатель на позицию слова в строке
  52. @prn:  mov   si,[bp]
  53.        or    si,si             ; это последнее слово?
  54.        je    @exit
  55.        add   bp,2              ; нет - сдвигаем указатель
  56.  
  57. @2:    lodsb                   ; выводим все символы слова
  58.        cmp   al,' '            ;   ..до пробела,
  59.        je    @3
  60.        cmp   al,13             ;   ..или до точки в конце строки
  61.        je    @exit
  62.        int   29h               ; печать символов на экране.
  63.        jmp   @2
  64.  
  65. @3:    mov   dx,crlf           ; вывели очередное слово.
  66.        call  Message           ; перевод строки.
  67.        jmp   @prn              ; выводим сл.слово..
  68. ;---------------------------------------------------
  69. @exit: xor   ax,ax           ; ждём любую клавишу..
  70.        int   16h
  71.        int   20h              ; выход в DOS!!!
  72.  
  73. ;eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
  74. Message:         ;<------; функция вывода сообщений
  75.     mov   ah,9
  76.     int   21h
  77.     ret

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


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

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

15   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы