#include <stdio.h>
unsigned char buf[256];
static int lookup ( int i )
{
int block[3];
block[0] = (int)&buf[0];
block[1] = i;
block[2] = 0;
__asm__ __volatile__(
"movl %0,%%esi\n\t"
"movl 0(%%esi),%%ebx\n\t"
"movl 4(%%esi),%%eax\n\t"
"xlat\n\t"
"movl %%eax,8(%%esi)\n\t"
: : /*in*/"r"(block) : "esi", "ebx", "eax", "memory", "cc"
);
return block[2];
}
int main(void)
{
int i;
unsigned j;
for (i = 0; i < 256; i++)
buf[i] = (unsigned char) i;
j = 0;
for (i = 0; i < 130; i++) {
printf("%08x\n", lookup(j));
j += 0x01000001;
}
return 0;
}