Advertisement
Guest User

inlineass.c

a guest
Nov 3rd, 2013
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. void memset32(int32_t *i, int32_t v, uint32_t len)
  5. {
  6.     __asm__(
  7.     //"pushl %eax\n\t"  
  8.     //"pushl %ebx\n\t"
  9.     "xorl %eax, %eax\n\t"   // EAX = 0
  10.     "movl -12(%rbp), %ebx\n\t"  // EBX = v
  11.     ".memset32_l1:\n\t"
  12.     "cmpl -16(%rbp), %eax\n\t"  // compare len and EAX
  13.     "jle .memset32_l1e\n\t" // EAX < len
  14.     "movl %ebx, -8(%rbp)\n\t"   // *i = v
  15.     "addq $4, -8(%rbp)\n\t" // i++
  16.     "addl $1, %eax\n\t"     // EAX++
  17.     "jmp .memset32_l1\n\t"
  18.     ".memset32_l1e:\n\t"
  19.     //"popl %eax\n\t"
  20.     //"popl %ebx"
  21.     );
  22. }
  23.  
  24. int main() {
  25.     int32_t a[4];
  26.     int i;
  27.     for ( i = 0; i < 4; i++ ) {
  28.         a[i] = rand();
  29.         printf("a[%d] = %d\n", i, a[i]);
  30.     }
  31.     memset32(a, 0, 4);
  32.     puts("After memset32:");
  33.     for ( i = 0; i < 4; i++ )
  34.         printf("a[%d] = %d\n", i, a[i]);
  35.     return 0;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement