微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM指令学习笔记

ARM指令学习笔记

时间:11-11 来源:互联网 点击:
要学arm指令集,首先要了解什么是arm。众所周知arm是advancedRISCmachines。而risc又是什么东西呢?即:reducedinstructionsetcomputer,精简指令集计算机。是一种是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机。由于指令少越简单,就需要更少的晶体管和电路元件,故它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。我想这也是nds游戏机要用arm处理器的原因,因为它小且快,再者廉价。Arm呢,它是英国的一家公司,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。这个公司ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权。纵观我们周围的手机,诺基亚n86,n97,n95,n96......摩托诺拉,索爱,苹果,三星,无一不大量使用arm处理器。而我们所要接触的nds中的处理器ARM946E-S和ARM7TDMI是ARM公司研制的内嵌式32BITRISCCPU。它具有低功耗、高性能、体积小、低价格等优点。非常适合掌机使用。ARM946E-S是一种有5级流水线,集成有Thumb扩展功能、调试功能和哈佛总线的内核。在同样工艺下,它是ARM7TDMI性能的两倍以上。有了个简单了解之后,开始投入到了arm指令的学习。

参考----------<百度>"arm百度百科","NDS百度百科"

接下来就是对arm指令的学习。

因为有过前面8086指令的学习,并且也写过像高精度计算这样的汇编程序,看arm指

心里面老在比较这两套指令。

arm7TDMI(-S)指令系统有两套指令集,分别是32位的Arm指令集和16位的thumb指令集。简单点说:arm支持arm内核的所有特点,具有高效、快速的特点;而thumb指令集灵活、小巧。二者可以互相调用,Thumb指令集可以看做是Arm的压缩形式的子集,是针对代码的密度问题而提出的,Thumb指令都有对应的Arm指令,但却不是一个完整的系统,例如:Thumb指令集没有协处理器指令,信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其它指令基本为无条件执行.,等等。不一一叙述。而Arm指令集出了具有很多Thumb没有的功能外,它最大的特点就是:高效。

Arm的寄存器是37个,包括

31generalregisters(Rxx)

6status registers(xPSR)

对这37个寄存器的详细描述我们可以从nocash.emubase.de这个网站上得到。

学习arm指令,最先接触的是寻址指令。

Arm寻址指令可分为九类:

Arm指令 80x86中有吗?

1.寄存器寻址

2.立即寻址;
3.寄存器移位寻址; 无

4.寄存器间接寻址;
5..基址寻址;

6.多寄存器寻址; 无

7.堆栈寻址; 无

8.块拷贝寻址; 无
9.相对寻址。

可以看到arm寻址指令里面有个很大的特色是它的寄存器移位寻址,即第二个操作数在与第一个操作数结合之前可以选择进行移位操作,例如:MOVR0,R2,LSL#3。而在80x86指令中这得要三步走:一次赋值(否则影响寻址变量的值)、一次移位、一次寻址。不仅带来了视觉上的不便,而且给书写带来了麻烦(更容易出错)。另外,Arm指令还可以进行多寄存器寻址,无疑简化了操作(具体点讲,就是少写很多"LD""ST")。还可以看到我们在arm指令中只需加个"!"就可以决定中间值是否保留。更加方便的是我们可以自由选择变址前后指针的变化,例如块拷贝寻址中就有四种:STMIA,STMIB,STMDA,STMDB.连递减还是递增,先变址还是先复制,Arm都给你预先设计好了,不能不说它周全,这些都是80x86里没有的,极大地方便了程序员的程序设计。

顺带说一下其另一个便捷之处,加载/装填数据时,可以在命令后加H/B来表示对半字/字节的数据操作,默认情况下是字。并且ARM可以实现一组寄存器和一块连续内存之间传送数据,如LDMIA和STMIA指令。

看完寻址,接下来才是Arm指令的重点,

Arm指令的基本格式为:

{}{s},{,}

————————arm的32伪指令二进制格式

其中<>内的项是必须的,而{}内的项是可选的。

Opcode:指令助记符

Cond:执行条件

S:是否影响cpsr寄存器的值

Rd:目标寄存器

Rn:第一个操作数的寄存器

Oprand2:第二个操作数

ARM指令可以分为6大类

(1) 跳转指令 B、BL、BLX、BX

(2)数据处理指令 数据传送\算术逻辑运算\比较

(3)程序状态寄存器传输指令

(4)load/store指令

(5)协处理指令

(6)异常中断指令

可以看到项,这又是arm指令的一特色,可以将各种运算指令与条件指令结合起来用,例如80x86中写个找ra,rb中教大数存入rc寄存器中需要这样写

MOVE rcra

CMP rarb

JG NEXT

MOVE

上一篇:关于LPC2103外部中断
下一篇:第7课:DMA

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top