[問題] VC的內聯匯編,不能用64位寄存器?
自己寫了個memcpy 函數,練習下匯編:
#define DIV4(AA) ((AA) >> 2)
#define ASM __asm
void asm_memcpy(void *pDst, void *pSrc, size_t size)
{
unsigned int i;
unsigned int nLoops;
nLoops = DIV4(size);
char *pMovDst, *pMovSrc;
pMovDst = (char*)pDst;
pMovSrc = (char*)pSrc;
for(i = 0; i < nLoops; i++){
ASM
{
mov esi, pSrc;
mov edi, pDst;
mov ebx , i;
mov ecx, [esi + ebx*4];
mov [edi + ebx*4], ecx;
}/*ASM*/
}/*for i nLoops*/
for(i = nLoops*4; i< size; i++)
pMovDst[i] = pMovSrc[i];
}/*asm_memcpy*/
(這效能比標準的 memcpy 稍稍快一點點,或打平手)
這目前這是用ecx ( 32位) 來做中間的寄存氣,所以一次只能複製4字節
想用 rcx (64位) 以達更大的效能
不過 vc會擋哩:
error C2415: improper operand type
那請問 vc 中不可使用到 64位寄存器嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.158.204
※ 編輯: DrStein 來自: 59.120.158.204 (06/10 13:58)
推
06/10 14:15, , 1F
06/10 14:15, 1F
→
06/10 14:17, , 2F
06/10 14:17, 2F
推
06/10 17:02, , 3F
06/10 17:02, 3F
→
06/10 17:15, , 4F
06/10 17:15, 4F
→
06/10 17:42, , 5F
06/10 17:42, 5F
→
06/10 17:43, , 6F
06/10 17:43, 6F
→
06/10 17:43, , 7F
06/10 17:43, 7F
推
06/10 18:31, , 8F
06/10 18:31, 8F
→
06/10 18:31, , 9F
06/10 18:31, 9F
推
06/10 18:45, , 10F
06/10 18:45, 10F
推
06/10 22:52, , 11F
06/10 22:52, 11F
推
06/11 01:11, , 12F
06/11 01:11, 12F
→
06/11 01:11, , 13F
06/11 01:11, 13F
推
06/11 01:35, , 14F
06/11 01:35, 14F
→
06/11 21:53, , 15F
06/11 21:53, 15F
→
06/11 21:53, , 16F
06/11 21:53, 16F