For the the following code:
long buf[64];
register long rrax asm (\"rax\");
register long rrbx asm (\"rbx\");
register long rrsi asm (\"rsi\");
rrax = 0x34
The compiler uses registers, and it may write over the values you have put in them.
In this case, the compiler probably uses the rbx register after the rrbx assignment and before the inline assembly section.
In general, you shouldn't expect registers to keep their values after and between inline assembly code sequences.