Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2019, 10:16   #1
kompildan
Пользователь
 
Регистрация: 16.02.2019
Сообщений: 14
По умолчанию Как сделать чтобы удалялось только заданное слово, а на под строку программа не реагировала

Код:
.MODEL small
.STACK 100h
.DATA
msg1 DB "Enter string: $"
msg2 DB 0Ah, 0Dh, "Enter string to delete: $"
msg3 DB 0Ah, 0Dh, "Result: $"
max_length equ 200

str1ml DB max_length
str1l DB '$'
str1 DB max_length dup('$')

str2ml DB max_length
str2l DB '$'
str2 DB max_length dup('$')

.CODE
begin:
mov ax, @data
mov ds, ax
mov es,ax
xor ax,ax

lea dx, msg1 
call strout

lea dx, str1ml
call strin

lea dx, msg2 
call strout

lea dx, str2ml 
call strin

xor cx, cx
mov cl, str1l 
sub cl, str2l
inc cl

lea di, str2 
lea si, str1
xor ax, ax

all_string: 
call sub_search
inc si
loop all_string

call nextstr

lea dx, msg3
call strout
lea dx, str1
call strout 

_end:
mov ah, 4ch
int 21h



nextstr proc
push dx
push ax
mov dl, 0Dh 
mov ah, 02h
int 21h
mov dl, 0Ah
mov ah, 02h
int 21h
pop ax
pop dx
ret
nextstr endp


strin proc
mov ah, 0Ah
int 21h
ret
strin endp


strout proc
mov ah, 09h
int 21h
ret
strout endp


sub_search proc
push cx
push di
push si
mov bx, si
mov cl, str2l
repe cmpsb
je _eq
jne _neq
_eq:

call delete

_neq:
pop si
pop di
pop cx
ret
sub_search endp


delete proc
push bx
push di
push si
mov di, bx 
xor cx, cx
mov cl, str1l
repe movsb
pop si
pop di
pop bx
ret
delete endp

end begin
kompildan вне форума Ответить с цитированием
Старый 22.02.2019, 10:20   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от kompildan Посмотреть сообщение
Как сделать чтобы удалялось только заданное слово, а на под строку программа не реагировала
что это означает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.02.2019, 10:23   #3
kompildan
Пользователь
 
Регистрация: 16.02.2019
Сообщений: 14
По умолчанию

т.е. если мы введём строку today is a good day
например мы хотим удалить day
после удаления получится to is a good
т.е от today отрезали часть day
а нужно чтобы удалилось только слово day
kompildan вне форума Ответить с цитированием
Старый 22.02.2019, 10:33   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от kompildan Посмотреть сообщение
а нужно чтобы удалилось только слово day
теперь понятно.
хочу отметить, что раз речь идёт о выделении слова - то обязательно нужно Вам решить, что именно отделяет одно слово от другого.
В простейшем случае слова отделены друг от друга пробелом(ами).
В общем случае - любые знаки пунктуации являются разделителями.

но, так как Ассемблер не самый элементарный язык, да и задачу Вы усложнили, то я бы ограничился только пробелами.

и последнее. Поиск должен быть регистрозависимым?
если дана фраза
Today is Good Day!
и ввели слово day - нужно удалять слово "Day"?

а по сути решения задачи. задачу можно решать по разному.
например, можно добавить в исходную строку по пробелу в начало и конец.
потом искать подстроку и удалять только в том случае, если перед найденной подстрокой стоит пробел и после есть пробел, иначе - игнорировать.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтобы, строка на панели двигалась? Alina_1333 JavaScript, Ajax 1 27.06.2018 22:27
[C#] Как сделать что бы не каждая строка выводилась, а только одно значение weqw121 Помощь студентам 1 20.10.2017 08:26
[Pascal] Как сделать чтобы можно было вводить 12 раз числа? А то только одно число ввел программа завершилась Gidus Помощь студентам 4 20.06.2017 13:44
с++ Необходимо чтобы программа работала не только с целыми, но и с дробными числами, как это сделать? в чем моя ошибка? Julia1 Общие вопросы C/C++ 2 20.04.2015 19:41
Ввод - сделать так, чтобы в Edit можно было вводить только цифры, или на оборот, только буквы BastAngel Общие вопросы Delphi 7 27.04.2012 01:15