首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM汇编指令(7)

ARM汇编指令(7)

十、异常产生指令
1SWI指令
SWI指令的格式为:
SWI{条件} 24位的立即数
SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用 户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中24位的立即数被忽略时,用户程序调用系统例程的类型由通用寄存器R0的内容决定,同 时,参数通过其他通用寄存器传递。
指令示例:
SWI  0x02               ;该指令调用操作系统编号位02的系统例程。
2BKPT指令
BKPT指令的格式为:
BKPT   16位的立即数
BKPT指令产生软件断点中断,可用于程序的调试。
ARM汇编伪指令
ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。
ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令数据定义伪指令汇编控制伪指令宏指令以及其他伪指令

一、符号定义(SymbolDefinition)伪指令
符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。
常见的符号定义伪指令有如下几种:   
    — 用于定义全局变量的GBLA GBLL GBLS    
    — 用于定义局部变量的LCLA LCLL LCLS    
    — 用于对变量赋值的SETA SETL SETS    
    — 为通用寄存器列表定义名称的RLIST    
1GBLAGBLL 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”  

2LCLALCLL 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”   

3SETASETL SETS   
    语法格式:
变量名 SETA SETL SETS )表达式
伪指令 SETA SETL SETS 用于给一个已经定义的全局变量或局部变量赋值。   
    SETA伪指令用于给一个数学变量赋值;   
    SETL伪指令用于给一个逻辑变量赋值;   
    SETS伪指令用于给一个字符串变量赋值;
其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。
使用示例:   
    LCLA Test3
声明一个局部的数字变量,变量名为 Test3   
    Test3 SETA 0xaa
将该变量赋值为0xaa   
    LCLL Test4
声明一个局部的逻辑变量,变量名为 Test4   
    Test4 SETL {TRUE} ;将该变量赋值为真。
继承事业,薪火相传
返回列表