[問題] VC的內聯匯編,不能用64位寄存器?

看板C_and_CPP作者 (啤酒肚)時間14年前 (2011/06/10 13:55), 編輯推噓7(709)
留言16則, 9人參與, 最新討論串1/1
自己寫了個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
你在哪個環境下用 rcx?
06/10 14:15, 1F

06/10 14:17, , 2F
win xp 32bit vs 2005
06/10 14:17, 2F

06/10 17:02, , 3F
原來xp32bit版可以跑64位元的程式(筆記筆記)
06/10 17:02, 3F

06/10 17:15, , 4F
字擠成是用不用64-bit暫存器跟作業系統是不是64-bit沒關啊
06/10 17:15, 4F

06/10 17:42, , 5F
現在在市場上買的到的x86 那顆cpu不是 64位?
06/10 17:42, 5F

06/10 17:43, , 6F
cpu是 64位就該有 64位的寄存器啊 我是用E6500
06/10 17:43, 6F

06/10 17:43, , 7F
架構確認是 EM64
06/10 17:43, 7F

06/10 18:31, , 8F
32bit作業系統無法執行64bit程式
06/10 18:31, 8F

06/10 18:31, , 9F
而且你的VC2005要安裝x64 compiler/toolset
06/10 18:31, 9F

06/10 18:45, , 10F
怎麼不是 movs ???
06/10 18:45, 10F

06/10 22:52, , 11F
推測是l大說的, 用x64的設定去compile看看@_@"
06/10 22:52, 11F

06/11 01:11, , 12F
你有實測過效能嗎囧? VC的本來就用asm寫了,而且有處理
06/11 01:11, 12F

06/11 01:11, , 13F
調整unalign的問題, src和dst都要考慮..
06/11 01:11, 13F

06/11 01:35, , 14F
DMA > Stream operation > general reg ... XD
06/11 01:35, 14F

06/11 21:53, , 15F
就算是這樣還是不能用啊...64bit暫時把inline asm拿掉
06/11 21:53, 15F

06/11 21:53, , 16F
不知道接下來有沒有考慮加回來
06/11 21:53, 16F
文章代碼(AID): #1DyR77tV (C_and_CPP)