专栏中心

EEPW首页 > 专栏 > 嵌入式系统基础----常用的arm汇编指令

嵌入式系统基础----常用的arm汇编指令

发布人:lionwq 时间:2008-01-05 来源:工程师 发布文章

###################嵌入式体系结构基础###############
一、指令集:

1.数据传输指令--
 mvn r0,r2 ;r0 = ~r2
 mvns r0,r2 ;影响cpsr

2.逻辑指令--
 add r0,r1,r2 ;r0 = r1 & r2
 orr r0,r1,r2 ;r0 = r1 | r2
 eor r0,r1,r2 ;r0 = r1 ^ r2
 bic r0,r1,r2 ;r0 = r1 & ~r2

3.比较指令--主要用于循环;用完它,下面就要bne了,有点循环的测试条件部分;
 cmp r1,r2
 tst r1,r2 ;根据r1&r2的结果设置cpsr
 teq r1,r2 ;根据r1^r2...

4.算术指令--
 adc r0,r1,r2 ;r0 = r1 + r2 + carry//??????????????

5.程序状态访问指令--当需要修改cpsr/spsr的内容时,
首先要读它的值到一个通用寄存器,-- mrs r0,cpsr
然后修改某些位后,在将数据写回状态寄存器;--msr cpsr,r0

6.单数据访存指令--
 ldr r0,[r1,#0xfff] ;将内存r1+0xfff地址的内容读到r0中。
 str r0,[r1,-r2,LSL#31] ;将r0的内容写到r1-(r2<<31)的内存单元中去。

7.多数据访存,和模拟栈--
 1)stmdb == stmfd ;压栈PUSH
 stmfd sp!,{r0-r12,lr} ;将所有寄存器包括返回地址压栈

 2)ldmia == ldmfd ;出栈POP
 ldmfd sp!,{r0-r12,pc} ;恢复所有寄存器包括PC

二、异常、中断
1.ARM模式分类:
########################################################
usr/system  |  SVC   | Abort   | Undef   |  IRQ  |    FIQ
r0  r0     r0  
r1  r1  r1
r2  r2  r2
r3  r3  r3
r4  r4  r4
r5  r5  r5
r6  r6  r6
r7  r7  r7
r8  r8  r8      r8_FIQ
r9  r9  r9
r10  r10  r10
r11  r11  r11
r12  r12  r12

r13  r13_SVC  r13_ABORT r13_UNDEF r13_IRQ
r14  r14_SVC  r14_ABORT r14_UNDEF r14_IRQ

PC  PC  PC

CPSR  CPSR  CPSR
  SPSR_SVC SPSR_ABORT


######################################################


2.CPSR/SPSR
1)条件标志
-N = ALU计算结果为负
-Z = ALU计算结果为零
-C = ALU计算结果进位
-V = ALU计算结果溢出

2)中断禁止位
-I = 1 ;关IRQ
-F = 1 ;关FIQ
-T:
T = 0 ;处理器当前处于ARM状态
T = 1 ;处理器当前处于THUMB状态

 

3.异常和异常向量表
1)异常向量表 -- 0x18是IRQ;

2)优先级:
-RESET ;
-DATA ABORT ;
-FIQ
-IRQ
-Prefetch
-SWI/Undef

异常的产生:
1)外部异常:复位,FIQ,IRQ
2)间接异常:数据终止(在LOAD和STORE数据访存时的存储器故障)
3)直接异常:软件中断,未定义指令和预取指令


3.异常时的模式切换
异常发生后
################在跳到异常向量表前硬件做得事情###################
-将CPSR拷贝到SPSR_<MODE>

-设置将要用在异常模式的CPSR中的适当位
 清除CPSR中的Thumb位(异常进入后就均为ARM STATUS,不可能是Thumb);
 修改相应的模式位;
 关中断(如果是RESET OR FIQ异常,还要关FIQ)

-映射相应模式寄存器;

-将PC保存LR_<MODE>,用于返回;

-将PC指向异常向量表的某个地址;

##################处理异常中...#################################
......
...
..
.
.

#########异常处理结束,异常返回##################################

-从SPSR_<MODE>中恢复CPSR

-用LR_<MODE>恢复PC /* 注意流水线的影响 */
SO,我们讨论一下在各种异常返回时,因为流水线的原因,对返回地址的调整;
-SWI/UND:             movs pc,r14_swi/und
- FIQ/IRQ/Prefetch:  subs pc,r14_<mode>,#4
- DataABR:              subs pc,r14_ABORT,#8

###############################END###########################

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

付款解决方案

视频 2009-10-19

光电路交换何以成为 AI 数据中心刚需

台积电出售世界先进8.1%股权,披露2029年前技术蓝图

EDA/PCB 2026-05-19

语音 AI 系统易遭受隐秘音频攻击

MSP430的开发工具和仿真软件

视频 2009-10-16

MSP430的无线射频应用

视频 2009-10-19

理解烟雾探测器:主要类型、功能和最佳使用方法

移动 DRAM 价格暴涨,智能手机生产承压

1601液晶程序

资源下载 2007-02-16

MSP430的外围模块介绍

视频 2009-10-19

PCB 电路板热量管控方案与设计要点

EDA/PCB 2026-05-19

AI时代车载芯片设计:功能与网络安全协同发展

Vishay PARÒ和TRANSZORBÒ TVS采用新的DFN6546A超薄封装实现3000 W功率耗散

2026-05-19

可靠性成为下一代机器人技术发展的核心挑战

效仿 HBM 架构 高带宽堆叠闪存 HBF 正式问世

更多 培训课堂
更多 焦点
更多 视频

技术专区