Вопрос:
Я вхожу в функцию ассемблера с двумя массивами C char, такими как:
EncryptAsm(arr1,arr2)
где оба имеют тип char*, один содержит текст, а второй заполнен знаками “#”, и он действует как двухмерный массив, оба имеют одинаковую длину.
Я пытаюсь передать некоторые значения от первого массива до второго в процедуре asm:
mov ecx,row ;calculating index of arr2 index=[row*inputLength+column] imul ecx,ebx add ecx,column mov eax,1 ;calculating index of arr1 imul eax,iterator mov esi,arr1[eax] mov edi,arr2[ecx] movsb
Когда индексы обоих массивов равны 0 (eax и ecx равны 0), все в порядке, но если оно больше, оно не работает и выдает ошибку (например, eax == 1).
В коде asm массивы имеют тип:
arr1:ptr byte, arr2:ptr byte
Что я делаю не так?
Лучший ответ:
можете ли вы проверить руководство по сборке movsb? Если обычный движок Intel movsb, он должен кодироваться следующим образом:
CLD MOV ECX ,100 LEA ESI,FIRST LEA EDI,SECOND REP MOVSB
А также, что нужно было проверить:
1, сегмент SI/DI, если права доступа на запись и длина сегмента являются правильными
2, защита прерываний во время REP MOVSB