開啟mmu後,call和jalr的區別

小菜碟子發表於2024-04-10

在我寫虛擬記憶體時遇到一些問題,jalr t0就是可以的,而call main則沒辦法成功

而且這裡預設main是偏移前的地址,怪哉!!!

讓我們看看jalr

和call(偽指令!!!)

然後在連結後看看main的地址,主要看程式中main是不是偏移

懸著的心也死了!!!

檢視一下ucore也有類似的問題,看看他們怎麼解釋

太複雜了!看不懂!

結論

在mmu之前jalr已經將pc值設定為絕對地址(也就是物理main+偏移=虛擬main),而call則不同,它是一條偽指令是在mmu後面執行的,這個就會造成:call到虛擬main+偏移=非法訪問!

相關文章