Advertisement
AntonioVillanueva

C++/ASM contar vocales version 2

Jan 30th, 2016
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.59 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.         char reference[]={"aeiou"};
  6.             char chaine[]={'a','e','i','o','u','e','f','i'};
  7.         unsigned char num_voyalles(0);
  8.        
  9.         asm(
  10.         "xor %[num],%[num] \n\t"
  11.         "lea %[chaine],%%rcx \n\t" /* cible une chaine de chars */
  12.         "lea %[reference],%%rdx \n\t"
  13.        
  14.         "\n init :\n\t"
  15.        
  16.         "cmpb $0,(%%rcx) \n\t"/*il est arrive à la fin ?*/      
  17.         "jz fin \n\t"
  18.        
  19.         "movb (%%rdx) ,%%ah \n\t"/* charge voyal reference */
  20.         "cmpb %%ah,(%%rcx) \n\t"/*  exist dans l'index de la chaine ?*/
  21.         "jz augmenter \n\t"/* oui ,augmente */
  22.        
  23.         "inc %%rdx \n\t"/* ++pointeur reference */
  24.         "cmpb $0,(%%rdx) \n\t"/*reference est arrive à la fin ?*/
  25.         "je normal \n\t"/* non donc continue normalement */
  26.         "jmp init \n\t"
  27.  
  28.         "\n normal: \n\t"
  29.         "lea %[reference],%%rdx \n\t"/* oui , reset index reference au debut*/
  30.         "inc %%rcx \n\t"/* incremente l'index de la chaine */
  31.         "jmp init \n\t"/* saute  au debut */
  32.        
  33.  
  34.         "\n augmenter: \n\t"/* aeiou trouve incremente num */
  35.         "inc %[num] \n\t"
  36.         "inc %%rcx \n\t"/* incremente l'index de la chaine */
  37.         "lea %[reference],%%rdx \n\t"/* index reference  au debut */
  38.         "jmp init \n\t "/* saute au debut */
  39.        
  40.         "fin: \n\t"
  41.        
  42.         :[num] "=g"(num_voyalles) /* output */
  43.         :[chaine]"m"(chaine),[reference]"m"(reference) /* input */
  44.         :
  45.         );
  46.        
  47.         cout <<"num de voyalles "<<(int) num_voyalles <<endl;
  48. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement