2012-09-30 71 views
0

我遇到了問題。我發送一個函數指針,將3個最後一個數組的元素替換爲3。我應該使用unsigned char數組發送,它應該與ASM一起使用。數組到C++函數(使用ASM)讀取錯誤

int main(int argc, char* argv[]) 
{ 
    unsigned char arr[24]={ 
     1,2,3,4,5,6, 
     7,8,9,10,11,12, 
     13,14,15,16,17,18, 
     19,20,21,22,23,24 
     };// example 

     AsmFlipVertical(arr); 
}; 
void AsmFlipVertical(unsigned char *arr) 
{ 
_asm 
    { 
     les esi,arr ; esi=adress of first elem 
     mov eax,esi 
     add eax,21 
     mov edi,eax ; edi=adress of first elem+21;edi is a adress of 21th elem of array 
     cld 
     mov ecx,3 
     rep movsb 
    } 
} 

MOVSB從ESI到EDI Ive得到了在 「代表MOVSB」 錯誤怎麼回事?如果在主函數中使用這個ASM代碼沒關係,但我必須在函數中使用ASM代碼...

+1

你會得到什麼錯誤信息? – Linuxios

回答

0

您不應該使用任何影響flat內存模型中段寄存器的指令。所以,用mov esi,arr替換les esi,arr

0

les esi, arr指令錯誤(您也不想更改es reister)您應該只使用mov esi, arr (已測試的作品)