Не работает REPNE CMPSb

Тема в разделе "WASM.BEGINNERS", создана пользователем s_ane_kkk, 10 дек 2006.

  1. s_ane_kkk

    s_ane_kkk New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    8
    Помогите пожалуйста разобраться.
    В приведенном ниже коде CMPSb производится не заданное число раз, а всего три раза, даже если совпадающие сиволы находятся не в третьей, а в любой другой позиции. Не пойму почему. Компилятор TASM 4.1
    Код (Text):
    1. stk segment para stack 'stack'
    2.    db 100h dup(?)
    3. stk ends
    4.  
    5. data segment
    6.    string1 db 51,?,51 dup(?)
    7.    string2 db 51,?,51 dup(?)
    8.  
    9. data ends
    10.  
    11. cods segment
    12.    assume cs:cods,ss:stk,ds:data,es:data
    13. start:
    14.    mov ax,data
    15.    mov ds,ax
    16.    mov es,ax
    17.    
    18.    ;----entering strings
    19.    mov ax,0a00h
    20.    lea dx,string1
    21.    int 21h
    22.    
    23.    mov ax,0a00h
    24.    lea dx,string2
    25.    int 21h
    26.    
    27.    ;----string processing
    28.    cld
    29.    mov cx,50
    30.    lea si,string1
    31.    lea di,string2
    32.    repe cmpsb ;---вот здесь и не работает
    33.    jz eqstrings
    34.    ;----symbol is founded
    35.    sub cx,50
    36.    neg cx
    37. lop:
    38.    cmp cx,1
    39.    jne necx
    40.    mov ax,0200h
    41.    mov dl,string1[di-1]
    42.    int 21h
    43. necx:
    44.    mov ax,0200h
    45.    mov dl,' '
    46.    int 21h
    47.    loop lop
    48. eqstrings:
    49.    
    50.    ;----exiting
    51.    
    52.    mov ax,4c00h
    53.    int 21h
    54.  
    55. cods ends
    56.    end start
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    s_ane_kkk

    а чего вы хотите от этой команды?
    читайте доку
    Из Зубкова:
    "При использовании с префиксом REP команда CMPS выполняет сравнение строки длиной в ЕСХ (или СХ) байт, слов или двойных слов, но чаще ее используют с префиксами REPNE/REPNZ или REPE/REPZ. В первом случае сравнение продолжается до первого несовпадения в сравниваемых строках, а во втором — до первого совпадения."

    Добавлено:
    Зубков не прав repe - до первого несовпадения,
    repne - до первого совпадения
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    кстати в вопросе "Не работает REPNE CMPSb"
    а в коде "repe cmpsb ;---вот здесь и не работает"

    оригинально :)
     
  4. s_ane_kkk

    s_ane_kkk New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    8
    Asterix
    Это я знаю, просто ей не важно, что совпадающие символы находятся не в третьей позиции. Если я ввожу строки в которых совпадение происходит в более далекой позиции, чем третья, она все равно выполняется только три раза.
     
  5. s_ane_kkk

    s_ane_kkk New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    8
    Asterix

    Да я и сам заметил, что вопрос неправильно написал. Просто сон уже понемногу брал свое :)
     
  6. s_ane_kkk

    s_ane_kkk New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    8
    Вопрос снят. Сам разобрался