Advertisement
dllbridge

Untitled

Apr 4th, 2024
803
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.24 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #ifdef   __GNUC__
  5. /////////////////////////////////////////////////////////  -masm=intel
  6. char* asm_strcpy(char *psz1, const char *psz2)         //                
  7. {
  8.    
  9.     __asm("           mov  esi ,   %1         ;"
  10.           "           mov  edi ,   %0         ;"
  11.           " L_01:     mov   al , [esi]        ;"       
  12.           "           mov [edi],   al         ;"
  13.           "           or    al ,    0         ;"
  14.           "           jz   L_02            \n\t"       //  Так тоже можно завершить строку.
  15.           "           inc  esi                ;"
  16.           "           inc  edi                ;"   
  17.           "           jmp  L_01               ;"
  18.           " L_02:                             ;"         
  19.           //    - - - - - - - - - - - - - - - -
  20.           // "m" = memory
  21.           :: "m"(psz1), "m"(psz2)
  22.            : "%eax", "%esi", "%edi"                    //  Регистры, которые нужно восстановить после использования.    
  23.           );
  24.    
  25. return psz1;   
  26. }  
  27.  
  28.  
  29. /////////////////////////////////////////////////////////  -masm=intel
  30. char* asm_strcat(char *psz1, const char *psz2)         //                
  31. {
  32.    
  33.     __asm(
  34.           "           mov  edi ,   %0         ;"
  35.           "           dec  edi                ;"         
  36.           " L_00:     inc  edi                ;"   
  37.           "           mov   al , [edi]        ;"
  38.           "           or    al ,   0          ;"                 
  39.           "           jnz  L_00               ;"  
  40.    
  41.           "           mov  esi ,   %1         ;"
  42.          
  43.           " L_11:     mov   al , [esi]        ;"       
  44.           "           mov [edi],   al         ;"
  45.           "           or    al ,    0         ;"
  46.           "           jz   L_22            \n\t"       //  Так тоже можно завершить строку.
  47.           "           inc  esi                ;"
  48.           "           inc  edi                ;"   
  49.           "           jmp  L_11               ;"
  50.           " L_22:                             ;"         
  51.           //    - - - - - - - - - - - - - - - -
  52.           // "m" = memory
  53.           :: "m"(psz1), "m"(psz2)
  54.            : "%eax", "%esi", "%edi"                    //  Регистры, которые нужно восстановить после использования.    
  55.           );
  56.    
  57. return psz1;   
  58. }  
  59. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement