什么是学习汇编的良好入门微处理器?

电器工程 微控制器 微处理器 集会
2022-01-16 14:46:41

所以我想先在 MP 上学习汇编,然后转到 C (因为这似乎是他们大多数人使用的)。

我想进入嵌入式编程,我真的很喜欢低级 C 的东西(Linux 的内核/模块主要是我所做的),但我喜欢能够编程甚至更低级别的想法(微控制器/微处理器)。

我知道 Arduino,这很好,但我找不到很多资源来与他们一起使用 Assembly。Atmel AVR 似乎很受欢迎(而且价格便宜),但是当涉及到实际的硬件部分(将它们连接到面包板上等)时,我找不到太多信息。

你们/女孩知道的任何建议/信息或资源,请告诉我。

编辑:另一件事:似乎我读过的所有微处理器书籍(通常是 AVR)都在谈论微处理器本身,并对其进行编程。但是我还没有看到一本真正谈论自己安装所有组件(微处理器、内存、电源等)的书。如果我能找到一些能引导我完成的事情,我就会做生意。(我想从头开始学习。)更不用说我不知道​​你将如何在他们之间交流。

4个回答

我在大学学习了 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”的。

我认为 8 位 PIC 微控制器是最佳选择,因为指令数量减少了。

指令数量减少的副作用是,与其他具有更多指令的微控制器相比,您必须重新发明轮子。

但是在学习了 PIC 之后,您可以迁移到其他微控制器,看看哪种更适合您。

与 Mark 对 68HC11 的建议类似,飞思卡尔 68HCS08 系列的指令集 是摩托罗拉 6809 的精简版,我认为它是当时最干净的 8 位指令集之一。您可以在此处以 79 美元的价格获得带有开关、LED、3 轴加速度计和压电蜂鸣器的开发板

msp430 指令集是学习汇编程序的好工具。避免 x86。Arm 是另一个不错的产品,但有更多的指令和选项,可能不适合作为第一个指令集。Thumb 是 arm 指令集的一个子集,而且还不错,在 github 上,我有一个 thumb 模拟器(thumbulator)和一个 msp430 模拟器(没有像 thumb 那样测​​试),它们都是准系统,只有处理器和内存等等,因此您可以很好地了解正在发生的事情。另一种选择是 qemu,例如可见性在那里但更难获得,同样使用类似 qemu 的解决方案,在您确定是否有任何工作之前需要做更多的工作。
转到 mspgcc4.sf.net 以构建工具链,和/或结合股票 llvm 的股票 binutils (./configure --target=msp430 --prefix=/something)。一旦你准备好硬件,一个 msp430 开发板的成本低于 5 美元。对于 arm/thumb 工具,只需从 codesourcery 获取 lite 版本。一个 cortex-m3 (thumb/thumb2) 板现在大约 12 美元。我会避免将 x86 和 avr 等作为第一个指令集,您将希望学习其他人的全面性。旧的/原始的 pic 指令集也值得一看。你可以在一个下午自己编写一个模拟器,也可以学习汇编程序。我不一定要先学习它,它确实会教一些有趣的东西,但同时它不会扩展并且不一定代表您在大多数指令集中找到的共同特征。msp430 给了我 pdp11 的感觉,这是我真正学到的第一个指令集,两者都具有全面的、主要是正交的特性。msp430 和 microchip pic 指令集都记录在 wikipedia 上,至少作为参考,以获取全貌 从供应商处获取数据表/手册,其中将描述每个寄存器和寻址模式、复位/引导等。