尝试写一个字符串拷贝
·
sdttttt
#include <stdio.h>
#include <stdlib.h>
extern int strlen2(char* str);
extern void memscp2(char* dest, char* src,unsigned int size);
extern void memscp3(char* dest, char* src,unsigned int size);
int main()
{
int a = add(1, 2);
printf("%d\n", a);
printf("%d\n", strlen2("awd434"));
char* s = calloc(sizeof(char), 10);
memscp2(s, "awdawdawdfawffawf", strlen2("awdawdawdfawffawf"));
printf("%s\n", s);
char* ss = calloc(sizeof(char), 10);
memscp3(ss, "awdawdawdfawffawf", strlen2("awdawdawdfawffawf"));
printf("%s\n", s);
return 0;
}
SECTION .data
SECTION .text
global memscp2
global memscp3
; void memscp2(char* dest /* rdi */ , char* src /* rsi */,unsigned int size /* rdx */)
memscp2:
mov rcx, rdx
cld
rep movsb
ret
; void memscp3(char* dest /* rdi */ , char* src /* rsi */,unsigned int size /* rdx */)
memscp3:
mov rcx, rdx
nextbyte:
mov rax, [rsi]
mov [rdi], rax
add rsi, 8
add rdi, 8
loop nextbyte
xor rax, rax
ret
写了两个版本,上面的是movsb,一个专门用来拷贝字符的指令,估计是有特殊优化。
下面是自己实现的。慢慢通过寄存器移动…