尝试写一个字符串拷贝
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,一个专门用来拷贝字符的指令,估计是有特殊优化。 ...