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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2011, 19:56   #1
Determinant666
 
Регистрация: 02.03.2011
Сообщений: 7
Восклицание работа с текстом

может, кто знает, помогите пожалуста решить задачу: дано - текст, слова в котором разделены пробелами, вывести те слова которые встречаються в тексте ровно один раз...
вводимый текст адресуется регистром SI, а выводимый текст регистром DI...

кто сможет помочь - заранее спасибо!
Determinant666 вне форума Ответить с цитированием
Старый 03.03.2011, 10:18   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

вообщем-то ни нам ни вам, решил сделать что то подобное, что для себя б не помешало и похоже на вашу задачу - отсеивает все слова, которые уже встречались в тексте. если нужен перевод под 16 битную архитектуру, комментарии и прочее "именно по вашему заданию"-в коммерц!
собственно сплошное гуано и костыли, ну а что вы есчо от меня ждали?
Код:
.386
	.model flat,stdcall	
	include \masm32\include\user32.inc
	includelib \masm32\lib\user32.lib
.data
;необходим пробел в конце массива со словами!!!11 иначе спохватите эксепшн лютый!! 
;также адово не рекомендуемы слова длиною более 255 символов(всех чукчей касаеца и любителей линки отсеивать одинаковые)
text db 'текст для вставки брать тут http://ojab.ru/qip.py '
db 'текст для вставки брать тут http://ojab.ru/qip.py ' 
db 'текст для вставки брать тут http://ojab.ru/qip.py ' 
sizetext equ $-text

.data?
buf_out db sizetext dup (?)

.code
start:
mov edi,offset buf_out
mov esi,offset text
mov ecx,sizetext
mov edx,edi
	push ecx
		call NextLen
	  write: sub [esp],ecx
		rep movsb
	  no_wr: 
	pop ecx
	jecxz end_prog
		call CheckWords
	push ecx
		test ah,ah
		movzx eax,al
		jnz @f
			xchg ecx,eax
			jmp write
		@@:
		add esi,eax
		sub [esp],eax
		jmp no_wr	
	end_prog:
	invoke MessageBox,0,offset buf_out,0,0
ret

;#############################################
				CheckWords:
; in: 	esi-next word
; 		edx-begin out_buf
;		edi-end out_buf
; out:	ah: =0 not_find; !=0 find this word
;		al-len next word
;#############################################
push edi
push ecx
	xchg ecx,edi
	sub ecx,edx
	mov edi,edx
	@@:
		push ecx
			call StrLen
			sub [esp],ecx
			push esi
				inc ecx
				repz cmpsb
			pop esi
			jecxz find
		dec ecx	
		add edi,ecx	
		pop ecx
		jecxz not_find
	jmp @b
	find:
		pop ecx
		dec ecx
	not_find:
		xchg ecx,eax
		xchg al,ah
		call NextLen
		xchg al,cl		
pop ecx
pop edi
ret

;#############################################
				StrLen:
; in:	edi-bedin word
; out:	ecx-len word+space				
;#############################################
push edi
	or cl,0ffh
	push ecx
		mov al,020h
		repnz scasb
		sub [esp],ecx
	pop ecx	
pop edi
ret
;#############################################
				NextLen:
; in:	esi-bedin word
; out:	ecx-len word+space					
;#############################################
xchg esi,edi
	call StrLen
xchg esi,edi
ret	

end start
Нет, ну правда..

Последний раз редактировалось yuran666666; 03.03.2011 в 10:32.
yuran666666 вне форума Ответить с цитированием
Старый 07.03.2011, 11:07   #3
Determinant666
 
Регистрация: 02.03.2011
Сообщений: 7
По умолчанию

мне бы только под 16-битную архитектуру(

вот сам пытался сделать,процедура search отделяет слово и пишет его в масив, lengz находит длину строки, а compare ищет во всей строке данное слово, но вот скорее всего в ней и ошибка, только вот какая?

mydata segment para 'data'

buf db 100,0
str1 db 101 dup('$')
newline db 0dh,0ah,'$'
mas db 20 dup('$')
len dw ?
lenzag dw ?
nword dw ?
mydata ends
mystack segment para 'stack'
db 256 dup (?)
mystack ends

mycode segment para 'code'
assume cs:mycode, ds:mydata, es:mydata

start:
mov ax,mydata
mov ds,ax
mov es,ax
xor bx,bx
lea dx,buf
mov ah,0ah
int 21h
lea dx,newline
mov ah,09h
int 21h

call lengz

mitka:
call search
call compare
cmp bx,1
jne m6
lea dx,mas
mov ah,09h
int 21h
mov ah,02h
mov dl,' '
int 21h
inc si
m6:
mov ah,0
mov al,0dh
cmp str1[si],al
ja mitka
mov ax,4c00h
int 21h
lengz proc near
xor bx,bx
mov al,0dh
m7:
cmp str1[si],al
je xxx
inc si
inc bx
jmp m7
xxx:
mov lenzag,bx
xor ax,ax
mov si,0
ret
lengz endp

search proc near
mov cx,20
mov al,'$'
mov di,0
m2:
mov mas[di],al
inc di
loop m2
mov di,0
m1:
mov al,' '
cmp str1[si],al
je ext
mov ah,str1[si]
mov mas[di],ah
inc di
inc si
mov al,0dh
cmp str1[si],al
je ext
jmp m1
ext:
mov len,di
mov di,0
ret
search endp

compare proc near
xor bx,bx
push si
mov al,str1[si]
mov cx,lenzag
lea di,str1
repne scasb
mov cx,len
lea di,mas
repe cmpsb
cmp cx,0
jne m5
mov bx,1
mov al,0dh
cmp str1[si],al
je me
m5: pop si
jmp kaka
me: mov ax,4c00h
int 21h
kaka:
ret


compare endp



mycode ends

end start
Determinant666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с текстом с++ Dawka1305 Помощь студентам 1 31.01.2011 21:07
Работа с текстом. J0n1cK Помощь студентам 1 30.05.2009 15:19
Работа с текстом. J0n1cK Паскаль, Turbo Pascal, PascalABC.NET 4 09.05.2009 00:29
работа с текстом... Poll Помощь студентам 5 23.01.2009 11:43
Работа с текстом vinimixer Общие вопросы Delphi 0 07.11.2008 21:19