Удаление слова после заданного слова в строке - Assembler

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

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

Помогите написать программу удаления слова после заданного в строке. К примеру дана строка : Hello my world Введенное слово: Hello Вывод: Hello world

Решение задачи: «Удаление слова после заданного слова в строке»

textual
Листинг программы
  1. .model small         ;in main string delete string
  2. .stack 100h          ;after inputing string
  3.  
  4. .data
  5. message1    db "Enter string: $"
  6. message2    db 0Ah, 0Dh, "Enter substring: $"
  7. message3    db 0Ah, 0Dh, "Result string: $"
  8. enter       db 0Ah, 0Dh, "$"
  9. length      equ 200
  10.  
  11. Strb db '$'
  12. Strl db length
  13. Str  db length dup('$')
  14.  
  15. SubStrb db '$'
  16. SubStrl db length
  17. SubStr  db length dup('$')
  18.  
  19. .code
  20. start:
  21.     mov ax, @data
  22.     mov ds, ax
  23.    
  24.     lea dx, message1            ;output 'Enter string'
  25.     call outputString
  26.     lea dx, enter
  27.     call outputString
  28.    
  29.     lea dx, Strb           ;input MainString
  30.     call inputString
  31.     lea dx, enter
  32.     call outputString
  33.    
  34.     lea dx, message2            ;output  'Enter substring'
  35.     call outputString
  36.     lea dx, enter
  37.     call outputString
  38.    
  39.     lea dx, SubStrb        ;input SubString
  40.     call inputString
  41.     lea dx, enter
  42.     call outputString
  43.    
  44.     mov al, [Strl]              ;check on equality
  45.     cmp al, [SubStrl]
  46.     jb exit
  47.    
  48.     xor cx, cx
  49.     lea si, Str             ;pointer on beginning of Str
  50.     dec si
  51.     jmp start_find
  52.    
  53.     find:
  54.     inc si
  55.     cmp [si], ' '           ;compare element of Str with ' '
  56.     je start_find
  57.     cmp [si], '$'           ;compare with end of Str
  58.     je exit
  59.     jmp find
  60.     start_find:
  61.     inc si
  62.     cmp [si],' '
  63.     je start_find
  64.     lea di, SubStr          ;pointer on beginning of SubString
  65.     call searchSubString
  66.     jmp find
  67.    
  68.    
  69.    
  70. searchSubString proc
  71.     push ax
  72.     push cx
  73.     push di
  74.     push si
  75.  
  76.     xor cx, cx
  77.     mov cl, [SubStrl]           ;cl=SubString.length()
  78.     comparestr:
  79.     mov ah,[si]
  80.     dec cx
  81.     cmp ah,[di]
  82.     je  compare
  83.     jne NotEqual
  84.     compare:  
  85.     inc si
  86.     inc di
  87.     cmp cx,0
  88.     je check
  89.     jne comparestr
  90.  
  91. check:
  92.     cmp [si], ' '
  93.     je Equal
  94.     jne NotEqual
  95.  
  96. Equal:
  97.     call length
  98.     call shift
  99.     call searchSubString
  100.    
  101. NotEqual:
  102.     pop si
  103.     pop di
  104.     pop cx
  105.     pop ax
  106.     ret
  107.    
  108. searchSubString endp        
  109.  
  110.  
  111. shift proc
  112.     push cx
  113.     push di
  114.     push bx
  115.      
  116.     lea ax, Str
  117.     add al, [Strl]
  118.     sub ax,si
  119.     mov cx,ax
  120.     add cx,2
  121.    
  122.     ;shifting the word
  123.     sdvigg_vlevo:              
  124.         mov ah,[si]         ;save current element
  125.         sub si, bx          ;shift left
  126.         mov [si], ah
  127.         add si, bx
  128.         inc si
  129.     loop sdvigg_vlevo  
  130.     xor bh, bh
  131.        
  132.     pop bx
  133.     pop di
  134.     pop cx
  135.     ret    
  136. shift endp
  137.  
  138. length proc
  139.     push ax
  140.     skip:  
  141.     inc si
  142.     cmp [si], ' '
  143.     je skip
  144.     mov ax,si           ;compare element of Str with ' '  
  145.    
  146.     word:    
  147.     mov dh,[si]
  148.     inc si
  149.     cmp [si], ' '           ;compare with end of Str
  150.     je continue
  151.     cmp [si], '$'
  152.     je continue
  153.     jmp word
  154.     continue:
  155.     push si
  156.     sub si,ax
  157.     mov bx,si
  158.    
  159.     pop si  
  160.     pop ax  
  161.     ret
  162. length endp    
  163.  
  164. inputString proc
  165. push ax
  166. mov ah, 0Ah
  167. int 21h
  168. pop ax  
  169. ret
  170. inputString endp
  171.  
  172. outputString proc
  173. push ax
  174. mov ah, 09h
  175. int 21h
  176. pop ax
  177. ret
  178. outputString endp
  179.  
  180. exit:      
  181. lea dx, Str
  182. call OutputString
  183. mov ax,4c00h
  184. int 21h
  185.  
  186. end start

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


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

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

6   голосов , оценка 3.333 из 5

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

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

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