ARM程序设计_伪操作伪指令讲述.pptVIP

  • 10
  • 0
  • 约1.04万字
  • 约 65页
  • 2016-12-14 发布于湖北
  • 举报
IMPORT 和 EXTERN 这些指令为汇编器提供一个未在当前汇编中定义的名称。 INCBIN INCBIN 指令在被汇编的文件内包含一个文件。 该文件按原样包含,没有进行汇编。 KEEP KEEP 指令指示汇编器在对象文件的符号表中保留局部符号。 ROUT ROUT 指令标记局部标签的范围边界,使用 ROUT 指令可限制局部标签的范围。 这样就更容易避免意外引用错误的标签。 如果区域中没有 ROUT 指令,则局部标签的范围是整个区域 NOFP NOFP 指令可确保在汇编语言源文件中没有浮点指令。 3. ARM汇编语言伪指令 伪指令 语法格式 作 用 ADR ADR{cond} register , expr 将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。 ADRL ADRL {cond} register,expr 将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。 LDR LDR {cond} register,=[expr | label-expr] 将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。 NOP NOP 在汇编时将被替换成ARM中的空操作。 ADR ADR 可将一个立即值与 pc 值相加,并将结果写入目标寄存器。 ADR{cond}{.W} Rd,label ADRL 将相对于程序或相对于寄存器的地址载入寄存器中。 与 ADR 指令相似。ADRL 生成两个数据处理指令,因此它比 ADR 加载的地址范围要宽。 ADRL{cond} Rd,label LDR 使用以下项之一加载寄存器: ? 一个 32 位常数值 ? 一个地址 LDR{cond}{.W} Rt, =expr LDR{cond}{.W} Rt, =label_expr 3.10 ARM伪指令 ARM伪指令不是ARM指令集中的指令,只是为了编程方便而定义的,伪指令可以象其它ARM指令一样使用,但在编译时这些指令将被等效的ARM指令代替。 ARM伪指令有4条: ADR 小范围的地址读取伪指令 ADRL 中等范围的地址读取伪指令 LDR 大范围的地址读取伪指令 NOP 空操作伪指令 1. ADR 小范围的地址读取伪指令 格 式:ADR{cond} Rm,addr 功 能:ADR指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。 格式中: Rm:表示要加载的目标寄存器。 Addr:地址表达式。当地址值是非字对齐时,取值范围-255~255字节之间;当地址值是字对齐时,取值范围-1020~1020字节之间。对于基于PC相对偏移的地址值时,给定范围是相对当前指令地址后两个字处(ARM7TDMI为三级流水线)。 例 使用ADR伪指令加载地址,实现查表功能。 … ADR R0,ADDR_TAB ;加载转换表地址 LDRB R1,[R0,R2] ;使用R2作为参数,进行查表 … ADDR_TAB DCB 0xA0,0xF8, 0x80,0x48, 0xE0,0x4F, 0xA3,0xD2 分析:通过ADR伪指令将转换表的首地址值(ADDR_TAB)加载到R0中,每个表项的偏移地址值由R2传入,从而可以实现查表功能。 ADRL 中等范围的地址读取伪指令 格 式:ADRL{cond} Rm,addr 功 能:ADRL指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。ADRL比ADR伪指令可以读取更大范围的地址。在汇编编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用实现,则产生错误,编译失败。 格式中: Rm:表示要加载的目标寄存器。 Addr:地址表达式。当地址值是非字对齐时,取值范围-64K~64K字节之间;当地址值是字对齐时,取值范围-256K~256K字节之间。 使用ADRL加载地址,可以实现程序跳转,例如: … ADR LR, RETURN1  

文档评论(0)

1亿VIP精品文档

相关文档