看板 C_and_CPP 關於我們 聯絡資訊
自己寫了個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)
LPH66:你在哪個環境下用 rcx? 06/10 14:15
DrStein:win xp 32bit vs 2005 06/10 14:17
stupid0319:原來xp32bit版可以跑64位元的程式(筆記筆記) 06/10 17:02
suhorng:字擠成是用不用64-bit暫存器跟作業系統是不是64-bit沒關啊 06/10 17:15
DrStein:現在在市場上買的到的x86 那顆cpu不是 64位? 06/10 17:42
DrStein:cpu是 64位就該有 64位的寄存器啊 我是用E6500 06/10 17:43
DrStein:架構確認是 EM64 06/10 17:43
littleshan:32bit作業系統無法執行64bit程式 06/10 18:31
littleshan:而且你的VC2005要安裝x64 compiler/toolset 06/10 18:31
softwind:怎麼不是 movs ??? 06/10 18:45
VictorTom:推測是l大說的, 用x64的設定去compile看看@_@" 06/10 22:52
cole945:你有實測過效能嗎囧? VC的本來就用asm寫了,而且有處理 06/11 01:11
cole945:調整unalign的問題, src和dst都要考慮.. 06/11 01:11
softwind:DMA > Stream operation > general reg ... XD 06/11 01:35
windows2k:就算是這樣還是不能用啊...64bit暫時把inline asm拿掉 06/11 21:53
windows2k:不知道接下來有沒有考慮加回來 06/11 21:53