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
  • 17111

mips中的la指令

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

MIPS中的跳转/分支指令

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

MIPS寻址方式

MIPS的寻址方式:       1、MIPS硬件只支持一种寻址模式,即:寄存器基地址 + 立即数偏移量,且offset必须在-32768~32767之间(16位),任何载入和存储机器指令都可以...
  • u011026885
  • u011026885
  • 2016年11月11日 22:06
  • 2176

常用汇编指令

1、加减指令 2、adr指令 adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令。可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立...
  • qingkongyeyue
  • qingkongyeyue
  • 2016年08月22日 12:09
  • 3174

MIPS

  MIPS前言很久没和硬件打交道了,花了些时间来学习mips,确也收获了不少,拿出来和大家共享,其中会有理解有误或不完整的地方,还请大家积极指出,共同进步。1、概述au1500是amd公司生产的一款...
  • freshui
  • freshui
  • 2007年07月17日 09:42
  • 4693

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

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

MIPS寄存器详解

MIPS有32个通用寄存器(0−0-31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 下面给以详细说明: 0:即0:即zero,该寄存器总是返回零,为0这个...
  • Lrrent
  • Lrrent
  • 2016年04月17日 12:53
  • 2652

MIPS寄存器使用约定

MIPS寄存器使用约定
  • mzhhaoo
  • mzhhaoo
  • 2017年03月16日 00:35
  • 222

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

这一期我们概略说一下MIPS架构并了解一下简单的汇编语句。首先推荐大家阅读一下SDK里DataSheet文件夹下的See MIPS Run Linux.pdf和MIPS.Assembly.Langua...
  • aggresss
  • aggresss
  • 2016年09月22日 15:02
  • 2934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mips bal和la 分别对ra和寄存器值的区别
举报原因:
原因补充:

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