zhukov000

Asm2

Feb 2nd, 2020
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void solve(char * number)
  5. {
  6.   int x[3] = {};
  7.   // check if digits
  8.   for(int i=0; i<3; ++i)
  9.   {
  10.     if ( !isdigit(number[i]) ) return;
  11.     x[i] = number[i] - '0';
  12.   }
  13.   // modify digits
  14.   __asm__ ( "cmp %%eax, %%ebx;"
  15.             "JNE NotEqual;"       // x[0] != x[1]
  16.  
  17.             "cmp %%eax, %%ecx;"
  18.             "JBE NotEqual;"      // x[0] >= x[2]
  19.  
  20.             "mov $0, %%dl;"     // dl = 0
  21.             "add %%al, %%dl;"   // dl += a[0]
  22.             "add %%cl, %%dl;"   // dl += a[2]
  23.             "mov $9, %%dh;"
  24.             "cmp %%dl, %%dh;"
  25.             "JB Final;"           // dl > dh
  26.  
  27.             "movl %%edx, %%ebx;"  // x[1] = edx
  28.  
  29.             "JMP Final;"
  30.  
  31.             "NotEqual:"           // swap(x[0], x[2])
  32.             "movl %%eax, %%edx;"
  33.             "movl %%ecx, %%eax;"
  34.             "movl %%edx, %%ecx;"
  35.             "Final:"
  36.            : "=a"(x[0]), "=b"(x[1]), "=c"(x[2]): "a"(x[0]) , "b"(x[1]), "c"(x[2]) );
  37.  
  38.   // write to number
  39.   for(int i=0; i<3; ++i)
  40.     number[i] = x[i] + '0';
  41. }
  42.  
  43. int main()
  44. {
  45.   char data[4] = {};
  46.   scanf("%s", data);
  47.   solve(data);
  48.   printf("%s", data);
  49.   return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment