Cortex-M3可编程片上系统原理及应用-PSoC设计导论之:微控制器基础
。比如:对8051 来说,机器语言指令-7D25,表示该指令要实现数据传输操作,"7D"是操作码,"25"是操作对象,其表示将十六进制数#25 ,送到R5 寄存器中。
但是,正如前面所说的,纯粹意义上的"机器语言"对程序员太难理解了,为什么?这是因为程序员是CPU 的操作者,而不是CPU 的设计者,程序员根本不可能从二进制代码的排列中看出"机器语言"所描述的逻辑操作行为。
为了帮助程序员理解CPU 所执行的操作,通过汇编语言助记符指令来帮助程序员设计指令以控制CPU 的运行。汇编语言助记符指令通过汇编器被翻译成机器语言指令。用汇编助记符描述机器指令的形式为:
[标号:] 助记符 [操作数] [;注释]
标号用来表示一行指令,助记符表示所要执行的逻辑操作行为,操作数为逻辑操作行为所操作具体对象,现在用汇编语言来描述上面的机器指令"7D25":
MOV R5, #25
MOV 表示数据移动操作,R5 表示目的操作数,#25 表示源操作数,这个助记符汇编指令所表示的是,将立即数25 复制到R5 寄存器中。使用助记符来描述CPU 所要进行的操作,比使用机器语言直接描述更加容易理解和记忆。但是,由于汇编语言下面是机器语言,所以对于使用汇编语言编程的程序员来说,他必须很清楚CPU 的指令集,寄存器单元和存储器映射等繁琐的硬件规则。虽然其执行效率基本上和机器语言一样,但是使用汇编语言编程效率很低。因为很多程序员根本不了解CPU 的具体内部结构,所以对他们来说,使用汇编语言编程并不比使用机器指令编程好到哪里去,这也是一件令他们非常痛苦的事情。
值得高兴的是,在今天,厂商开发的软件平台支持使用C、BASIC 等高级语言对硬件进行编程;C 语言是不能直接在CPU 上运行,它必须首先通过编译器(Compiler )转换成机器语言,才能在CPU 上运行。使用高级语言所编写的代码其运行的效率不可能比用汇编语言编程的运行效率高,所以说,如果你想让C 语言所编写的代码和汇编语言编写的代码有一样高的代码执行效率,你只能是绞尽脑汁的对C 代码进行优化,或者使用C 语言和汇编语言混合编程,来满足代码长度和运行时间的设计要求。虽然这一过程也会让程序员耗费很多的精力,但是,值得他们高兴的是,他们再也不用和底层硬件直接打交道了。
为了更清楚地说明C 语言和汇编助记符之间的关系,列出表1.1 如下。
表1.1 C 语言和汇编助记符之间的对应关系
C 语言描述 | 汇编助记符 | 机器指令 | 功能 |
| MOV A, 0x08 | E508 | 将数据空间地址为0x08 的内容送给累加器A |
F=C+D | ADD A, 0x09 | 2509 | 将数据空间地址为0x09 的内容和累加器A 相加后送给累加器A |
MOV 0x0A, A | F50A | 将累加器A 的内容送到地址为0x0A 的数据空间 |
如今,越来越多的厂商提供了硬件的应用程序接口(Application Program Interface,API)函数,这样程序员可以根本不用知道更多的硬件实现细节,只需关心如何编写代码来使硬件工作,这样就大大提高了程序的设计效率。
Cortex-M3 微控制器 可编程片上系统 PSoC 相关文章:
- 基于Cortex-M3内核处理器的嵌入式Web服务器设计(02-17)
- STM32-FSMC机制的NOR Flash存储器扩展技术(11-20)
- 基于Cortex-M3的 STM32微控制器处理先进电机控制方法(11-23)
- 基于STM32控制的声音导引系统(01-16)
- 基于Cortex-M3的STM32微控制器处理先进电机控制方法(03-07)
- 基于STM32的嵌入式语音识别模块设计(03-29)