1 
2 #include <stdio.h>
3 
4 unsigned char buf[256];
5 
6 static int lookup ( int i )
7 {
8   int block[3];
9   block[0] = (int)&buf[0];
10   block[1] = i;
11   block[2] = 0;
12   __asm__ __volatile__(
13      "movl %0,%%esi\n\t"
14      "movl 0(%%esi),%%ebx\n\t"
15      "movl 4(%%esi),%%eax\n\t"
16      "xlat\n\t"
17      "movl %%eax,8(%%esi)\n\t"
18      : : /*in*/"r"(block) : "esi", "ebx", "eax", "memory", "cc"
19   );
20   return block[2];
21 }
22 
23 int main(void)
24 {
25   int i;
26   unsigned j;
27 
28    for (i = 0; i < 256; i++)
29     buf[i] = (unsigned char) i;
30 
31    j = 0;
32    for (i = 0; i < 130; i++) {
33      printf("%08x\n", lookup(j));
34      j += 0x01000001;
35    }
36 
37    return 0;
38 }
39