Удаление слова после заданного слова в строке - Assembler
Формулировка задачи:
Помогите написать программу удаления слова после заданного в строке.
К примеру дана строка : Hello my world
Введенное слово: Hello
Вывод: Hello world
Решение задачи: «Удаление слова после заданного слова в строке»
textual
Листинг программы
- .model small ;in main string delete string
- .stack 100h ;after inputing string
- .data
- message1 db "Enter string: $"
- message2 db 0Ah, 0Dh, "Enter substring: $"
- message3 db 0Ah, 0Dh, "Result string: $"
- enter db 0Ah, 0Dh, "$"
- length equ 200
- Strb db '$'
- Strl db length
- Str db length dup('$')
- SubStrb db '$'
- SubStrl db length
- SubStr db length dup('$')
- .code
- start:
- mov ax, @data
- mov ds, ax
- lea dx, message1 ;output 'Enter string'
- call outputString
- lea dx, enter
- call outputString
- lea dx, Strb ;input MainString
- call inputString
- lea dx, enter
- call outputString
- lea dx, message2 ;output 'Enter substring'
- call outputString
- lea dx, enter
- call outputString
- lea dx, SubStrb ;input SubString
- call inputString
- lea dx, enter
- call outputString
- mov al, [Strl] ;check on equality
- cmp al, [SubStrl]
- jb exit
- xor cx, cx
- lea si, Str ;pointer on beginning of Str
- dec si
- jmp start_find
- find:
- inc si
- cmp [si], ' ' ;compare element of Str with ' '
- je start_find
- cmp [si], '$' ;compare with end of Str
- je exit
- jmp find
- start_find:
- inc si
- cmp [si],' '
- je start_find
- lea di, SubStr ;pointer on beginning of SubString
- call searchSubString
- jmp find
- searchSubString proc
- push ax
- push cx
- push di
- push si
- xor cx, cx
- mov cl, [SubStrl] ;cl=SubString.length()
- comparestr:
- mov ah,[si]
- dec cx
- cmp ah,[di]
- je compare
- jne NotEqual
- compare:
- inc si
- inc di
- cmp cx,0
- je check
- jne comparestr
- check:
- cmp [si], ' '
- je Equal
- jne NotEqual
- Equal:
- call length
- call shift
- call searchSubString
- NotEqual:
- pop si
- pop di
- pop cx
- pop ax
- ret
- searchSubString endp
- shift proc
- push cx
- push di
- push bx
- lea ax, Str
- add al, [Strl]
- sub ax,si
- mov cx,ax
- add cx,2
- ;shifting the word
- sdvigg_vlevo:
- mov ah,[si] ;save current element
- sub si, bx ;shift left
- mov [si], ah
- add si, bx
- inc si
- loop sdvigg_vlevo
- xor bh, bh
- pop bx
- pop di
- pop cx
- ret
- shift endp
- length proc
- push ax
- skip:
- inc si
- cmp [si], ' '
- je skip
- mov ax,si ;compare element of Str with ' '
- word:
- mov dh,[si]
- inc si
- cmp [si], ' ' ;compare with end of Str
- je continue
- cmp [si], '$'
- je continue
- jmp word
- continue:
- push si
- sub si,ax
- mov bx,si
- pop si
- pop ax
- ret
- length endp
- inputString proc
- push ax
- mov ah, 0Ah
- int 21h
- pop ax
- ret
- inputString endp
- outputString proc
- push ax
- mov ah, 09h
- int 21h
- pop ax
- ret
- outputString endp
- exit:
- lea dx, Str
- call OutputString
- mov ax,4c00h
- int 21h
- end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д