Advertisement
AntonioVillanueva

find inline assembler

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