Вот два моих примера по-копированию строки, работает как обычная
Си-библиотечная функция strcpy, только работает на 15%-быстрее, тестировал функцией WinAPI: QueryPerformanceCounter которая не участвует в планирование и время не считает при переключений контекстов, но windows система не реального времени точных результатов всё равно не получить, ну хоть приблизительно.
//На синтаксисе AT&T компилятор GCC.
#include <stdio.h>
char* _strcpy(char* _s, const char* _d) {
char* t = _s;
asm("movl %0, %%esi"::"d"(_d));
asm("movl %0, %%edi"::"d"(_s));
asm("n:");
asm("mov (%esi), %al");
asm("mov %al, (%edi)");
asm("or $0, %al");
asm("jz e;");
asm("incl %esi");
asm("incl %edi");
asm("jmp n;");
asm("e:");
return t;
}
int main(void) {
char s[64];
_strcpy(s, "Hello GCC from syntaxis AT&T");
puts(s);
return 0;
}
***********************************************************************
//На синтаксисе INTEL компилятор Borland C.
#include <stdio.h>
char* _strcpy(char* _s, const char* _d) {
char* t = _s;
__asm {
mov esi, _d
mov edi, _s
n:
mov al, [esi]
mov [edi], al
or al, 0
jz e;
inc esi
inc edi
jmp n;
e:
};
return t;
}
int main(void) {
char s[64];
_strcpy(s, "Hello Borland C from syntaxis INTEL");
puts(s);
return 0;
}