【摘要】:如果不能用一条指令实现ADR伪指令的功能,ARM汇编器将报告错误。start的地址是相对于PC-8-4=PC-12=PC-0x0C,所以本ADR伪指令将被编译器替换成“SUB r4,PC,#0x0C”。
1.语法格式
ADR伪指令为小范围地址读取伪指令。ADR伪指令将基于PC相对偏移地址或基于寄存器相对偏移地址值读取到寄存器中,其取值范围如下:
(1)当地址值不是字节对齐时,取值范围为-255~255字节。
(2)当地址值是字对齐时,取值范围为-1 020~1 020字节。
(3)当地址值是16字节对齐时其取值范围更大。
其语法格式如下:
(1){cond}:可选的指令执行条件。
(2){.W}:可选项,指定指令宽度(Thumb-2指令集支持)。
(3)register:目标寄存器。(www.xing528.com)
(4)label:基于PC或具体寄存器的表达式。
2.使用说明
ADR伪指令被ARM汇编器编译成一条指令。ARM汇编器通常使用ADD指令或SUB指令实现伪操作的地址装载功能。如果不能用一条指令实现ADR伪指令的功能,ARM汇编器将报告错误。
3.示例
1)示例1
程序在运行到“ADR r4,start”时,由于ARM为3级流水线的架构,此时PC=执行地址+8,而start是在该条指令的前面,所以此时该条指令的目的是读取start相对于PC的地址。start的地址是相对于PC-8-4=PC-12=PC-0x0C,所以本ADR伪指令将被编译器替换成“SUB r4,PC,#0x0C”。
2)示例2
程序在运行到“ADR r4,start”时,PC=执行地址+8,而start此时紧跟在这条指令的后面,所以start的地址是“执行地址+4”,即相对于PC,start的地址为PC-4,所以本ADR伪指令将被编译器替换成“SUB r4,PC,#0x04”。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。