2010-04-24 5 views
0

Je suis novice en programmation d'assemblage Pentium.Pentium Assembly Code Question

Pourriez-vous vérifier si je fais la traduction de C vers assembly correctement?

Condition: adresses 32 bits, entiers 32 bits et caractères 16 bits.

char [5] voyelles = "aeiou";

Traduire: voyelles db "aeoiu"; ou doit-il être « voyelles dw "aeoiu"?

Comment accéder voyelles [p]? Est-il Byte [voyelles + p * 2]? (car les caractères sont 16 bits?)

Un grand merci

+1

Vous êtes intéressé par la syntaxe MASM/NASM, n'est-ce pas? –

+1

... et quelles options avez-vous spécifié à quel assembleur pour faire les caractères 16 bits? – Potatoswatter

Répondre

0

Ma Intel syntaxe d'assemblage est un petit octet rouillé, mais word[vowels+p*2] est certainement plus correct que byte[vowels+p*2]. Vous devez multiplier par la taille de la e éléments vous-même et spécifient le type de données lues (ici, les quantités de 16 bits).

Pour la première question, cela dépend de la façon dont votre assembleur interprète "" après db et dw. Je ne sais pas à ce sujet - je n'ai jamais mélangé l'assemblage et les encodages 16 bits - mais je suppose que dw est correct. N'oubliez pas d'utiliser l'instruction MOVZX au lieu des registres de 16 bits que l'assembleur peut vous laisser utiliser. L'utilisation des registres 16 bits en mode 32 bits génère de longues instructions qui s'exécutent également lentement pour diverses raisons. MOVZX étend la lecture de la valeur 16 bits pour occuper un registre entier de 32 bits, ce qui est la manière correcte de les gérer.

+0

Si je fais" voyelles dw "aeoiu" au début. Quand je veux exprimer: voyelles [p], devrais-je utiliser le mot [voyelles + p * 4] au lieu du mot [voyelles + p * 2]? Depuis que j'ai déclaré chaque caractère dans les voyelles comme un mot (16 bits). – leon

+0

Je pense que le «mot» dans «mot [voyelles + p * 2]» ne sert qu'à spécifier quel genre de quantité vous voulez lire, quel que soit le calcul de l'adresse, que vous devez faire vous-même et où 'voyelles + p * 2' est correct puisque chacun de vos caractères est en 16 bits. –

0

Oui, le n ème élément d'un tableau de type T à partir de arr est situé à l'adresse mémoire arr+n*sizeof(T).

+0

"voyelles dw" aeoiu "ou voyelles db" aeoiu "? Lequel est correct? – leon