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


19

因此,我想先在MP上学习Assembly,然后再学习C(因为大多数人似乎都使用C)。

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

我了解Arduino,这一切都很棒,但是我找不到用于将Assembly与它们一起使用的许多资源。Atmel AVR似乎很受欢迎(且便宜),但是当涉及到实际的硬件部分(将它们挂在面包板上等)时,我找不到太多的信息。

你们/加尔斯知道的任何建议/信息或资源,请让我知道。

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


3
我不希望将您发送到其他地方,但如果您对AVR感兴趣,则需要了解AVRfreaks.net
凯文·维米尔

Ya Im倾向于AVR ...主要是因为他们关于它们的太多信息,而且它们比TI-MPS430便宜得多……

2
AVR在业余爱好者中很受欢迎,但是我不确定您从何处获取费用数据。这两个家庭都有一些产品的价格低于1美元,而另一些产品的价格则低于20美元。
凯文·维米尔

好吧.....当我查看MPS430时,添加到开发板上时,该软件(调试器等)看起来有点昂贵。

1
我的建议是如果您是初学者,请不要选择MSP430。官方工具很好,但是您在网上可以找到的免费支持与PIC / AVR不匹配
Toby Jaffey

Answers:


14

我在大学期间以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)更容易在汇编中学习,我认为这很容易。与使用CISC指令集执行相同的操作相比,使用RISC指令集执行的操作通常需要更多的汇编行。另一方面,由于大量可用指令,CISC指令集学习起来更加复杂。

CISC取一个不好的名字的大部分原因是,x86到目前为止是最常见的示例,使用时有些混乱。我认为多数是由于x86指令集很旧,并且在保持向后兼容性的同时已被扩展了六次或更多次。甚至您的4.5Ghz核心i7都可以在286模式下运行(并在启动时运行)。

至于ARM是RISC架构,我认为这值得商de。它当然是一个负载存储架构。基本指令集类似于RISC,但是在最近的修订中,指令集已经发展到相当程度,以至于我个人认为它更像是RISC和CISC之间的中间立场。Thumb指令集确实是ARM指令集中最“ RISCish”的部分。


@Mark-ARM也是RISC处理器,指令集还不错。实际上,它的设计很好。有一些关于用户空间与内核空间区分以及其他复杂性的说明,但是在您入门时可以忽略这些说明。
凯文·维米尔

1
@reemrevnivek在他开始使用ASM时,我更想使他摆脱处理多种处理器模式和MMU的复杂性,这就是为什么我提到了高端ARM。高端ARM SoC的初始化和设置也比AVR / PIC / MSP430之类的要复杂得多。
标记

RISC?我不确定我是否理解这与其他任何事物之间的区别...是否需要说明?大多数微控制器不是RISC吗?只是意味着更少的指令集正确吗?

1
@sauron我在我的答案中添加了:RISC vs CISC。
标记

AVR / PICS之类的东西通常是RISC还是CISC?

8

我认为8位PIC单片机是最佳选择,因为减少了指令数量。

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

但是,在学习了PIC之后,您可以迁移到其他微控制器,并查看最适合您的微控制器。


我不会完全不同意,因为这是我现在正在探索的东西,但是8、16和32位内核具有完全不同的asm策略。
Grady Player

7

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


S08与HC11相比减少了寄存器的数量,这会使事情变得更加困难,因为您需要弄清楚堆栈对所有事情的影响(这是稍后在我的实验室中使用HC11进行的(或者是12))。通过扩展,AVR非常好,因为在担心堆栈之前,您要使用多达32个寄存器。
尼克T

实际上,我喜欢单个累加器的简单性,即使它可能成为瓶颈。首先,我发现使用144字节的直接页变量可以更短的指令访问(而不是使用临时变量堆栈),可以使用较短的指令进行访问(其他112字节的直接页用于I / O寄存器)。稍后将学习使用堆栈(允许使用重入和递归例程)。
tcrosley 2011年

HC(S)08是否源自HC05?
约翰。

@ Johan.A是的,您绝对正确。HCS08是HC05的增强版本。我应该提到这一点。我认为推导类似于6800-> 6801-> 6805-> HC(S)08。我为6805编写了很多汇编代码。我将HCS08与6809进行了比较,并结合了68HC11(大约是6809的微控制器版本)的其他注释。
tcrosley13年

4

msp430指令集是学习汇编程序的好方法。避免使用x86。Arm是另一个不错的选择,但是它具有更多的指令和选项,可能不适合作为第一个指令集。Thumb是arm指令集的一个子集,还不错,在github上,我有一个拇指模拟器(thumbulator)和一个msp430模拟器(未像拇指拇指一样测试),只是一个准系统,只是处理器和内存等等。 ,因此您可以很好地了解正在发生的事情。例如,可以选择qemu,那里的可见性很强,但很难获得,同样,对于像qemu这样的解决方案,在确定是否有任何工作之前,还需要进行大量工作。
转到mspgcc4.sf.net来构建工具链,和/或将库存binutils(./configure --target = msp430 --prefix = / something)与库存llvm结合使用。一旦您准备好使用硬件,一个msp430开发板的成本就在5美元以下。对于手臂/拇指工具,只需从代码源获取精简版本。一块cortex-m3(thumb / thumb2)板现在大约需要12美元。我会避免将x86和avr等作为第一个指令集,您将需要学习其他方面的知识。旧的/原始的pic指令集也值得一看。您可以在下午自己编写一个模拟器,也可以学习汇编程序。我不会一定要先学它,它确实会教一些有趣的东西,但同时却不能扩展,也不一定能代表您在大多数指令集中发现的常见功能。msp430给了我pdp11的感觉,这是我真正了解的第一条指令集,两者都具有良好的舍入特性,主要是正交特性。msp430和微芯片pic指令集都在Wikipedia上进行了记录,至少作为参考,以获取整个图像,并从供应商获取数据手册/手册,其中将描述每个寄存器和寻址方式,复位/引导等。


仅对于汇编程序,您仅需要binutils,至少对于arm / thumb或msp430,您可以构建汇编程序和链接程序。如果要使用C编译器作为学习工具,可以从中检查汇编器输出,则需要mspgcc4或codesourcery或仅对这两者使用llvm。
old_timer

4

您确定要学习汇编吗?你能说为什么吗?这是一项艰巨的任务,如今越来越少了。这是来自编写甚至手工汇编程序的人员(没有汇编程序,链接程序,只有带有指令集的卡)。


这实际上不是一个答案,而是一个评论。我也会犹豫要信任一个嵌入式C程序员,他不愿意在尝试理解项目行为的怪异之处时不时地进行汇编工作。
克里斯·斯特拉顿

4

我也在大学里学习过68HC11。相反,他们建议在任何其他MPU / MCU上使用,我只是想指出我们使用的开发板上带有监视程序。因此,从哑终端中,我们可以逐步检查代码并检查寄存器...我建议您在知道哪种处理器符合您的要求时,还应检查一下监控程序中可用的开发板。


监听程序听起来像是很有帮助的。您用什么书来学习这本书?如果您介意我问....

我对68HC11 有经验,“监控程序”被称为Buffalo Monitor。基本上,它只是存储在ROM中的程序,该程序与您的PC进行串行通信。您在终端中键入内容,程序将解释您的请求并向您提供信息。您可以将内存转储到屏幕上,更改内存值,逐步执行说明等。我们使用的板就是这块板。该控制器易于学习,但过时。
sherrellbc

... 如果您感兴趣,我们使用的书就是本书。我建议使用像AVR这样的更现代的控制器。他们的开发委员会可以在这里找到。
sherrellbc 2014年

3

我同时教授PIC(14位内核)和ARM汇编。我告诉PIC班级,一旦他们掌握了该体系结构的丑陋之处,便可以承担其他任何任务。ARM(不是Thumb / Cortex!)是学习汇编的很好的体系结构。我们使用LPC2148板。


嗨,伍特,很高兴在这里见到你!
奥林·拉斯洛普

2

我通过dsPIC33F学习了16位PIC汇编。处理器的程序集很像C,因为它支持指针和三个变量操作(例如A = B + C),这使学习和适应变得更加容易。


1

您在这里混淆了微控制器和微处理器。AVR是Atmel生产的微控制器,而不是微处理器。我建议您首先在Wikipedia上进行搜索,以更好地了解它们之间的区别。基本上,微控制器是一个或多或少完整的系统,而微处理器只是cpu(因此,微控制器内部具有微处理器)。


是的,我知道,我不知道为什么我没有那样说。我的意思是,就好像没有多少指南谈论实际连接MP和内存(例如闪存或eeprom)等...

1
由于现在大多数微处理器都具有高速缓存/内存和一些I / O,因此这条线非常模糊。
肯尼

1
@Sauron-您确定知道吗?您再次使用了MP。微控制器(这是AVR和我们在此讨论的99%的设备的正确术语)几乎总是在板载内存(都是非易失性的,例如EEPROM和Flash,以及易失性SRAM)。开始尝试进入外围设备之前,请学习使用板载设备。
凯文·维米尔

1

在我的大学里,我们通过MIPS(或者也许是DLX)接受了硬件设计/体系结构以及汇编语言(显然两者是齐头并进)的培训))体系结构的。从那时起,我在学校/工作中开始涉猎PIC和AVR组件,它们都非常相似。我认为MIPS汇编是一个很好的起点,因为语言和处理器体系结构都很简单。

另请参阅:这本书。这不是世界上最好的书,但它是许多大学的标准计算机设计书。


Microchip的PIC32采用MIPS架构,它是很容易与汇编混合C. MIPS
tcrosley

0

我的建议是,任何打算开始研究微控制器和处理器的人,如果您发现自己几乎都是处理器专家,并且对AVR进行编程,最好使用poney prog编程器和来自atmel官方网站的atmel studio6.1


请概述本书和程序员的关键功能,这将使OP准确使用它们。
Vorac 2013年

它是关于了解微控制器如何从数字系统开发并解释汇编语言的
avinash

请访问j.mp/mpcinterest网站获取该书
avinash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.