完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、B指令是绝对跳转还是相对跳转? B指令是相对跳转指令,是根据当前PC寄存器的值加上偏移来实现跳转的,所以它和代码在内存中的位置无关。 但是我们在查看汇编文件的时候,经常会有种错觉,它好像是按绝对地址进行跳转的,因为B指令的形式是 “B Label",即跳转到Label处进行执行,Label这个标签明显是绝对地址啊。其实在汇编语句翻译成机器码时会将语句翻译成按相对地址进行寻址。计算方式是: 指令所要跳转到的标号地址=执行这条指令时PC的值(这条指令的地址值+8,预取指的原因)+机器码中的立即数*4 注意,由于流水线的存在,PC的值是当前正在执行的指令+8,所以编译器在生成机器码中的立即数时,是当目标地址位置和前指令位置之差,然后减去2(8除以4)。例: 汇编文件head.S .global _start .text _start: b reset b aa b bb b 0x30 reset: .space 8,0xab aa: .word 0xdeadbeef .space 8,0xab bb: .word 0xdeadbeef .word 0xdeadbeef .end objdump得到: Disassembly of section .text: 00000000 <_start>: 0: ea000002 b 10 4: ea000003 b 18 8: ea000005 b 24 c: ea000004 b 24 00000010 : 10: abababab .word 0xabababab 14: abababab .word 0xabababab 00000018 : 18: deadbeef .word 0xdeadbeef 1c: abababab .word 0xabababab 20: abababab .word 0xabababab 00000024 : 24: deadbeef .word 0xdeadbeef 28: deadbeef .word 0xdeadbeef b reset 也就是 b 10,对应的机器码是 ea000002,其中ea代码b指令,2为机器码中的要跳转的偏移,目标地址00000010是通过PC+2*4得到的,此时PC = 00000008 ,目标地址 = PC + 2 * 4 = 8+8 = 16= 0x10,正好是reset标签处的地址。 二、B指令在linux源码中的一些实例 arch/arm/kernel/head-common.S文件 __lookup_processor_type: adr r3, __lookup_processor_type_data ldmia r3, {r4 - r6} sub r3, r3, r4 @ get offset between virt&phys add r5, r5, r3 @ convert virt addresses to add r6, r6, r3 @ physical address space 1: ldmia r5, {r3, r4} @ value, mask and r4, r4, r9 @ mask wanted bits teq r3, r4 beq 2f add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list) cmp r5, r6 blo 1b mov r5, #0 @ unknown processor 2: ret lr 第10行 beq 2f ,向前跳转到标签2处,2f中的f其实是forward的意思; 第13行 blo 1b,向后跳转到标签1处,1b中的b是backward的意思。 其中1和2是局部标签。 原作者:Lamar Davis |
|
相关推荐
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
298 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
668 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
588 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介
1210 浏览 0 评论
非科班也能玩转Android应用,体验QT跨平台能力-迅为RK3568开发板
1068 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 01:58 , Processed in 0.595966 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号