ARM汇编器所支持的伪操作 - 指令集选择伪操作

指示汇编器将代码编译成32位的ARM代码还是16位的Thumb代码。这类伪操作包括以下几种。

ARM或CODE32:用于告诉汇编器后面的指令序列为32位的ARM指令。

THUMB:用于告诉汇编器后面的指令是32位的Thumb-2指令还是16位的Thumb指令。

1.ARM和CODE32

(1)语法格式

ARM伪操作指示汇编器后面的指令为32位的ARM指令。

ARM和CODE32伪操作的含义相同。

当汇编器对源程序进行编译时,如果需要,将会在程序中插入空指令,以保证内存单元字对齐。

语法格式如下。

          ARM
          CODE32

(2)使用说明

使用在同时包含ARM指令和Thumb指令的源文件中。当需要从ARM指令序列切换到Thumb指令序列时,使用伪操作ARM(或CODE32);当需要从Thumb指令序列切换到ARM指令序列时使用Thumb伪操作。

(3)示例

          AREA  Init,CODE,READONLY
          …
          CODE32             ;通知编译器其后的指令为32位的ARM指令
          LDR   R0,=NEXT+1;将跳转地址放入寄存器R0
          BX R0              ;程序跳转到新的位置执行,并将处理器切换到Thumb
                                工作状态
          …
          CODE16             ;通知编译器其后的指令为16位的Thumb指令
          NEXT  LDRR3,=0x3FF
          …
          END                ;程序结束

2.THUMB

(1)语法格式

THUMB伪操作告诉汇编器下面的指令是32位Thumb-2指令或使用新语法的16位Thumb指令。如果需要,汇编器会在程序中插入填充位以保证内存半字节对齐。

语法格式如下。

          THUMB

(2)使用说明

如果接下来的指令使用ARM语法,则使用THUMB伪操作指示汇编器从ARM状态切换到Thumb状态。

(3)示例

下面的程序显示了如果使用ARM和THUMB伪操作使程序从ARM指令切换到Thumb指令。

          AREA  ChangeState,CODE,READONLY
          ARM
         ;下面的指令在ARM状态下开始执行
          LDR   r0,=start+1  ;取出跳转地址,设置状态标志位
          BX    r0           ;跳转并切换程序状态
          THUMB              ;下面的指令序列为Thumb-2指令
          Gsthing     PROC   ;
          B  {pc}+2          ;#0x8002
          B  {pc}+4          ;#0x8004

3.CODE16

(1)语法格式

CODE16伪指令用于通知编译器其后的指令序列为16位的Thumb指令。

          CODE16

(2)使用说明

若在汇编源程序中同时包含ARM指令和Thumb指令时,可用CODE16伪指令通知编译器其后的指令序列为16位的Thumb指令,CODE32伪指令通知编译器其后的指令序列为32位的ARM指令。因此,在使用ARM指令和Thumb指令混合编程的代码里,可用这两条伪指令进行切换,但要注意它们只通知编译器其后指令的类型,并不能对处理器进行状态的切换。

(3)示例

见ARM(CODE32)伪操作。

你可能感兴趣的:(#,ARM体系结构与编程,arm开发,ARM,嵌入式,linux)