저는 우분투 16.04에서 nasm을 사용하고 있으며 현재 C memmove()
기능을 재 코딩하려고합니다.asm에서 memmove를 recode하려고 시도했습니다.
Saluton, SalSaluton
하지만 얻을 :
char *str = strdup("Salutation");
printf("%s, %s\n", (char *)memmove(str + 3, str, 5), str);
예상 출력은 다음과 같습니다
SalSaon, SalSalSaon
나는 이런 식으로 전화 드렸습니다
BITS 64
global memmove
memmove:
push rbp
mov rbp, rsp
xor rcx, rcx
while:
cmp rcx, rdx
je end
mov r10b, byte [rsi + rcx]
mov byte [rdi + rcx], r10b
inc rcx
jmp while
end:
mov rax, rdi
leave
ret
: 여기
내 코드입니다몇 가지 이유로 네 번째 문자를 얻으면 내 문자열 rsi
의 시작 부분으로 돌아갑니다. 내 질문은 왜? 내가 도대체 뭘 잘못하고있는 겁니까?
추신 : 3 자마다 동일한 문제가 발생합니다 (예 : 더 이상 갈 수없는 경우). 첫 번째 문제로 돌아 가야하는 것처럼 문제가 발생합니다.
미리 감사드립니다. memmove
및 memcpy
차이가 memcpy
약간 빠르다하지만 대상 메모리 소스 메모리를 중첩하는 것을 허용하지 않는다는 점이다 : C에서