Получить char в месте расположения индекса в массиве символов Assembly X86 - PullRequest
0 голосов
/ 31 октября 2010

У меня много проблем с доступом к значению в массиве символов в определенном месте. Я использую inline-сборку в C ++ и Visual Studio (если это поможет). Вот мой код:

char* addTwoStringNumbers(char *num1)
{
    // here is what I have tried so far:
    movzx eax, num1[3];
    mov al, [eax]
}

Когда я отлаживаю, я вижу, что num1 [3] - это значение, которое я хочу, но я не могу сделать так, чтобы al или eax равнялись этому значению, оно всегда является некоторой ссылкой на указатель. Я также поиграл с Byte PTR без удачи.

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Я не хорош ни во встроенной сборке, ни в синтаксисе MASM, но вот несколько советов:

1) Попробуйте это:

mov   eax, num1 ;// eax points to the beggining of the string
movsx eax, [eax + some_index] ;// movsx puts the char num1[some_index] in eax with sign extend.

(movzx для unsigned char, поэтому мы использовали movsx)

2) Вам нужно передать значение от eax до C. Самый простой способ - объявить переменную и поместить в нее результаты: int rez; __asm { mov rez, eax; };

3) Если вы хотите написать всю функцию в сборке, вам следует подумать об использовании ключевого слова naked (и прочитать о соглашениях о вызовах). Если нет, убедитесь, что вы сохранили регистры и не повредите стек.

0 голосов
/ 31 октября 2010

Похоже, кто-то делает домашнее задание ICS 51! Следуйте совету Руслика, и все будет быстро.

...