.
的SWI指令是ARM指令还是THUMB指令,这可通过对SPSR访问得到,然后要取得该SWI指令的地址,这可通过访问LR寄存器得到,接着读出指令,分解出立即数 程序代码如下:
T_bit EQU 0x20 ;0010 0000 SWI_Hander
STMFD SP!,{R0-R3,R12,LR} MRS R0,SPSR STMFD SP!,{R0} TST R0, #T_bit 为THUMB
LDRNEH R0,[LR,#-2] 中断的指令码(16位)
BICNE R0,R0,#0xFF00 数
LDREQ R0,[LR,#-4] 断的指令码(32位)
BICEQ R0,R0,#0xFF000000 BL C_SWI_Handler
LDMFD SP!,{R0-R3,R12,PC}^
.
;现场保护
;读取SPSR ;保存SPSR
;测试T标志位,0为ARM,1 ;若是THUMB指令,读出产生 ;取得THUMB指令的8位立即 ;若是ARM指令,读取产生中 ;取得ARM指令的24位立即数 ;SWI异常中断返回 .
MRS指令:读状态寄存器指令,在ARM处理器中,只有MRS指令可以从状态寄存器CPSR或SPSR读出到通用寄存器
MRS R1,CPSR ;将CPSR状态寄存器读取,保存到R1 MRS R2,SPSR ;将SPSR状态寄存器读取,保存到R2
MRS应用: 1、使能IRQ中断 ENABLE_IRQ MRS R0,CPSR
BIC R0,R0,#0x80 ;1000 0000 MSR CPSR,R0 MOV PC,LR
2、禁止IRQ中断 DISABLE_IRQ MRS R0,CPSR ORR R0,R0,#0x80 MSR CPSR,R0 MOV PC,LR
MSR:写状态寄存器指令,在ARM处理器中,只有MSR指令可以直接设置状
.
.
态寄存器CPSR或SPSR
================================================================================================================
ARM伪指令介绍
ARM伪指令不是ARM指令集中的指令,只是为了编程方便编译器定义了伪指令
ARM地址读取伪指令有四条,分别是 ADR 伪指令 ADRL 伪指令 LDR 伪指令 NOP 伪指令
作用的范围不一样,由小到大: ADR,ADRL,LDR
ADR、ADRL指令将基于PC相对偏移的地址读取到存储器中,例如 ADR R0 , DISP_TAB ; 加载转换表地址 LDR R1, [R0,R2] ;使用R2作为参数,进行查表 ..... DISP_TAB DCB
.
.
0xc0,0xf9,0xa4,0x99,0x92,0x82,0xf8,0x80
LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器,前加 = LDR R0,=0x123456 ;加载32位立即数0x123456 LDR R0,=DATA_BUF+60 ;加载DATA_BUF地址+60
NOP是空操作伪指令
宏是一段独立的程序代码,它是通过伪指令定义的,在程序中使用宏指令即可调用宏,当程序被汇编时,汇编程序将对每个调用进行展开,用宏定义取代源程序中的宏指令
符号定义伪指令
1、全局变量声明:GBLA、GBLL 和 GBLS 2、局部变量声明:LCLA、LCLL 和 LCLS 3、变量赋值:SETA、SETL、和 SETS 4、为一个通用寄存器列表定义名称:RLIST 5、为一个协处理器的寄存器定义名称:CN 6、为一个协处理器定义名称:CP
.
.
最后一个字符 A代表算术变量,初始值为0,L代表逻辑变量,初值为FALSE,S代表字符串,初值为空 伪指令应用举例如下:
MACRO ;声明一个宏 SENDDAT $dat ;宏的原型 $表示后面是变量 LCLA bitno ;声明一个局部算术变量 ...
bitno SETA 8 ;设置变量值为8 ...
MEND ;结束
RLIST指令格式:
name RLIST {reglist},例如: LoReg RLIST {R0-R7} ;定义寄存器列表LoReg
CN指令的用法:
name CN expr,其中name是要定义的协处理器的寄存器名称,expr对应的协处理器的寄存器编号,数值范围 0 ~ 15
MemSet CN 1 ;将协处理器的寄存器1名称定义为 MemSet
CP指令的用法,举例如下:
DivRun CP 5 ;将协处理器5名称定义为DivRun
.
常用ARM及汇编指令



