4136|1

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于arm7汇编指令中的BL的问题。 [复制链接]

我在看一个ADS自带的swi的例子时,遇到了这么一个问题:

vec = (routine - (unsigned)vector - 8) >> 2;

这句话老师告诉我是为了算出软中断处理程序距软中断向量的相对位置。
然后我问为什么减8,再右移两位。在arm手册中找到了,关于bl:


Specifies the address to branch to. The branch target address is calculated by:
1. Sign-extending the 24-bit signed (two's complement) immediate to 32 bits.
2. Shifting the result left two bits.
3. Adding this to the contents of the PC, which contains the address of the branch instruction plus 8.

我理解的是把"bl address"中的 addr 取出来先扩展成32位,再左移两位,再加到pc上,再加8。
我想问的是:是不是我们写"bl address"这条指令后,编译时,编译器就把 addr 就做了扩展,左移的操作,当执行软中断时,把 addr 取出来,加到pc中,再加8,就跳转到软中断处理程序了,是这个样子吗?如果是的话,编译器为什么做这一系列的操作,有什么好处吗?

此帖出自ARM技术论坛

最新回复

ARM是RISC CPU,所有指令等长---32bit。要在32bit内容纳一条BL指令,而这条BL指令不仅包含操作码还包含操作数(这里是地址),因此显然这个操作数要少于32bit,因此要牺牲几个位。  详情 回复 发表于 2007-8-4 21:00
点赞 关注
 

回复
举报

86

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ARM是RISC CPU,所有指令等长---32bit。要在32bit内容纳一条BL指令,而这条BL指令不仅包含操作码还包含操作数(这里是地址),因此显然这个操作数要少于32bit,因此要牺牲几个位。
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表