首页 理论教育 利用汇编语言开发ARM系统底层驱动-嵌入式技术与应用

利用汇编语言开发ARM系统底层驱动-嵌入式技术与应用

时间:2023-11-08 理论教育 版权反馈
【摘要】:ARM的汇编指令包括32位的ARM指令集和16位的Thumb指令集。ARM程序和Thumb程序可以相互调用,它们之间的状态切换开销几乎为零。采用汇编语言编写ARM9的驱动程序,需要对ARM9的硬件组成结构非常熟悉。另外,应用汇编语言编写程序,需要用户对于相关的指令能够熟练记忆,如果一段时间搁置汇编语言,就会对指令产生遗忘,不利于以后的工作,所以建议初学者采用C语言来开发嵌入式系统。

利用汇编语言开发ARM系统底层驱动-嵌入式技术与应用

ARM的汇编指令包括32位的ARM指令集和16位的Thumb指令集。ARM指令集效率高,代码密度低,而Thumb指令集具有更好的代码密度,却保持ARM的大多数性能上的优势,它是ARM指令集的子集。

注意:代码密度是单位存储空间中包含的指令的个数。举例说明,ARM指令是32位的,而Thumb指令是16位的,如果在1KB的存储空间中,可以放32条ARM指令,但是可以放64条Thumb指令,因此存放Thumb指令时,代码密度高。

ARM程序和Thumb程序可以相互调用,它们之间的状态切换开销几乎为零。

1.ARM指令集

ARM指令集的基本格式是

<opcode>{<cond>}{S}<Rd>,<Rn>{,<opcode2>}

在指令格式中,<>中的内容是必须出现的,{}中的内容是可选的。指令格式中相应符号的说明如表3-1所示。

3- 1指令格式中相应符号的说明

978-7-111-41590-9-Chapter03-1.jpg

ARM指令集分为7类,分别是存储器访问指令、数据处理指令、乘法指令、跳转指令、协处理器指令、杂项指令和伪指令。表3-2是ARM存储器访问指令列表,表3-3是ARM数据处理指令列表,表3-4是ARM乘法指令列表,表3-5是ARM跳转指令列表,表3-6是ARM协处理器指令列表,表3-7是ARM杂项指令列表,表3-8是ARM伪指令列表。

3-2 ARM存储器访问指令列表

978-7-111-41590-9-Chapter03-2.jpg

3-3 ARM数据处理指令列表

978-7-111-41590-9-Chapter03-3.jpg

(续)

978-7-111-41590-9-Chapter03-4.jpg

3-4 ARM乘法指令列表

978-7-111-41590-9-Chapter03-5.jpg

3-5 ARM跳转指令列表

978-7-111-41590-9-Chapter03-6.jpg

3-6 ARM协处理器指令列表

978-7-111-41590-9-Chapter03-7.jpg

3-7 ARM杂项指令列表

978-7-111-41590-9-Chapter03-8.jpg

3-8 ARM伪指令列表

978-7-111-41590-9-Chapter03-9.jpg

2.Thumb指令集(www.xing528.com)

Thumb指令集可以看做是ARM指令压缩形式的子集,是针对代码密度提出的,指令格式与ARM指令集相似。Thumb指令集不是一个完整的体系,所以不能指望开发全部采用Thumb指令集。Thumb指令集没有协处理器指令,信号量指令及访问CPSR或SPSR的指令;没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除跳转指令B有条件执行功能外,其他指令均无条件执行。

Thumb指令集共分为4类,分别是存储器访问指令、数据处理指令、跳转指令及软中断指令和伪指令。表3-9是Thumb存储器访问指令列表,表3-10是Thumb跳转指令及软中断指令列表,表3-11是Thumb伪指令列表,表3-12是Thumb数据处理指令列表。

3-9 Thumb存储器访问指令列表

978-7-111-41590-9-Chapter03-10.jpg

(续)

978-7-111-41590-9-Chapter03-11.jpg

3-10 Thumb跳转指令及软中断指令列表

978-7-111-41590-9-Chapter03-12.jpg

3-11 Thumb伪指令列表

978-7-111-41590-9-Chapter03-13.jpg

3-12 Thumb数据处理指令列表

978-7-111-41590-9-Chapter03-14.jpg

(续)

978-7-111-41590-9-Chapter03-15.jpg

3.伪指令

ARM汇编程序由机器指令(ARM指令集和Thumb指令集)、伪指令和宏指令组成。伪指令不像机器指令那样在处理器运行期间由机器执行,而是汇编程序对源程序汇编期间由汇编程序处理。在ARM指令集和Thumb指令集中都有伪指令的存在。表3-13给出了伪指令列表(由于前面给出了ARM指令集和Thumb指令集中的伪指令,在表3-13内就不再列出了)。

3-13 伪指令列表

978-7-111-41590-9-Chapter03-16.jpg

(续)

978-7-111-41590-9-Chapter03-17.jpg

(续)

978-7-111-41590-9-Chapter03-18.jpg

下面的例子程序段是一个含有子程序调用的汇编程序代码段。

978-7-111-41590-9-Chapter03-19.jpg

采用汇编语言编写ARM9的驱动程序,需要对ARM9的硬件组成结构非常熟悉。在学习汇编语言之前,需要对ARM9处理器的内核ARM920T的结构有个全面的了解,了解其工作模式、工作状态、寄存器组织和程序状态寄存器等相关硬件的知识,除此之外,还要对ARM9的存储器映射、基本寻址方式和各种中断类型有较全面的了解。上述内容对于初学者来说不是短期内能够掌握的。另外,应用汇编语言编写程序,需要用户对于相关的指令能够熟练记忆,如果一段时间搁置汇编语言,就会对指令产生遗忘,不利于以后的工作,所以建议初学者采用C语言来开发嵌入式系统。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈