对于以下代码:
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] );
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
buf[0] = 0, buf[1] = 346161cbc0!
Run Code Online (Sandbox Code Playgroud)
它应该是:
buf[0] = 34, buf[1] = 39!
Run Code Online (Sandbox Code Playgroud)
任何想法为什么它不能正常工作,以及如何解决它?