mips bal和la 分别对ra和寄存器值的区别
来源:互联网 发布:网页客户端制作软件 编辑:程序博客网 时间:2024/06/07 05:33
在pmon中判断当前的代码是在flash中运行,还是在ram运行如下:
bal locate /* Get cruuent execute address */
nop
uncached:
or ra, UNCACHED_MEMORY_ADDR
j ra
nop
locate:
la s0,uncached
subu s0,ra,s0
在这里我们假设uncached相对于代码开始的偏移为offset1,locate相对于代码开始的偏移为offset2。
现在我们是从spi-flash中启动,所以PC的地址是从0xbfc00000开始的,而代码链接的时候,地址则是从0x80100000开始的。
那么执行“bal locate”跳转到“locate“之后,ra寄存器里的值是绝对地址的==(0xbfc00000+offset1),
而“la s0,uncached”之后,s0==(0x80100000+offset1)。
所以再执行“subu s0,ra,s0”之后,就可以算出链接代码与实际执行代码的偏移,这样当用到rdata段数据的时候,用标号的地址加上这个偏移就可以得到在spi-flash的数据。
总结:
la 寄存器,标号 ---->寄存器得到的是标号相对于链接地址的值;
而bal之后的ra寄存器保存的是当前存储介质的绝对地址。
- mips bal和la 分别对ra和寄存器值的区别
- WCDMA中的URA和LA/RA
- mips 和 mipsel 的区别
- mips和mipsel的区别
- mips 和 mipsel 的区别
- MIPS 体系结构中的寄存器 和常用的命令
- pc寄存器和ir寄存器的区别
- 寄存器和存储器的区别
- 存储器和寄存器的区别
- 寄存器和存储器的区别?
- 存储器和寄存器的区别
- 寄存器和锁存器的区别
- MIPS 的寄存器
- 对寄存器ESP和EBP的理解
- MIPS CPU寄存器和系统控制协处理器CP0 分析
- 锁存器、触发器、寄存器和缓冲器的区别
- 锁存器、触发器、寄存器和缓冲器的区别
- 锁存器、触发器、寄存器和缓冲器的区别
- 使用 python 登录163邮箱,并列出通信录
- oracle bbed 恢复无归档的数据库
- MYSQL中'TYPE=MyISAM'错误的解决方案
- 服务器操作命令
- 又是一个年末
- mips bal和la 分别对ra和寄存器值的区别
- 开源KVM管理工具介绍
- vm 安装 linux 出现错误- 未找到要在其中创建新文件系统的有效设备
- 第18章、基于监听器的事件处理(从零开始学Android)
- 手动为treeview添加节点
- 对市面上几本WPF/Silverlight书的评价
- Oracle中时间转换要注意的问题
- 使用crosstool_ng制作交叉链
- 常用电脑快捷键大全