Для следующего кода:
long buf[64];
register long rrax asm ("rax");
register long rrbx asm ("rbx");
register long rrsi asm ("rsi");
rrax = 0x34;
rrbx = 0x39;
__asm__ __volatile__ ("movq $buf,%rsi");
__asm__ __volatile__ ("movq %rax, 0(%rsi);");
__asm__ __volatile__ ("movq %rbx, 8(%rsi);");
printf( "buf[0] = %lx, buf[1] = %lx!\n", buf[0], buf[1] );
Я получаю следующий вывод:
buf[0] = 0, buf[1] = 346161cbc0!
пока он должен был быть:
buf[0] = 34, buf[1] = 39!
Любые идеи, почему он не работает должным образом и как его решить?