strcat - добавляет копию строки, указанной как src к концу строки, указанной как dest, заменяя при этом последний знак строки dest первым знаком строки src. помогите разобрать каждую строчку.)))) и почему мы выделяем где-то 12 памяти, где-то 16 и тп .intel_syntax noprefix .globl my_strcat .type my_strcat, @function my_strcat: push ecx push edx mov edx, [esp+12] find_end: mov al, BYTE PTR [edx] inc edx cmp al, 0 inc find_end prepare: mov ecx, edx mov edx, [esp+16] copy: mov al, BYTE PTR [edx] inc edx mov BYTE PTR [ecx-1], al inc ecx cmp al, 0 jne copy exit: pop edx pop ecx mov eax, [esp+12]
my_strcat: push ecx пихаем еcx в стек push edx пихаем edx в стек mov edx, [esp+12] присваиваем edx значение верхушки стека + 12(эт первая строка) find_end: mov al, BYTE PTR [edx] один байт по адресу edx пихаем в al inc edx сдвигаем адрес на 1 cmp al, 0 проверяем ни конец ли строки часом... inc find_end тут какая то хрень по идее должен быть джамп если не конец prepare: mov ecx, edx адрес конца строки пихаем в еcx mov edx, [esp+16] присваиваем edx верхушка стека + 16 (эт я так понял вторая строка) copy: mov al, BYTE PTR [edx] берем 1 байт суем в al inc edx увеличиваем адресс mov BYTE PTR [ecx-1], al пихаем в конец 1 строки этот байт inc ecx сдвигаем адресс 1 строки cmp al, 0 проверяем не конец ли 2 строки jne copy exit: pop edx восстанавливаем регистр pop ecx восстанавливаем регистр mov eax, [esp+12] пихаем адресс результата в eax Ты бы лучше книжку почитал какую и сам разобрался тут ничего сверх сложного нету.