Почему эта встроенная сборка не работает?

Для следующего кода:

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!

Есть идеи, почему он не работает должным образом и как его решить?

Ответы на вопрос(3)

Ваш ответ на вопрос