0

我有问题。我在函数中发送一个指针,首先将数组的最后 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”中有错误 怎么了?如果在主函数中使用这个 ASM 代码没关系,但我必须在函数中使用 ASM 代码...

4

2 回答 2

0

指令是错误的les esi, arr(你也不想改变 es reister)你应该只使用mov esi, arr (经过测试 - 有效)

于 2012-09-30T14:44:41.293 回答
0

您不应使用任何影响flat内存模型中的段寄存器的指令。所以,替换les esi,arrmov esi,arr

于 2012-09-30T14:46:44.740 回答