Last Regrets

尝试写一个字符串拷贝

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

下面是自己实现的。慢慢通过寄存器移动…