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