您好,我這邊有一個關于函數(shù)傳參的問題,代碼如下:
_User_Enter(0x8010021U,0x2001FFF0,0U);//我想進入用戶模式,第一個參數(shù)為入口地址,該函數(shù)用匯編實現(xiàn) //我在測試,所以暫時未用到第二第三個參數(shù)
_User_Enter:
li t0, 0x00001800
csrc mstatus, t0
la t0, 1f
csrw mepc, t0
mret
1:
jr a0
將mstatus寄存器MPP位設為用戶模式后,轉到a0地址,也就是進入我的用戶態(tài)代碼。在這段代碼中,a0寄存器是不是應該保存我的函數(shù)的第一個參數(shù)0x8010021。但是在單步調試下,我發(fā)現(xiàn)a0和我預想的并不一樣。
在剛進入_User_Enter:這個函數(shù)時,a0,a1,a2,三個寄存器分別為0x8010021,0x2001FFF0,0,確實是函數(shù)傳入的參數(shù),但是一旦運行完我上邊匯編代碼的第一行,a0寄存器的內容就會突然變化,變成0xe000 0000,附調試圖。
a0寄存器的變化和我匯編代碼沒有關系,我試了一下不同的寫法,甚至只寫一行任意的匯編代碼,只要開始運行,a0寄存器的內容就會變?yōu)?xe000 0000,感到十分奇怪。我也嘗試了傳入不同的參數(shù),仍然會發(fā)生相同的結果。
請問我在哪里出了問題,期待答復,十分感謝!