MoonBlade
Alliance FEAR
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Меню сайта

Мини-чат
Союзные кланы
  • Страница 1 из 1
  • 1
Laba 1
DEMONWOLFДата: Вторник, 05.04.2011, 10:10 | Сообщение # 1
Лидер клана
Группа: Администраторы
Сообщений: 2551
Репутация: 28
Статус: Offline
.MODEL small
.STACK 100h
.DATA
msg1 DB "Enter string: $"
msg2 DB 0Ah, 0Dh, "Enter substring to delete: $"
msg3 DB 0Ah, 0Dh, "Result: $"

str1ml DB 200 ;строка для обработки
str1l DB '$'
str1 DB 200, 0, 200 dup('$')

str2ml DB 200 ;строка для ввода заданного набора
str2l DB '$'
str2 DB 200, 0, 200 dup('$')

.CODE
begin:
mov ax, @data ;запись адреса сигмента памяти данных
mov ds, ax
mov es,ax
xor ax,ax ;обнуление ax

lea dx, msg1 ;запись в dx адреса строки msg1
call strout ;вызов функции вывода строки из адреса dx

lea dx, str1ml ;запись в dx адреса строки str1ml
call strin ;вызов функции ввода строки

lea dx, msg2 ;запись в dx адреса строки str2
call strout ;вызов функции вывода строки из адреса dx

lea dx, str2ml ;запись в dx адреса строки str2ml
call strin ;вызов функции ввода строки

xor cx, cx ;обнуление счетчика cx
mov cl, str1l ;запись в регистр счетчика cl адреса длинны строки 1
sub cl, str2l ;разница длинн строк
inc cl ;увеличение регистра cl на 1
cld ;направление прахода: вверх
lea di, str2 ;запись в di адреса строки набора
lea si, str1 ;запись в si адреса исходной строки
xor ax, ax ;обнуление ax

all_string: ;цикл поиска подстроки
call sub_search ;вызов функции поиска
inc si ;увеличение адреса символа начала поиска в исходной строке
loop all_string ;конец цикла all_string с уменьшением счетчика cx

call nextstr

lea dx, msg3 ;запись в dx адреса строки msg3
call strout ;вызов функции ввода строки
lea dx, str1 ;запись в dx адреса строки str1
call strout ;вызов функции ввода строки

_end:
mov ah, 4ch ;в регистр ah - прерывание программы и передача управления вызывающей программе
int 21h ;вызов функции прерывания

;*****************Procedure***********************
nextstr proc
push dx ;копирование данных dx в стек
push ax ;копирование данных ax в стек
mov dl, 0Dh ;запись в dl символа (13) сдвига каретки
mov ah, 02h ;в регистр ah адрес прерывания 2
int 21h ;вызов функции вывода символа из dl
mov dl, 0Ah ;запись в dl символа (10) перехода на следующую строку
mov ah, 02h ;в регистр ah адрес прерывания 2
int 21h ;вызов функции вывода символа из dl
pop ax ;восстановление ax из стека
pop dx ;восстановление dx из стека
ret
nextstr endp
;*************************************************
strin proc
mov ah, 0Ah ;в регистр ah адрес прерывания 10(ввод из cmd)
int 21h ;вызов функции прерывания
ret
strin endp
;*************************************************
strout proc
mov ah, 09h ;в регистр ah адрес прерывания 9(вывод в cmd)
int 21h ;вызов функции прерывания
ret
strout endp
;*************************************************
sub_search proc
push cx
push di
push si
mov bx, si ;в bx - adres nachala podstroki,kotoryu ydal9em
mov cl, str2l ;в счетчик ECX длинну строки для удаления
repe cmpsb ;sravnenie strok po baitam
je _eq ; perexod na metky eq ,esli ravno
jne _neq ; perexod na metky neq
_eq:
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 ;v di - adres nachala udal9emogo slovo
xor cx, cx ;обнуление cx
mov cl, str1l ;в счетчик ECX длинну строки str1l
repe movsb ;peresilaet poelementno stroky DS:SI v stroky ES:DI
pop si
pop di
pop bx
ret
delete endp

end begin



Never Forget Who You Are
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MoonBlade © 2024Используются технологии uCoz и мозги администратора