массив целых чисел во встроенной сборке x86 - PullRequest
3 голосов
/ 21 октября 2010

Я пытаюсь получить доступ к значениям из массива целых чисел и пытаюсь часами без удачи. Вот мой код:

Все, что я пытаюсь сделать, это получить доступ к значениям в массиве "arr", я видел, как это сделать с символами, но не с целыми числами.

int  binarySearch (int* arr, int arrSize, int key, int* count)
{
    int result=-1;
    int tempCount=0;
    __asm
{
    push esi;
    push edi;
    push eax;
    push ebx;
    push ecx;
    push edx;

    // START CODING HERE
     mov edx, dword ptr arr[1] ;

    // move the value of appropriate registers into result and tempCount;
    // END CODING HERE

    pop edx;
    pop ecx;
    pop ebx;
    pop eax;
    pop edi;
    pop esi;
}
*count = tempCount;
return result;
}

1 Ответ

3 голосов
/ 21 октября 2010

Давайте предположим, что индекс нужного вам элемента в eax, вы бы написали

lea edx, [arr+eax*4]
mov edx, [edx]

Это эквивалентно

edx = arr [eax]

Edit:

Извините, но я забыл, что это встроенный ассм. lea edx, [arr] загрузит эффективный адрес параметра arr в стек, а не сам указатель. Попробуйте это:

mov eax, 1;   //index you want to access
mov ebx, arr;
lea edx, [ebx+eax*4];
mov edx, [edx];



int  binarySearch (int* arr)
{
    int test;

    __asm
    {
        push eax;
        push ebx;
        push edx;

        mov eax, 2;
        mov ebx, arr;
        lea edx, [ebx+eax*4];
        mov edx, [edx];
        mov test, edx

        pop edx;
        pop ebx;
        pop eax;
    }

    return test;
}

int main(void)
{
    int a[5];

    a[0] = 0;
    a[1] = 1;
    a[2] = 21;

    int t = binarySearch(a);

    return 0;
}

t == 21 после выполнения этой программы. Я считаю, что это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...