Код (Text): void asmfunc(char *m1) { int intmass1[100],l1;//dd=4 byte for (i=0;i<=100;i++) *(intmass1+i)=*(m1+i);// m1 - это массив типа char из main(), передаю сюда, как в функцию через указатель __asm{ mov eax,'\n' // будем искать символ конца строки(в массиве символы в виде чисел) mov ecx,101 //в массиве у нас 101 элемент lea edi,intmass1 //вродебы задаём начальный адрес cld //флаг на 0 чтобы с первого до последнего элемента цепочки шёл а не наоборот repne scasd // будем проверять каждый элемент цепочки двойных слов, пока не встретится искомый je t1 jne t2 t1: mov eax,101 // 101 - cx=длина строки sub eax,ecx mov l1,eax // помещаем длину строки в l1 t2: mov eax,0 } printf("l1=%d;\n",l1); } int main() { char charmass1[100]; printf("input:\n"); scanf("%s",&charmass1); asmfunc(charmass1); system("pause"); return 0; } ввожу asd мне выводит l1=49 в любом случае, при любой длине строки !?
amisd Там у тебя две ошибки *(intmass1+i)=*(m1+i); здесь происходит запись в 101й элемент массива, а размер массива 100, замени for (i=0;i<=100;i++) на for (int i=0;i<100;i++) mov eax,'\n' а здесь ты ищешь то чего нет, замени на xor eax,eax
я ищу '\n' - этот символ = 10 в числовом эквиваленте, почему его там нет? есть он там, и зачем очищать регистр eax?
Ну ты хоть бы прочитал как работает scanf с параметром %s - копируется строка до первого встретившегося знака пробела, таб или \n, и к этой строке добавляется ноль, поэтому искать надо ноль а не \n.
вопрос по примеру. как откомпилировать это в MinGW g++ ? на __asm { } ругается. %mov , %eax писать не вариант. компилировать через VC тоже не вариант. как сделать на MinGW ?