Помогите пожалуйста разобраться. В приведенном ниже коде CMPSb производится не заданное число раз, а всего три раза, даже если совпадающие сиволы находятся не в третьей, а в любой другой позиции. Не пойму почему. Компилятор TASM 4.1 Код (Text): stk segment para stack 'stack' db 100h dup(?) stk ends data segment string1 db 51,?,51 dup(?) string2 db 51,?,51 dup(?) data ends cods segment assume cs:cods,ss:stk,ds:data,es:data start: mov ax,data mov ds,ax mov es,ax ;----entering strings mov ax,0a00h lea dx,string1 int 21h mov ax,0a00h lea dx,string2 int 21h ;----string processing cld mov cx,50 lea si,string1 lea di,string2 repe cmpsb ;---вот здесь и не работает jz eqstrings ;----symbol is founded sub cx,50 neg cx lop: cmp cx,1 jne necx mov ax,0200h mov dl,string1[di-1] int 21h necx: mov ax,0200h mov dl,' ' int 21h loop lop eqstrings: ;----exiting mov ax,4c00h int 21h cods ends end start
s_ane_kkk а чего вы хотите от этой команды? читайте доку Из Зубкова: "При использовании с префиксом REP команда CMPS выполняет сравнение строки длиной в ЕСХ (или СХ) байт, слов или двойных слов, но чаще ее используют с префиксами REPNE/REPNZ или REPE/REPZ. В первом случае сравнение продолжается до первого несовпадения в сравниваемых строках, а во втором — до первого совпадения." Добавлено: Зубков не прав repe - до первого несовпадения, repne - до первого совпадения
кстати в вопросе "Не работает REPNE CMPSb" а в коде "repe cmpsb ;---вот здесь и не работает" оригинально
Asterix Это я знаю, просто ей не важно, что совпадающие символы находятся не в третьей позиции. Если я ввожу строки в которых совпадение происходит в более далекой позиции, чем третья, она все равно выполняется только три раза.