本文主要是介绍ARMv7架构的ADR指令图文实战详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.编写测试汇编代码
创建汇编文件test.asm。
label0:adr r0,label0adr r1,label1mov pc,lrlabel1:mov pc,lr
二.仅编译不链接
arm-linux-gnueabihf-as -o test.o test.asm
三.确认test.o为arm32指令格式
file test.o
四.反汇编elf格式文件
arm-linux-gnueabihf-objdump -D test.o > test.dis
五.查看、分析反汇编代码
A32架构的ARM采用了三级流水线,所有指令的处理都被拆分为三个阶段:
每条指令为32位,即4字节。当前执行指令的地址 = PC – 8。
从下图的反汇编代码可知:
(1)adr指令会被转换为add或sub指令。
(2)编译器在编译时,已计算出标签地址相对于PC的偏移量,并记录在指令代码中。
(3)adr指令获得是标签相对于PC的地址,即是运行地址,而非链接地址。
这篇关于ARMv7架构的ADR指令图文实战详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!