У меня есть проблема. Я посылаю указатель на функцию, которая заменяет 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
}
}
MOVSB из ESI в EDI
Я получил ошибку в «rep movsb» Что не так? Если использовать этот код ASM в основной функции, это нормально, но я должен использовать код ASM в функции …
Вы не должны использовать какие-либо инструкции, которые влияют на регистры сегмента в flat
модели памяти. Итак, замени les esi,arr
с mov esi,arr
les esi, arr
инструкция неверна (вы не хотите менять также и регистр es) вам просто нужно использовать mov esi, arr
(проверено — работает)