Почему эта встроенная сборка не работает?
Для следующего кода:
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!
Есть идеи, почему он не работает должным образом и как его решить?