好文档 - 专业文书写作范文服务资料分享网站

常用ARM及汇编指令

天下 分享 时间: 加入收藏 我要投稿 点赞

.

的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及汇编指令

.的SWI指令是ARM指令还是THUMB指令,这可通过对SPSR访问得到,然后要取得该SWI指令的地址,这可通过访问LR寄存器得到,接着读出指令,分解出立即数程序代码如下:T_bitEQU0x20;00100000SWI_HanderSTMFDSP!,{R0-R3,R12,LR}MR
推荐度:
点击下载文档文档为doc格式
8aqz882s4881m9s40mcz3j4le87moy00jaa
领取福利

微信扫码领取福利

微信扫码分享