下面这段代码的目的,是把栈里面的内容,读取到C变量当中
void readStack() {
uint64_t value1;
uint64_t value2;
uint64_t reg10;
uint64_t reg11;
// 先把x10、x11寄存器的值暂存起来
__asm volatile("str x10, [%0]\n" :: "r"(®10));
__asm volatile("str x11, [%0]\n" :: "r"(®11));
// 从栈中读取到x10、x11寄存器,然后保存到变量中
__asm volatile("ldp x10, x11, [sp], #16\n");// 执行完这一句后,reg10和reg11的值就变了
__asm volatile("str x10, [%0]\n" :: "r"(&value1));
__asm volatile("str x11, [%0]\n" :: "r"(&value2));
__asm volatile("sub sp, sp, 16");
__asm volatile("ldr x10, [%0]\n" :: "r"(®10));
__asm volatile("ldr x11, [%0]\n" :: "r"(®11));
}
但是在执行完 ldp
指令以后,之前用来暂存x10
、x11
值的reg10
、reg10
,里面内容就变了
求教为什么reg10
、reg10
的值会变