数组到C ++函数(使用ASM)读取错误

时间:2012-09-30 14:32:27

标签: c++ c visual-studio assembly

我遇到了问题。我在函数中发送一个指针,首先将数组的最后3个元素替换为3。我应该使用unsigned char数组发送它,它应该与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 
    }
}

从esi到edi的movsb 我在“rep movsb”中出错了什么错了?如果在main函数中使用这个ASM代码没关系,但我必须在函数中使用ASM代码......

2 个答案:

答案 0 :(得分:0)

les esi, arr指令错误(您也不想更改es reister)您应该只使用mov esi, arr (测试 - 工作)

答案 1 :(得分:0)

您不应该使用任何影响flat内存模型中的段寄存器的指令。因此,请将les esi,arr替换为mov esi,arr