我在大学学习了 68HC11。它们使用起来非常简单,但老实说,大多数低功耗微控制器都是相似的(AVR、8051、PIC、MSP430)。增加微控制器 ASM 编程复杂性的最大因素是支持的存储器寻址模式的数量和类型。首先应避免使用更复杂的设备,例如更高端的 ARM 处理器。
我可能会推荐 MSP430 作为一个很好的起点。也许用 C 语言编写一个程序并通过用内联汇编替换各种函数来学习。从简单开始,x + y = z 等。
用汇编替换函数或算法后,比较和对比您的编码方式和 C 编译器生成的内容。在我看来,这可能是学习汇编的更好方法之一,同时了解编译器的工作原理,这对于嵌入式程序员来说非常有价值。只需确保首先关闭 C 编译器中的优化,否则您可能会对编译器生成的代码感到非常困惑。逐渐打开优化并注意编译器的作用。
RISC 与 CISC
RISC 的意思是“精简指令集计算”,它不是指特定的指令集,而只是一种设计策略,表明 CPU 具有最小的指令集。很少有说明每个都做一些基本的事情。对于“成为 RISC”需要什么,没有严格的技术定义。另一方面,CISC 架构有很多指令,但每个指令都“做得更多”。
RISC 的预期优势是您的 CPU 设计需要更少的晶体管,这意味着更少的功耗(对于微控制器来说很大),制造成本更低,时钟频率更高,从而带来更高的性能。更低的功耗和更便宜的制造通常是正确的,但由于 CISC 架构的设计改进,更高的性能并没有真正实现目标。
今天几乎所有的 CPU 内核都是 RISC 或“中间”设计。即使使用最著名(或臭名昭著)的 CISC 架构 x86。现代 x86 CPU 内部是类似 RISC 的内核,前端固定有一个解码器,可将 x86 指令分解为多个类似 RISC 的指令。我认为英特尔称这些为“微操作”。
至于哪个(RISC vs CISC)在汇编中更容易学习,我认为这是一个折腾。使用 RISC 指令集做某事通常比使用 CISC 指令集做同样的事情需要更多的汇编行。另一方面,由于可用指令的数量更多,CISC 指令集学习起来更复杂。
CISC 名声不好的大部分原因是 x86 是迄今为止最常见的示例,并且使用起来有点混乱。我认为这主要是因为 x86 指令集非常陈旧,并且在保持向后兼容性的同时已经扩展了六次或更多次。甚至您的 4.5Ghz 核心 i7 也可以在 286 模式下运行(并且在启动时运行)。
至于 ARM 是 RISC 架构,我认为这值得商榷。它当然是一个加载存储架构。基本指令集类似于 RISC,但在最近的修订版中,指令集已经增长了很多,以至于我个人认为它更像是 RISC 和 CISC 之间的中间地带。thumb 指令集确实是 ARM 指令集中最“RISCish”的。