arm学习笔记四(arm伪指令)
2013-02-21 21:46
239 查看
arm伪指令
符号定义伪指令
定义arm汇编程序中的变量、对变量赋值以及定义寄存器的别名
定义全局变量
gbla(全局数字变量,初始化值为0)
GBLA 全局变量名
示例代码如下:
GBLA Test1;定义全局数字变量test1
Test1 SETA 0x123;将该变量赋值为0x123
gbll(全局逻辑变量,初始化为F)
GBLL 全局变量名
示例代码如下:
GBLL Test2;定义全局逻辑变量test2
Test2 SETL {TRUE};将变量赋值为真
bgls(全局字符串变量,初始化为空)
GBLS 全局变量名
示例代码如下:
GBLS Test3;定义全局字符串变量test3
Test3 SETS "Testing";将变量赋值为testing
定义局部变量
lcla
lcll
lcls
对变量赋值
seta
setl
sets
为通用寄存器列表定义名称 rlist
在LDM/STM指令中,列表中的寄存器访问次序根据寄存器的编号由低到高
与列表中的寄存器的排列次序无关
语法格式:
名称 RLIST {寄存器列表}
示例代码如下:
RegList RLIST (R0-R5,R8,R10);定义RegList寄存器列表
数据定义伪指令
DCB 分配一片连续的字节存储单元,并且用指令中指定的表达式初始化
语法格式:
标号 DCB 表达式
示例代码如下:
str DCB "this is a test!";分配一片连续的字节存储单元并初始化
SPACE 分配一片连续的存储区域并初始化为0,表达式的值为要分配的字节数
语法格式:
标号 SPACE 表达式
示例代码如下:
DataSpace SPACE 100;分配连续100字节的存储单元并初始化为0
MAP 定义一个结构化内存表的首地址
语法格式:
MAP 表达式{,基址寄存器}
示例代码如下:
MAP 0X100,R0;定义结构化内存表首地址为0x100+R0
FILED 定义一个结构化内存表中的数据域
语法格式:
标号 FILED 表达式
示例代码如下:
MAP 0X0100;定义结构化内存表首地址的值为0x100
A FILED 16;定义A的长度为16字节,位置为0x100
B FILED 32;定义B的长度为32字节,位置为0x110
C FILED 256;定义C的长度为256字节,位置为0x130
汇编控制伪指令
IF ELSE ENDIF
语法格式:
IF 逻辑表达式
指令序列1
ELSE
指令序列2
ENDIF
示列代码如下:
GBLL Test;
IF Test=TRUE
指令序列1
ELSE
指令序列2
ENDIF
WHILE WEND
语法格式:
WHILE 逻辑表达式
指令序列
WEND
示例代码如下:
GBLA Counter;声明一个全局数学变量
Counter SETA 3;赋值
WHILE Counter<10
指令序列
WEND
MACRO MEND
MEXIT
宏指令
其它伪指令
AREA 定义一个代码段或数据段
语法格式:
AREA 段名 属性1,属性2
常用属性:
CODE:定义代码段,默认为readonly
DATE:定义数据段,默认为readwirte
READONLY:只读
READWRITE:可读可写
ALIGN:对齐方式 语法格式:ALIGN {表达式{,偏移量}}
示例代码如下:
AREA Init,CODE,READONLY;定义一个名为init的代码段,属性为只读
AREA Init,CODE,READONLY,ALIEN=3;指定后面的指令为8字节对齐
CODE16(CODE32)通知编译器,其后的指令序列为16位的thumb指令
ENTRY 指定汇编程序的入口点
示例代码如下:
AREA Init,CODE,READONLY
ENTRY;指定应用程序的入口点
EQU 为程序中的常量,标号等定义一个等效的字符名称(类似于define)
语法格式:
名称 EQU 表达式{,类型}
示例代码如下:
Test EQU 50;定义标号Test的值为 50
Addr EQU 0x55,CODE32;定义Addr 的值为0x55,且该处为32位的arm指令
EXPORT 在程序中声明一个全局的标号,该标号可在其他的文件中引用
语法格式:
EXPORT 标号
示例代码:
AREA Init,CODE,READONLY
EXPORT Stest;声明一个可全局引用的标号Stest
符号定义伪指令
定义arm汇编程序中的变量、对变量赋值以及定义寄存器的别名
定义全局变量
gbla(全局数字变量,初始化值为0)
GBLA 全局变量名
示例代码如下:
GBLA Test1;定义全局数字变量test1
Test1 SETA 0x123;将该变量赋值为0x123
gbll(全局逻辑变量,初始化为F)
GBLL 全局变量名
示例代码如下:
GBLL Test2;定义全局逻辑变量test2
Test2 SETL {TRUE};将变量赋值为真
bgls(全局字符串变量,初始化为空)
GBLS 全局变量名
示例代码如下:
GBLS Test3;定义全局字符串变量test3
Test3 SETS "Testing";将变量赋值为testing
定义局部变量
lcla
lcll
lcls
对变量赋值
seta
setl
sets
为通用寄存器列表定义名称 rlist
在LDM/STM指令中,列表中的寄存器访问次序根据寄存器的编号由低到高
与列表中的寄存器的排列次序无关
语法格式:
名称 RLIST {寄存器列表}
示例代码如下:
RegList RLIST (R0-R5,R8,R10);定义RegList寄存器列表
数据定义伪指令
DCB 分配一片连续的字节存储单元,并且用指令中指定的表达式初始化
语法格式:
标号 DCB 表达式
示例代码如下:
str DCB "this is a test!";分配一片连续的字节存储单元并初始化
SPACE 分配一片连续的存储区域并初始化为0,表达式的值为要分配的字节数
语法格式:
标号 SPACE 表达式
示例代码如下:
DataSpace SPACE 100;分配连续100字节的存储单元并初始化为0
MAP 定义一个结构化内存表的首地址
语法格式:
MAP 表达式{,基址寄存器}
示例代码如下:
MAP 0X100,R0;定义结构化内存表首地址为0x100+R0
FILED 定义一个结构化内存表中的数据域
语法格式:
标号 FILED 表达式
示例代码如下:
MAP 0X0100;定义结构化内存表首地址的值为0x100
A FILED 16;定义A的长度为16字节,位置为0x100
B FILED 32;定义B的长度为32字节,位置为0x110
C FILED 256;定义C的长度为256字节,位置为0x130
汇编控制伪指令
IF ELSE ENDIF
语法格式:
IF 逻辑表达式
指令序列1
ELSE
指令序列2
ENDIF
示列代码如下:
GBLL Test;
IF Test=TRUE
指令序列1
ELSE
指令序列2
ENDIF
WHILE WEND
语法格式:
WHILE 逻辑表达式
指令序列
WEND
示例代码如下:
GBLA Counter;声明一个全局数学变量
Counter SETA 3;赋值
WHILE Counter<10
指令序列
WEND
MACRO MEND
MEXIT
宏指令
其它伪指令
AREA 定义一个代码段或数据段
语法格式:
AREA 段名 属性1,属性2
常用属性:
CODE:定义代码段,默认为readonly
DATE:定义数据段,默认为readwirte
READONLY:只读
READWRITE:可读可写
ALIGN:对齐方式 语法格式:ALIGN {表达式{,偏移量}}
示例代码如下:
AREA Init,CODE,READONLY;定义一个名为init的代码段,属性为只读
AREA Init,CODE,READONLY,ALIEN=3;指定后面的指令为8字节对齐
CODE16(CODE32)通知编译器,其后的指令序列为16位的thumb指令
ENTRY 指定汇编程序的入口点
示例代码如下:
AREA Init,CODE,READONLY
ENTRY;指定应用程序的入口点
EQU 为程序中的常量,标号等定义一个等效的字符名称(类似于define)
语法格式:
名称 EQU 表达式{,类型}
示例代码如下:
Test EQU 50;定义标号Test的值为 50
Addr EQU 0x55,CODE32;定义Addr 的值为0x55,且该处为32位的arm指令
EXPORT 在程序中声明一个全局的标号,该标号可在其他的文件中引用
语法格式:
EXPORT 标号
示例代码:
AREA Init,CODE,READONLY
EXPORT Stest;声明一个可全局引用的标号Stest
相关文章推荐
- ARM学习笔记(九)--指令基本格式
- ARM学习笔记3——数据处理指令
- ARM学习笔记4——加载存储指令
- ARM指令---学习笔记
- ARM汇编伪指令学习笔记
- ARM汇编指令学习笔记(一、二)【晚上BOOTLOAD了,速度】
- ARM学习笔记8——通用寄存器和存储器内容交换指令和软中断指令
- ARM学习笔记(二)——ARM数据处理指令、加载\存储指令
- ARM学习笔记6——程序状态寄存器访问指令
- 嵌入式学习笔记--关于ARM中SWP指令的执行顺序问题【待验证】
- ARM汇编指令学习笔记(一)【为明天BOOTLOADER学习准备】
- [国嵌笔记][025][ARM指令分类学习]
- arm 汇编学习常用指令伪指令笔记汇总
- ARM学习笔记(六)--ARM指令的预取和自修改代码
- ARM学习笔记2——分支跳转指令
- ARM学习笔记7——乘法指令
- ARM学习笔记一
- [置顶] [汇编学习笔记][第五章[BX]和loop指令]
- android如何修改dex文件添加非法指令 9efa (学习笔记)
- 系统学习ARM之三 --load/store指令--装载和存储指令