таким образом:
pub unsafe fn memcpy(dest: *mut u8, src: *const u8, count: usize) {
core::arch::asm!(
"rep movsb",
in("ecx") count,
in("edi") dest,
in("esi") src,
);
}
Инструкция movsb использует регистр esi который зарезервирован LLVM, соотв. ловлю ошибку компиляции. Как быть?
ps: нашёл решение, с помощью инструкции xchg можно обменять данные в регистрах:
pub unsafe fn memcpy(dest: *mut u8, src: *const u8, count: usize) {
core::arch::asm!(
"xchg ebx, esi",
"rep movsb",
"xchg ebx, esi",
in("ecx") count,
in("edi") dest,
in("ebx") src,
);
}
Вроде как всё работает отлично.
А зачем тебе вообще понадобилось реализовывать memcpy, да ещё и под x86?
Обсуждают сегодня