vi2ir
Гость
|
|
« Ответ #2 : 17-12-2008 07:00 » |
|
#include<stdio.h>
extern char* mymemmove(char* dest, char* src, int n);
char* my_memmove_c(char* dest, char* src, int n) { char* ret = dest; if (dest <= src || dest >= (src + n)) { while (n--) *dest++ = *src++; } else { dest += n - 1; src += n - 1; while (n--) *dest-- = *src--; } return ret; }
// это вызов программмы на с , нужен вариант с ассемблером, у меня такой вариант, вот но в нем я не уверен
.intel_syntax noprefix .globl mymemmove .type mymemmove, @function
mymemmove: push edi push esi mov edi, [esp+16] mov esi, [esp+20] call malloc # незнаю сюда вызвать маллос, или куда?! cld cmp esi, 0 jnc label mov eax, 0 add eax, ecx cmp edi, eax jnc label add edi, ecx dec edi #или inc esi add esi, ecx dec esi #или inc esi std
label: rep movsb # или сюда может call malloc& pop ecx pop esi pop edi ret
|