_memcpy_r SEGMENT
memcpy_r PROC
mov r10, rdi
mov r11, rsi
mov rdi, rcx
mov rsi, rdx
mov rcx, r8
shr rcx, 3
rep movsq
mov rcx, r8
and rcx, 7
rep movsb
mov rsi, r11
mov rdi, r10
ret
memcpy_r ENDP
_memcpy_r ENDS
END
我有一個.asm文件,我在Visual Studio 2010項目中使用上述代碼。它設置爲使用Microsoft宏彙編程序(ml64.exe)進行編譯。 該程序在程序的第一行(mov r10,rdi)上發生訪問衝突異常時崩潰。有誰知道爲什麼嗎?此代碼爲什麼會導致訪問衝突異常?
編輯:我應該澄清。如果我刪除第一行,那麼異常仍然會發生在下一行。如果我刪除它,它發生在下一個(mov rdi,rcx)。
'r10'寄存器是否存在於x86-64平臺上?我真的在問......從來沒有見過這樣的......你有沒有試過把'r10'的所有參考文件改爲'rax'? – jyz 2010-10-13 12:24:17
我原本是推rdi,而我仍然有例外。 如果r10不存在,則不會編譯。 – Jarrod 2010-10-13 12:37:10
正確:http://en.wikipedia.org/wiki/X86-64 – jyz 2010-10-13 12:45:36