您好,我这边有一个关于函数传参的问题,代码如下:
_User_Enter(0x8010021U,0x2001FFF0,0U);//我想进入用户模式,第一个参数为入口地址,该函数用汇编实现 //我在测试,所以暂时未用到第二第三个参数
_User_Enter:
li t0, 0x00001800
csrc mstatus, t0
la t0, 1f
csrw mepc, t0
mret
1:
jr a0
将mstatus寄存器MPP位设为用户模式后,转到a0地址,也就是进入我的用户态代码。在这段代码中,a0寄存器是不是应该保存我的函数的第一个参数0x8010021。但是在单步调试下,我发现a0和我预想的并不一样。
在刚进入_User_Enter:这个函数时,a0,a1,a2,三个寄存器分别为0x8010021,0x2001FFF0,0,确实是函数传入的参数,但是一旦运行完我上边汇编代码的第一行,a0寄存器的内容就会突然变化,变成0xe000 0000,附调试图。
a0寄存器的变化和我汇编代码没有关系,我试了一下不同的写法,甚至只写一行任意的汇编代码,只要开始运行,a0寄存器的内容就会变为0xe000 0000,感到十分奇怪。我也尝试了传入不同的参数,仍然会发生相同的结果。
请问我在哪里出了问题,期待答复,十分感谢!