mips bal和la 分别对ra和寄存器值的区别

原创 2012年12月17日 16:10:55

在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指令简单入门

MIPS Architecture and Assembly Language Overview MIPS架构及其汇编初步   (开始之前稍微再提下,整体分为4个结构:)   ...
  • u010663732
  • u010663732
  • 2016-06-30 23:59:15
  • 21866

mips中的la指令

在pmon中判断当前的代码是在flash中运行,还是在ram运行如下: bal locate /* Get cruuent execute address */ nop uncached: ...
  • laoyouji
  • laoyouji
  • 2012-05-01 11:32:16
  • 9522

MIPS 通用寄存器 + 指令

MIPS通用寄存器 MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER N...
  • gujing001
  • gujing001
  • 2013-01-07 13:55:15
  • 33444

MIPS中的跳转/分支指令

本文节选自《See MIPS run2rd》/《MIPS体系结构透视》中的部分章节,结合个人理解,对部分译文有所改动。 1.5.2 编址及内存访问 1.5.4 程序员可见的流水线效果 8.7.8 跳转...
  • phunxm
  • phunxm
  • 2013-05-11 11:27:34
  • 37199

【十分钟教会你汇编】MIPS编程入门(妈妈说标题要高大上,才会有人看>_<!)

转载:http://www.cnblogs.com/thoupin/p/4018455.html?utm_source=tuicool 无意中找到一篇十分好用,而且篇幅也不是很大的入门教程,通篇阅后...
  • king523103
  • king523103
  • 2015-05-25 15:51:30
  • 4160

mips汇编完整程序的分析

是对mips汇编的整个程序的编译过程的分析:在里面写出了一些需要注意的地方,希望对看到的有帮助,并希望大家指正,共同学习。...
  • u014100559
  • u014100559
  • 2014-09-30 13:06:16
  • 5800

ARM的六大类指令集---LDR、LDRB、LDRH、LDM、STR、STRB、STRH、STM

汇编指令:LDR、LDRB、LDRH、STR、STRB、STRH
  • u013477200
  • u013477200
  • 2016-02-23 15:30:36
  • 21347

mips bal和la 分别对ra和寄存器值的区别

在pmon中判断当前的代码是在flash中运行,还是在ram运行如下: bal locate /* Get cruuent execute address */ nop uncach...
  • VMA_LMA
  • VMA_LMA
  • 2012-12-17 16:10:55
  • 3293

第十五期 MIPS汇编U-Boot从start.S开始《路由器就是开发板》

这一期我们概略说一下MIPS架构并了解一下简单的汇编语句。首先推荐大家阅读一下SDK里DataSheet文件夹下的See MIPS Run Linux.pdf和MIPS.Assembly.Langua...
  • aggresss
  • aggresss
  • 2016-09-22 15:02:48
  • 3216

MIPS寄存器说明

寄存器分为2部分:内部32个通用寄存器和8个专用寄存器。可以直接在GDB中输入info registers就能得到32个通用寄存器和8个专用寄存器的值了,参见下表: (gdb...
  • jackixzj
  • jackixzj
  • 2017-02-08 10:52:31
  • 544
收藏助手
不良信息举报
您举报文章:mips bal和la 分别对ra和寄存器值的区别
举报原因:
原因补充:

(最多只允许输入30个字)