专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
TI C66x DSP 指令集 -之- 跳转指令B
2019-07-13 09:59
发布
生成海报
站内文章
/
DSP
16940
0
979
跳转指令用于实现程序流程的跳转,在
ARM (
同样在
TI C66x DSP)
程序中有两种方法可以实现程序流程的跳转:
—
使用专门的跳转指令(如
B
指令)。
—
直接向程序计数器
PC
写入跳转地址值
。
通过向程序计数器
PC
写入跳转地址值,可以实现在
4GB
的地址空间中的任意跳转,在跳转之前结合使用
MOV
LR
,
PC
等类似指令,可以保存将来的返回地址值,从而实现在
4GB
连续的线性地址空间的子程序调用
。
ARM
指令集中的跳转指令可以完成从当前指令向前或向后的
32MB
的地址空间的跳转,包括以下
4
条指令:
— B
跳转指令
(
TI C66x DSP
指令集也有该指令)
B
指令的格式为:
B
目标地址
; //
程序跳转到目标地址处执行
B
Label //
程序无条件跳转到标号
Label
处执行
B
指令是最简单的跳转指令。一旦遇到一个
B
指令,
ARM
处理器将立即跳转到给定的目标地址,从那里继续执行,并需要重新装入
PC(
程序计数器
)
,使执行流水线中断。
注意存储在跳转指令中的实际值是相对当前
PC
值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算
(参考寻址方式中的相对寻址)。它是
24
位有符号数,左移两位后有符号扩展为
32
位,表示的有效偏移为
26
位
(
前后
32MB
的地址空间
)
。
如下面的汇编代码
(
摘自
TI C66x DSP
汇编代码
)
:
B.S1 $C$L48 //
表示跳转到
$C$L48 label;
B.S1
SetUeAntInfo //
表示跳转到
SetUeAntInfo
函数;0x1083EF60是指令地址
下图中,第一条指令,如果
A0=true
,会跳转到
0x8008b8
执行,
0x8008b8
是当前
cpu
访问自己所属
corePac
的
L2
资源时使用的
内部地址
,对外
用
别名地址
0x108008b8
(
corePac1的L2地址
),
0x118008b8
(
corePac2的L2地址
),
0x128008b8
(
corePac3的L2地址
),
0x138008b8
(
corePac4的L2地址
),即外设访问corePac的L2资源或者当前CPU访问其他corePac的L2资源时,会使用32位的别名地址。第二条指令,跳转到
B0
(
B0
存的是地址)去执行。
下图摘自TMS320C66x_DSP_CPU_and_Instruction and Set.pdf文档,表明B指令会有5个cycle的延迟(可能是在等待硬件更新PC的值,在这5个延迟的cycle期间,CPU将继续执行B指令后面的指令,直到5个cycle后,才真正的跳转,所以跳转前执行了5个无用的指令),图中Program Counter就是程序计数器(PC)。
该指令在CPU的S2功能单元执行,指令操作吗如下。
Ta的文章
更多
>>
智能门禁系统教程--门禁设备中的电源部分
0 个评论
SRIO学习(一)——外设数据流
0 个评论
TI C66x DSP 指令集 -之- 跳转指令B
0 个评论
三极管各参数如何选取问题(共射极放大电路)
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮