2010-10-30 20 views
0

Je rencontre beaucoup de problèmes pour accéder à une valeur dans un tableau de caractères à un emplacement spécifique. J'utilise inline-assembly en C++ et en utilisant Visual Studio (si cela aide). Voici mon code:Obtenir un caractère à l'emplacement de l'index dans la matrice char Assembly X86 embedded

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

Quand je debug, je peux voir que num1 [3] est la valeur que je veux, mais je ne peux pas sembler faire soit al ou égale eax cette valeur, il semble être toujours une référence de pointeur. J'ai aussi joué avec Byte PTR sans aucune chance.

+0

Vous devriez publier un code * réel *. Ce fragment n'est pas valide, vous devez au moins dire au compilateur C++ que le corps du code est assembleur sinon il tentera de l'analyser comme du code C++. http://msdn.microsoft.com/en-us/library/5f7adz6y%28v=VS.71%29.aspx – Clifford

Répondre

1

Je ne suis pas bon ni au montage en ligne, ni à la syntaxe MASM, mais voici quelques conseils:

1) Essayez ceci:

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 est pour unsigned char, donc nous utilisé movsx)

2) Vous devez passer la valeur de eax à C. la manière simpliest est de déclarer une variable et pour y mettre les résultats: int rez; __asm { mov rez, eax; };

3) Si vous voulez écrire toute la fonction dans assembly, vous devriez envisager d'utiliser le mot-clé naked (et lire à propos des conventions d'appel). Si ce n'est pas le cas, assurez-vous de conserver les registres et n'endommagez pas la pile.

+0

fonctionne parfaitement! Merci beaucoup pour l'aide. Je vais regarder dans le mot clé nu – Quentin

+0

@Quentin Essayez également NASM sans VS autour. Cela aidera à mieux comprendre ce qui se passe. – ruslik

0

On dirait que quelqu'un fait ses devoirs ICS 51! Suivez les conseils de Ruslik et vous aurez terminé en un rien de temps.

+0

Yup, la lecture des tableaux est source de confusion dans l'assemblage ... – Quentin