Advertisement
AntonioVillanueva

index_of version inline assembler AT&T

Jan 18th, 2016
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. //index_of version "inline assembler AT&T
  2. #include <iostream>
  3. using namespace std;
  4. //asm(".intel_syntax noprefix");
  5. //asm(".att_syntax prefix");
  6.  
  7. size_t index_of(char *cadena,char c){
  8.  
  9.     char pos(0);
  10.     asm (
  11.  
  12.     "inicio:"
  13.    
  14.     "cmp $0x00,(%1);"/*ha llegado al final del string ,es cero ?*/
  15.  
  16.     "je salida;"/*si ha llegado al final salta a salida*/
  17.    
  18.     "cmp (%1),%2;"/*compara el indice de la cadena con el caracter buscado*/
  19.     "je salida;"/*si es igual salta a salida*/
  20.    
  21.     "inc %1;"/*incrementa una posicion el index ..puntero...del array cadena*/
  22.     "incb %0;"/*incrementa en 1 el contador de posicion*/
  23.     "jmp inicio;"/*salta la inicio*/
  24.    
  25.     "salida:"/*salida*/
  26.     /*"and $0xFF,%0;"*/
  27.  
  28.  
  29.      :"=b"(pos)        /* output utiliza registro b %0 */
  30.      :"r"(cadena) ,"r" (c)         /* input  %1 %2*/
  31.      :   /* clobbered register */
  32.      );
  33.     return (size_t) pos;
  34. };
  35.  
  36. int main(){
  37.     //Debo pode usarlo de la siguiente manera:
  38.         string msg ("I love programming in C++!");
  39.         auto i = index_of(&msg[0], 'l');          
  40.         cout <<"=" <<i<<endl;
  41.     return 0;
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement