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

Тема в разделе "Другие", создана пользователем azaz09az, 2 мар 2011.

  1. azaz09az

    azaz09az Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Пытался что-нибудь делать сам?
     
  3. azaz09az

    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
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Если пригодится, то могу привести лишь алгоритм:
    Создаешь цикл, который проходит предложение целиком. В этом цикле отделяешь слова по пробелам, при этом указатель на каждое слово сохраняешь. Далее продолжаешь цикл и смотришь, если нашлись еще такие-же слова то первый цикл продолжается, если же таких слов больше нет то выводишь то, на что указывает сохраненный указатель.
     
Загрузка...
Похожие Темы - Работа текстом ассемблере
  1. PoMaHaB
    Ответов:
    14
    Просмотров:
    3.700
  2. Andrey Kha
    Ответов:
    0
    Просмотров:
    17
  3. Hoasker
    Ответов:
    0
    Просмотров:
    63
  4. garri671
    Ответов:
    0
    Просмотров:
    50
  5. lelik200969
    Ответов:
    0
    Просмотров:
    49

Поделиться этой страницей