我遇到了问题。我在函数中发送一个指针,首先将数组的最后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代码......
答案 0 :(得分:0)
les esi, arr
指令错误(您也不想更改es reister)您应该只使用mov esi, arr
(测试 - 工作)
答案 1 :(得分:0)
您不应该使用任何影响flat
内存模型中的段寄存器的指令。因此,请将les esi,arr
替换为mov esi,arr