ARM程序设计基础
器处理指令
ARM微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据。
nMRS 程序状态寄存器到通用寄存器的数据传送指令
nMSR 通用寄存器到程序状态寄存器的数据传送指令
4程序状态寄存器处理指令
加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。
nLDR 字数据加载指令
nLDRB 字节数据加载指令
nLDRH 半字数据加载指令
nSTR 字数据存储指令
nSTRB 字节数据存储指令
nSTRH 半字数据存储指令
nLDM 批量数据加载指令
nSTM 批量数据存储指令
4批量数据加载/存储指令
ARM微处理器所支持批量数据加载/存储指令可以一次在一片连续的存储器单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。
nLDM 批量数据加载指令
nSTM 批量数据存储指令
ARM微处理器所支持的数据交换指令能在存储器和寄存器之间交换数据。
nSWP 字数据交换指令
nSWPB 字节数据交换指令
5协处理器指令
nCDP 协处理器数操作指令
nLDC 协处理器数据加载指令
nSTC 协处理器数据存储指令
nMCR 寄存器到协处理器寄存器的数据传送指令
nMRC 协处理器寄存器到寄存器的数据传送指令
异常产生指令
nSWI 软件中断指令
nBKPT 断点中断指令
3汇编语言的语句格式
ARM(Thumb)汇编语言的语句格式为:
{标号} {指令或伪指令} {;注释}
在汇编语言程序设计中,每一条指令的助记符可以全部用大写、或全部用小写,但不用许在一条指令中大、小写混用。
同时,如果一条语句太长,可将该长语句分为若干行来书写,在行的末尾用“\”表示下一行与本行为同一条语句。
3.1 在汇编语言程序中常用的符号
在汇编语言程序设计中,经常使用各种符号代替地址、变量和常量等,以增加程序的可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定:
— 符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。
— 符号在其作用范围内必须唯一。
— 自定义的符号名不能与系统的保留字相同。
— 符号名不应与指令或伪指令同名。
1、 程序中的变量
程序中的变量是指其值在程序的运行过程中可以改变的量。ARM(Thumb)汇编程序所支持的变量有数字变量、逻辑变量和字符串变量。
数字变量用于在程序的运行中保存数字值,但注意数字值的大小不应超出数字变量所能表示的范围。
逻辑变量用于在程序的运行中保存逻辑值,逻辑值只有两种取值情况:真或假。
字符串变量用于在程序的运行中保存一个字符串,但注意字符串的长度不应超出字符串变量所能表示的范围。
在ARM(Thumb)汇编语言程序设计中,可使用GBLA、GBLL、GBLS伪指令声明全局变量,使用LCLA、LCLL、LCLS伪指令声明局部变量,并可使用SETA、SETL和SETS对其进行初始化。
2、 程序中的常量
程序中的常量是指其值在程序的运行过程中不能被改变的量。ARM(Thumb)汇编程序所支持的常量有数字常量、逻辑常量和字符串常量。
数字常量一般为32位的整数,当作为无符号数时,其取值范围为0~232-1,当作为有符号数时,其取值范围为-231~231-1。
逻辑常量只有两种取值情况:真或假。
字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。
3、 程序中的变量代换
程序中的变量可通过代换操作取得一个常量。代换操作符为“$”。
如果在数字变量前面有一个代换操作符“$”,编译器会将该数字变量的值转换为十六进制的字符串,并将该十六进制的字符串代换“$”后的数字变量。
如果在逻辑变量前面有一个代换操作符“$”,编译器会将该逻辑变量代换为它的取值(真或假)。
如果在字符串变量前面有一个代换操作符“$”,编译器会将该字符串变量的值代换“$”后的字符串变量。
使用示例:
LCLS S1 ;定义局部字符串变量S1和S2
LCLS S2
S1 SETS “Test!”
S2 SETS “This is a $S1” ;字符串变量S2的值为“This is a Test!”
3.2 汇编语言程序中的表达式和运算符
在汇编语言程序设计中,也经常使用各种表达式,表达式一般由变量、常量、运算符和括号构成。常用的表达式有数字表达式、逻辑表达式和字符串表达式,其运算次序遵循如下的优先级:
— 优先级相同的双目运算符的运算顺序为从左到右。
— 相邻的单目运算符的运算顺序为从右到左,且单目运算符的优先级高于其他运算符。
— 括号运算符的优先级最高。
1、 数字表达式及运算符
数字表达式一般由数字常量
ARM程序设计基 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
