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

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

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

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

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

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

что делает процедура nextstr ?
Код:
  .MODEL small
.STACK 100h
.DATA
msg1 DB "Enter string: $"
msg2 DB 0Ah, 0Dh, "Enter substring 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 ;вывод приглашения msg1
call strout

lea dx, str1ml ;ввод строки str1
call strin

lea dx, msg2 ;вывод приглашения msg2
call strout

lea dx, str2ml ;ввод строки str2
call strin

xor cx, cx
mov cl, str1l ;устанавливается кол-во повторений
sub cl, str2l
inc cl
cld ;обход вперёд
lea di, str2 ;в di - строка, которую надо найти
lea si, str1 ;в si - строка, в которой ищем
xor ax, ax

all_string: ;повторяется для str1 до конца строки минус длина str2
call sub_search
inc si
loop all_string

call nextstr
;xor dx, dx
;mov dl, al
;add dl, 30h
;mov ah, 02h
;int 21h

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:
;di указывает на строку 2, si указывает на конец слова, которое надо удалить
call delete
inc al
_neq:
pop si
pop di
pop cx
ret
sub_search endp
;*************************************************
delete proc
push bx
push di
push si
mov di, bx ;в di - адрес начала удаляемого слова
xor cx, cx
mov cl, str1l
repe movsb
pop si
pop di
pop bx
ret
delete endp

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

Цитата:
Сообщение от kompildan Посмотреть сообщение
что делает процедура nextstr ?
выводит через DOS Fn 02H
два символа 0x0D и 0x0A (ПС и ВК - перевод строки и возрат каретки).

Это нужно, чтобы вывод в консоли начинался с новой строки (newstr "говорящее" имя== сделать переход на новую строку).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Заменить в строке слова S на слова vladeasy Общие вопросы C/C++ 1 18.01.2018 21:01
Работа со строками. Превернуть слова в строке и удалить слова-палиндромы (С) Andr0meda Помощь студентам 0 19.12.2017 17:32
в заданной строке символов (отдельные слова, разделенные пробелом) найти слова с совпадающими первой и последней буквами (С++) T_h_i_s Помощь студентам 0 19.11.2012 18:37
Поиск слова в строке и редактирование этого слова Wasili4 Microsoft Office Excel 3 22.06.2011 21:06
Си. Слова в строке savra Помощь студентам 3 18.12.2009 16:52