开启mmu后,call和jalr的区别

在我写虚拟内存时遇到一些问题,jalr t0就是可以的,而call main则没办法成功

而且这里默认main是偏移前的地址,怪哉!!!

让我们看看jalr

和call(伪指令!!!)

然后在链接后看看main的地址,主要看程序中main是不是偏移

悬着的心也死了!!!

查看一下ucore也有类似的问题,看看他们怎么解释

 

 

太复杂了!看不懂!

结论

在mmu之前jalr已经将pc值设置为绝对地址(也就是物理main+偏移=虚拟main),而call则不同,它是一条伪指令是在mmu后面执行的,这个就会造成:call到虚拟main+偏移=非法访问!

posted @ 2024-04-10 19:34  小菜碟子  阅读(50)  评论(0编辑  收藏  举报