马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
(1)
CODE16及CODE32 CODE16伪操作告诉汇编编译器后面的指令序列为16位的Thumb指令;CODE32伪操作告诉汇编编译器后面的指令序列为32位的ARM指令 语法格式 CODE16 CODE32 使用说明 当汇编源程序中同时包含ARM指令个Thumb指令时,使用CODE16伪操作告诉汇编编译器后面的指令序列为16位的Thumb指令;使用CODE32伪操作告诉汇编编译器后面的指令序列为32位的ARM指令。但是,CODE16伪操作和CODE32伪操作只是告诉编译器后面指令的类型,该伪操作本身并不进行程序状态的切换。 示例32 CODE16、CODE32伪操作举例。 在下面的例子中,程序先在ARM状态下执行,然后通过BX指令切换到Thumb状态,并跳转到相应的Thumb指令处执行。在Thumb程序入口处,用CODE16为操作表示下面的指令为Thumb指令。 AREA ChangeState,CODE,READONLY CODE32 ;指示下面的指令为ARM指令 LDR R0,=start+1 BX R0 ;切换到Thumb状态,并跳转到start处执行 CODE16 ;指示下面的指令为Thumb指令 start MOV R1,#10 … (2)
EQU EQU伪操作为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称。 语法格式 name EQU expr{,type} 其中:expr为基于寄存器的地址值、程序中的标号、32位的地址常量或32位的常量;name为EQU伪操作为expr顶一顶 字符名称;当expr为32位常量时,可使用type指示expr表示的数据类型。type有下面3种取值: CODE16 表明该地址为Thumb指令 CODE32 表明该地址为ARM指令 DATA 表明该地址为数据区。 使用说明 EQU伪操作的作用类似于C语言中的#define,用于为一个常量定义字符名称。EQU可用“*”代替。 示例33 EQU伪操作举例。 X EQU 10 ;定义X符号的值为10 Y EQU label+100 ;定义Y符号的值(label+100) Z EQU 0x10,CODE32 ;定义Z符号值为绝对地址值0x100,而且该处为
;ARM指令
reg EQU 0xE01FFC080 ;定义寄存器reg,地址为0xE01FFC080 这里的寄存器是除ARM中的寄存器以外的寄存器,例如外设中的寄存器,因为I/O与存储器是同一编址的。 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |