#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { unsigned long sp1; unsigned long sp2; unsigned long sp3; unsigned short fs1; unsigned short fs2; fs1 = 0x0003; asm("movw %4, %%fs\n" "movl %%esp, %0\n" "pushw %%fs\n" "movl %%esp, %1\n" "popw %%fs\n" "movl %%esp, %2\n" "movw %%fs, %3\n" : "=r" (sp1), "=r" (sp2), "=r" (sp3), "=r" (fs2) : "r" (fs1) : "ax" ); printf("sp change after push = %ld\n", sp2 - sp1); printf("sp change after pop = %ld\n", sp3 - sp2); printf("fs after push and pop = %04x\n", fs1); asm("movw %4, %%fs\n" "movl %%esp, %0\n" "pushl %%fs\n" "movl %%esp, %1\n" "popl %%fs\n" "movl %%esp, %2\n" "movw %%fs, %3\n" : "=r" (sp1), "=r" (sp2), "=r" (sp3), "=r" (fs2) : "r" (fs1) : "ax" ); printf("sp change after push = %ld\n", sp2 - sp1); printf("sp change after pop = %ld\n", sp3 - sp2); printf("fs after push and pop = %04x\n", fs1); exit(0); }