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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2013, 18:08   #1
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию Удаление подстроки путем смещения исходной

Есть следующий код, который производит замену подстроки в вводимой строке:
Код:
 .MODEL tiny
 .486p
 .code
 assume cs:@code, ds:@code, es:@code, ss:@code
 ORG 100h
begin:
  lea si,end_pr
  mov bx,(end_pr-begin+10Fh)/16
  mov ah,4Ah
  INT 21h
	
  lea dx,proga
  mov ah,09h 
  INT 21h 

  lea dx,buffer
  mov ah,0ah
  INT 21h

  mov si,dx

  mov ah,09h
  lea dx,car
  INT 21h 
	
  xor ch,ch
  mov cl,[si+1]

  add si,cx
  mov byte ptr [si+2],'$'
  INC cx
  INC cx
  mov lsi,cx
  lea di,input_str
  mov al,rstr

POISK:
  repnz scasb
  jnz exit
  mov poloj,di
  mov per_lsi,cx
  lea si,rstr
  INC si
  mov cx,len_rstr
  DEC cx
  repz cmpsb
  mov cx,per_lsi
  mov di,poloj

  je VihPOISK
  jmp POISK

VihPOISK:		 
  lea si,input_str
  add si,lsi
  DEC si

SDVIG:
  mov dl,[si]
  mov [si+2],dl
  DEC si

loop SDVIG
  INC lsi

  mov cx,len_sstr
  DEC di
  lea si,sstr
  rep movsb
  mov cx,per_lsi
  sub di,4
  JMP POISK

exit:
  mov AH, 09h
  lea dx,prvih
  INT 21h

  mov AH, 09h
  lea dx,input_str
  INT 21h

  mov AH, 09h
  lea dx,car
  INT 21h

  mov AH, 09h
  lea dx,vih
  INT 21h
	 
  mov ah,00h
  INT 16h

  mov AH,4ch
  INT 21h

  proga db ' Programma proizvodit zamenu sochetaniya "real" na "double" v vvedenoy stroke. ', 13,10,'Vvedite stroku dlinoy do 100 simvolov', 13,10, '$'
  prvih db ' Poluchili stroku s sochetaniem "double" vmesto "real"', 13,10, '$'
  vih db ' Najmite lyubuyu klavishu dlya vihoda iz programi', 13,10, '$'
  buffer db 101,?
  input_str db 101 dup(?)
  lsi dw ?
  per_lsi dw ? 
  poloj dw ?
  rstr db 'real'
  len_rstr=$-rstr
  sstr db 'double'
  len_sstr=$-sstr
  car db 13,10,'$'

DW 64 DUP(0)
end_pr=$
end begin
Делал его на 2-ом курсе. Уже все естественно забыл. Данная задание делается из расчета того, что заменяемая подстрока заведомо меньше по длине вставляемой подстроки. В результате чего необходимо смещать исходную строку и потом уже вставлять необходимую строку.

Теперь же есть похожее задание. Нужно не заменять подстроку, а просто её удалять. При это нельзя использовать другие массивы и работать необходимо через смещение.

Как-то можно переделать код переведенный выше на необходимый? И как?
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Старый 19.06.2013, 09:22   #2
munthrekosh
Пользователь
 
Аватар для munthrekosh
 
Регистрация: 12.11.2011
Сообщений: 80
По умолчанию

Сделал так:
Код:
VihPOISK:	
  mov ax, lsi
  mov bx, per_lsi1
  sub ax, bx
  lea di, input_str
  add di, ax
  dec di
  mov ax, lsi
  mov bx, per_lsi2
  sub ax, bx
  lea si, input_str
  add di, ax
  dec si
  mov cx, per_lsi2
Sdvig:
  mov ax, [si]
  mov [di], ax
  inc si
  inc di
loop Sdvig

  mov ax, lsi
  mov bx, per_lsi1
  sub ax, bx
  mov bx, per_lsi2
  add ax, bx
  mov lsi, ax
  
  lea si, input_str
  add si, lsi
  mov byte ptr [si+1],'$'
  sub si, per_lsi2
  xor ah, ah
  mov al,rstr
  JMP POISK
Не работает :-(
Что я делаю не так
Ш.Р.Ю.-программист! йопта!!!
munthrekosh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление подстроки olegraperos Общие вопросы C/C++ 1 25.10.2011 13:44
Сегменты и смещения. Assembler(Virtual Pascal) Donix Помощь студентам 0 19.10.2011 16:40
удаление из исходной строки заданной конфигурации символов Petruha-nsk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 22 11.10.2010 15:53
Удаление подстроки (С) Айдар Помощь студентам 2 02.03.2010 08:22
Шифровка строки методом смещения кода символов Geddar Общие вопросы Delphi 2 04.02.2009 21:35