您的位置 首页 IOT

ARM汇编中伪指令的介绍

伪指令没有相对应的操作码,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过

伪指令没有相对应的操作码,他们所完结的操作称为伪操作。

伪指令在源程序中的效果是为完结汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起效果,一旦汇编结束,伪指令的任务就完结(就如你睡觉她为你铺床,铺在哪儿和铺床技巧由她组织,但她不陪你睡觉,铺好了就走 🙁 )。
  在 ARM 的汇编程序中,有如下几种伪指令:符号界说伪指令、数据界说伪指令、汇编操控伪指令、宏指令以及其他伪指令。
  符号界说( Symbol Definition )伪指令
  符号界说伪指令用于界说 ARM 汇编程序中的变量、对变量赋值以及界说寄存器的别号等操作。
  常见的符号界说伪指令有如下几种:
  — 用于界说大局变量的 GBLA 、 GBLL 和 GBLS 。
  — 用于界说部分变量的 LCLA 、 LCLL 和 LCLS 。
  — 用于对变量赋值的 SETA 、 SETL 、 SETS 。
  — 为通用寄存器列表界说称号的 RLIST 。
  1、 GBLA、GBLL 和GBLS
  语法格局:
  GBLA ( GBLL 或 GBLS ) 大局变量名
  GBLA 、 GBLL 和 GBLS 伪指令用于界说一个 ARM 程序中的大局变量,并将其初始化。其间:
  GBLA 伪指令用于界说一个大局的数字变量,并初始化为 0 ;
  GBLL 伪指令用于界说一个大局的逻辑变量,并初始化为 F (假);
  GBLS 伪指令用于界说一个大局的字符串变量,并初始化为空;
  因为以上三条伪指令用于界说大局变量,因此在整个程序范围内变量名有必要仅有。
  运用示例:
  GBLA Test1 ;界说一个大局的数字变量,变量名为 Test1
  Test1 SETA 0xaa ;将该变量赋值为 0xaa
  GBLL Test2 ;界说一个大局的逻辑变量,变量名为 Test2
  Test2 SETL {TRUE} ;将该变量赋值为真
  GBLS Test3 ;界说一个大局的字符串变量,变量名为 Test3
  Test3 SETS “ Testing ” ;将该变量赋值为 “ Testing ”
  2、 LCLA、LCLL 和LCLS
  语法格局:
  LCLA ( LCLL 或 LCLS ) 部分变量名
  LCLA 、 LCLL 和 LCLS 伪指令用于界说一个 ARM 程序中的部分变量,并将其初始化。其间:
  LCLA 伪指令用于界说一个部分的数字变量,并初始化为 0 ;
  LCLL 伪指令用于界说一个部分的逻辑变量,并初始化为 F (假);
  LCLS 伪指令用于界说一个部分的字符串变量,并初始化为空;
  以上三条伪指令用于声明部分变量,在其效果范围内变量名有必要仅有。
  运用示例:
  LCLA Test4 ;声明一个部分的数字变量,变量名为 Test4
  Test3 SETA 0xaa ;将该变量赋值为 0xaa
  LCLL Test5 ;声明一个部分的逻辑变量,变量名为 Test5
  Test4 SETL {TRUE} ;将该变量赋值为真
  LCLS Test6 ;界说一个部分的字符串变量,变量名为 Test6
  Test6 SETS “ Testing ” ;将该变量赋值为 “ Testing ”
  3、 SETA、SETL 和SETS
  语法格局:
  变量名 SETA ( SETL 或 SETS ) 表达式
  伪指令 SETA 、 SETL 、 SETS 用于给一个现已界说的大局变量或部分变量赋值。
  SETA 伪指令用于给一个数学变量赋值;
  SETL 伪指令用于给一个逻辑变量赋值;
  SETS 伪指令用于给一个字符串变量赋值;
  其间,变量名为现已界说过的大局变量或部分变量,表达式为即将赋给变量的值。
  运用示例:
  LCLA Test3 ;声明一个部分的数字变量,变量名为 Test3
  Test3 SETA 0xaa ;将该变量赋值为 0xaa
  LCLL Test4 ;声明一个部分的逻辑变量,变量名为 Test4
  Test4 SETL {TRUE} ;将该变量赋值为真
  4 、 RLIST
  语法格局:
  称号 RLIST { 寄存器列表 }
  RLIST 伪指令可用于对一个通用寄存器列表界说称号,运用该伪指令界说的称号可在 ARM 指令 LDM/STM 中运用。在 LDM/STM 指令中,列表中的寄存器拜访次第为依据寄存器的编号由低到高,而与列表中的寄存器摆放次第无关。
  运用示例:
  RegList RLIST {R0-R5 , R8 , R10} ;将寄存器列表称号界说为 RegList ,可在 ARM 指令 LDM/STM中经过该称号拜访寄存器列表。
  数据界说( Data Definition )伪指令
  数据界说伪指令一般用于为特定的数据分配存储单元,一起可完结已分配存储单元的初始化。
  常见的数据界说伪指令有如下几种:
  —DCB用于分配一片接连的字节存储单元并用指定的数据初始化。
  — DCW ( DCWU ) 用于分配一片接连的半字存储单元并用指定的数据初始化。
  —DCD( DCDU )用于分配一片接连的字存储单元并用指定的数据初始化。
  — DCFD ( DCFDU )用于为双精度的浮点数分配一片接连的字存储单元并用指定的数据初始
  化。
  — DCFS ( DCFSU ) 用于为单精度的浮点数分配一片接连的字存储单元并用指定的数据初
  始化。
  — DCQ ( DCQU ) 用于分配一片以 8 字节为单位的接连的存储单元并用指定的数据初始
  化。
  — SPACE 用于分配一片接连的存储单元
  — MAP 用于界说一个结构化的内存表首地址
  — FIELD 用于界说一个结构化的内存表的数据域
  1、 DCB
  语法格局:
  标号 DCB 表达式
  DCB 伪指令用于分配一片接连的字节存储单元并用伪指令中指定的表达式初始化。其间,表达式可认为 0 ~ 255 的数字或字符串。 DCB 也可用 “ = ” 替代。
  运用示例:
  Str DCB “ This is a test ! ” ;分配一片接连的字节存储单元并初始化。
  2、 DCW(或DCWU)
  语法格局:
  标号 DCW (或 DCWU ) 表达式
  DCW (或 DCWU )伪指令用于分配一片接连的半字存储单元并用伪指令中指定的表达式初始化。
  其间,表达式可认为程序标号或数字表达式。。
  用 DCW 分配的字存储单元是半字对齐的,而用 DCWU 分配的字存储单元并不严厉半字对齐。
  运用示例:
  DataTest DCW 1 , 2 , 3 ;分配一片接连的半字存储单元并初始化。
  3、 DCD(或DCDU)
  语法格局:
  标号 DCD (或 DCDU ) 表达式
  DCD (或 DCDU )伪指令用于分配一片接连的字存储单元并用伪指令中指定的表达式初始化。其间,表达式可认为程序标号或数字表达式。 DCD 也可用 “ ” 替代。
  用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严厉字对齐。
  运用示例:
  DataTest DCD 4 , 5 , 6 ;分配一片接连的字存储单元并初始化。
  4、 DCFD(或DCFDU)
  语法格局:
  标号 DCFD (或 DCFDU ) 表达式
  DCFD (或 DCFDU )伪指令用于为双精度的浮点数分配一片接连的字存储单元并用伪指令中指定的表达式初始化。每个双精度的浮点数占有两个字单元。用 DCFD 分配的字存储单元是字对齐的,而用 DCFDU 分配的字存储单元并不严厉字对齐。
  运用示例:
  FDataTest DCFD 2E115 , -5E7 ;分配一片接连的字存储单元并初始化为指定的双精度数。
  5、 DCFS(或DCFSU)
  语法格局:
  标号 DCFS (或 DCFSU ) 表达式
  DCFS (或 DCFSU )伪指令用于为单精度的浮点数分配一片接连的字存储单元并用伪指令中指定的表达式初始化。每个单精度的浮点数占有一个字单元。 用 DCFS 分配的字存储单元是字对齐的,而用 DCFSU 分配的字存储单元并不严厉字对齐。
  运用示例:
  FDataTest DCFS 2E5 , -5E - 7 ;分配一片接连的字存储单元并初始化为指定的单精度数。
  6、 DCQ(或DCQU)
  语法格局:
  标号 DCQ (或 DCQU ) 表达式
  DCQ (或 DCQU )伪指令用于分配一片以 8 个字节为单位的接连存储区域并用伪指令中指定的表达式初始化。
  用 DCQ 分配的存储单元是字对齐的,而用 DCQU 分配的存储单元并不严厉字对齐。
  运用示例:
  DataTest DCQ 100 ;分配一片接连的存储单元并初始化为指定的值。
  7、 SPACE
  语法格局:
  标号SPACE表达式
  SPACE 伪指令用于分配一片接连的存储区域并初始化为 0 。其间,表达式为要分配的字节数。
  SPACE 也可用 “ % ” 替代。
  运用示例:
  DataSpace SPACE 100 ;分配接连 100 字节的存储单元并初始化为 0 。
  8、 MAP
  语法格局:
  MAP 表达式 { ,基址寄存器 }
  MAP 伪指令用于界说一个结构化的内存表的首地址。 MAP 也可用 “ ^ ” 替代。
  表达式可认为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。
  MAP 伪指令一般与 FIELD 伪指令合作运用来界说结构化的内存表。
  运用示例:
  MAP 0x100 , R0 ;界说结构化内存表首地址的值为 0x100 + R0 。
  9、 FILED
  语法格局:
  标号 FIELD 表达式
  FIELD 伪指令用于界说一个结构化内存表中的数据域。 FILED 也可用 “ # ” 替代。
  表达式的值为当时数据域在内存表中所占的字节数。
  FIELD 伪指令常与 MAP 伪指令合作运用来界说结构化的内存表。 MAP 伪指令界说内存表的首地址, FIELD 伪指令界说内存表中的各个数据域,并可认为每个数据域指定一个标号供其他的指令引证。
  留意 MAP 和 FIELD 伪指令仅用于界说数据结构,并不实践分配存储单元。
  运用示例:
  MAP 0x100 ;界说结构化内存表首地址的值为 0x100 。
  A FIELD 16 ;界说 A 的长度为 16 字节,方位为 0x100
  B FIELD 32 ;界说 B 的长度为 32 字节,方位为 0x110
  S FIELD 256 ;界说 S 的长度为 256 字节,方位为 0x130
  汇编操控( Assembly Control )伪指令
  汇编操控伪指令用于操控汇编程序的履行流程,常用的汇编操控伪指令包含以下几条:
  — IF 、 ELSE 、 ENDIF
  — WHILE 、 WEND
  — MACRO 、 MEND
  — MEXIT
  1、 IF、ELSE、ENDIF
  语法格局:
  IF 逻辑表达式
  指令序列 1
  ELSE
  指令序列 2
  ENDIF
  IF 、 ELSE 、 ENDIF 伪指令能依据条件的建立与否决议是否履行某个指令序列。当 IF 后边的逻辑表达式为真,则履行指令序列 1 ,不然履行指令序列 2 。其间, ELSE 及指令序列 2 能够没有,此刻,当 IF 后边的逻辑表达式为真,则履行指令序列 1 ,不然持续履行后边的指令。
  IF 、 ELSE 、 ENDIF 伪指令能够嵌套运用。
  运用示例:
  GBLL Test ;声明一个大局的逻辑变量,变量名为 Test……
  IF Test = TRUE
  指令序列 1
  ELSE
  指令序列 2
  ENDIF
  2、 WHILE、WEND
  语法格局:
  WHILE 逻辑表达式
  指令序列
  WEND
  WHILE 、 WEND 伪指令能依据条件的建立与否决议是否循环履行某个指令序列。当 WHILE 后边的逻辑表达式为真,则履行指令序列,该指令序列履行结束后,再判别逻辑表达式的值,若为真则持续履行,一直到逻辑表达式的值为假。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/256113.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部