Помогите, пожалуйста разобраться. В лаб.работе дан пример использования ассемблеровских вставок. Нужно определить ее назначение. В принципе я понял, что это что-то типа сложения по модулю 2, но точно не уверен. Кто-нибудь подскажите, что точно делает этот код. Заранее огромное спасибо char *asmfunc(char *S, char c) { char *r = 0; L0: asm { mov SI,S; mov DL,c; } L1: asm { mov AL,0; add AL,[SI]; je L3; xor AL,DL; je L2; add SI,1; jmp L1; } L2: asm mov r,SI; L3: return r; }
Nachin Код (Text): char *asmfunc(char *S, char c) { char *r = 0; L0: asm { mov SI,S; mov DL,c; } L1: asm { mov AL,0; add AL,[SI];<-- сравниваем содержимое по адресу в SI с нулём, скорее всего ищем конец строки je L3; xor AL,DL;<-- здесь какая-то билиберда посмотри исходный код внимательно je L2; add SI,1;<-- переходим к следующему символу строки jmp L1; } L2: asm {mov r,SI;}<- здесь {} пропустил L3: return r; }
Код (Text): char *asmfunc(char *S, char c)<-возвращает указатель на первое вхождение символа c в строку S { char *r = 0; L0: asm { mov SI,S; mov DL,c; } L1: asm { mov AL,0; add AL,[SI];<-- сравниваем текущий символ с 0 je L3; <-конец строки, символ не найден возвращаем 0 xor AL,DL;<-- сравниваем символ с искомым je L2;<-- если равны - символ найден возвращаем указатель на него add SI,1;<-- переходим к следующему символу строки jmp L1; <- следующая итерация } L2: asm {mov r,SI;}<- записываем указатель на первое вхождение символа в строке в переменную r L3: return r; }
Nachin Можно так Код (Text): char *asmfunc(char *S, char c) { char *r = 0; asm { mov DI,S; mov AL,c; mov CX = 255; repne scasb jcxz L0 dec DI mov r,DI L0: }
Огромное спасибо, буду дальше разбираться с лабой. Появятся еще вопросы, буду просить у ВАс помощи )))