• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Работа с текстом в ассемблере

  • Автор темы azaz09az
  • Дата начала
A

azaz09az

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

azaz09az

Пытался что-нибудь делать сам?
пытался, но почему то не получается( процедура search отделяет слова и записывает их в массив mas, процедура 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
 
L

lazybiz

вывести те слова которые встречаються в тексте ровно один раз...
Если пригодится, то могу привести лишь алгоритм:
Создаешь цикл, который проходит предложение целиком. В этом цикле отделяешь слова по пробелам, при этом указатель на каждое слово сохраняешь. Далее продолжаешь цикл и смотришь, если нашлись еще такие-же слова то первый цикл продолжается, если же таких слов больше нет то выводишь то, на что указывает сохраненный указатель.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!