请问高手们汇编中跳转指令执行后,会不会回到它的下一条指令执行?
.globl_start_start:bresetldrpc,_undefined_instructionldrpc,_software_interruptldrpc,_...
.globl _start
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
这是UBOOT中的一段代码,一开始就跳到了reset,去执行了,那这样的话不是ldr pc, _undefined_instruction这条指令永远不会被执行了????还是说是像C中的函数调用一样,reset执行后会回去再执行ldr pc, _undefined_instruction???请大虾们解答下。。。。 展开
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
这是UBOOT中的一段代码,一开始就跳到了reset,去执行了,那这样的话不是ldr pc, _undefined_instruction这条指令永远不会被执行了????还是说是像C中的函数调用一样,reset执行后会回去再执行ldr pc, _undefined_instruction???请大虾们解答下。。。。 展开
展开全部
b是branch之意,b有几种形式
bl:带link的b,意即会将bl的下一条指令地址送入lr寄存器,以便返回
bx:带状态转换(arm->thumb,thumb->arm)的跳转
blx:上面两者结合
单单b就是jump,直接跳转,不返回
你这段代码那个b reset既是程序开始,也是vector 0的处理函数,arm上常常这么使用,后面的(包括第一条)是中断向量表,arm上
0中断:复位
1:未定义指令
2:软件中断
3:预取指令中止
4:数据访问中止
5:保留
6:irq
7:fiq
请参考arm手册
bl:带link的b,意即会将bl的下一条指令地址送入lr寄存器,以便返回
bx:带状态转换(arm->thumb,thumb->arm)的跳转
blx:上面两者结合
单单b就是jump,直接跳转,不返回
你这段代码那个b reset既是程序开始,也是vector 0的处理函数,arm上常常这么使用,后面的(包括第一条)是中断向量表,arm上
0中断:复位
1:未定义指令
2:软件中断
3:预取指令中止
4:数据访问中止
5:保留
6:irq
7:fiq
请参考arm手册
追问
这外我明白,只是说这样一个例子。那也就是说如果是b的话那就是跳到哪就从哪里开始执行后面的代码了,那就不管调用它的那个地方的后面的代码了,是这个意思吗?
追答
对的,就是这样
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询