开启mmu后,call和jalr的区别
在我写虚拟内存时遇到一些问题,jalr t0就是可以的,而call main则没办法成功
而且这里默认main是偏移前的地址,怪哉!!!
让我们看看jalr
和call(伪指令!!!)
然后在链接后看看main的地址,主要看程序中main是不是偏移
悬着的心也死了!!!
查看一下ucore也有类似的问题,看看他们怎么解释
太复杂了!看不懂!
结论
在mmu之前jalr已经将pc值设置为绝对地址(也就是物理main+偏移=虚拟main),而call则不同,它是一条伪指令是在mmu后面执行的,这个就会造成:call到虚拟main+偏移=非法访问!