【问题标题】:Whats the best resource to learn Assembly language for PIC microcontroller's [closed]学习 PIC 单片机的汇编语言的最佳资源是什么 [关闭]
【发布时间】:2010-12-01 04:50:23
【问题描述】:

我将开始一个项目,我需要对 PIC 单片机的汇编语言有充分的了解。我对 C/C++ 非常熟悉,所以我大部分时间都知道如何编写代码,而且我已经为 PIC 做过很多项目,所以我了解架构,但我已经在“C”中完成了所有的编程。

是否有一本好书或网站可以很好地解释所有汇编命令的含义以及如何为 PIC 微控制器执行相当简单的任务(闪烁 LED、基本数学等)?

编辑:这篇文章的主要目的是请求学习汇编的资源,而不是讨论 PIC 中 C 与汇编的优点,或者 PIC 是否是一个“好”的微控制器。如果这有什么不同,我正在使用 PIC18 微控制器。

【问题讨论】:

    标签: assembly embedded microcontroller pic microchip


    【解决方案1】:

    PIC 列表:http://piclist.com/

    特别是,

    【讨论】:

    • @RobertColumbia:看起来所有的内容现在都可以在 Piclist.com 上找到。这个修改能解决吗?
    【解决方案2】:

    这可能是一个很晚的回复,但您可以从这个主要为通过应用程序学习 PIC 组装而编写的实验课程中受益。

    检查:http://embedded-ju.ucoz.com/

    查看实验标签,它包括:

    实验 0 -(MPLAB 简介)

    实验一——(PIC汇编指令集简介)

    实验 2 -(更多关于指令集和模块化编程技术)

    实验 3 -(基本系统分析与设计)
    3.1。硬件指南我

    实验 4 - ( LCD - HD44780 )

    实验 5 -(键盘)

    实验 6 -(在 MPLAB 中使用 HI-TECH C 编译器) 6.1。 PIC 编程与 ICD2 指南。

    实验 7 -(定时器(Timer0 和 Timer2))

    实验 8 - (USART)

    实验 9 -(软件 PWM 和 A/D)


    它基于 PIC 16 系列,最显着的是 16f84A、16F877A 和 16F917 .. 示例完全注释,实验完全解释。

    【讨论】:

      【解决方案3】:

      我相信编写反汇编程序。从一个非常简单的一两行程序开始,它可能会加载一个带有常量的寄存器(必须阅读教程或其他东西来学习该步骤)。组装它。以您能够或愿意编写程序来读取的格式保存二进制文件(也许是英特尔十六进制,或者如果他们支持,则为精灵)。

      编写一个程序来读取二进制文件并提取程序,然后获取这些字节并编写一个反汇编程序(即使供应商有一个反汇编程序,您仍然应该编写一个)。

      现在开始迭代流程,学习一条新指令或使用该指令的新方法,一次一条指令。编写代码来反汇编该指令或选项。尝试编写汇编程序来操作指令中的每个位。

      当您了解指令集时,您将比大多数每天使用它的人更了解指令集,您将知道如何为每个操作码的每个选项编写汇编程序,您还可以学习为什么该指令只能从其位置寻址 N 个字节而其他指令可以访问任何内容,或者该指令只能使用 N 位立即数而其他指令可以使用任何值。那种东西。

      这个过程我用过很多次,学过很多指令集,ymmv。在前两三个之后,上述过程可能只需要一个下午即可完成。

      编辑:

      这里的目标是教育,而不是下一个伟大的 sourceforge 项目。输出可以是丑陋的或不完整的,只要你是唯一会阅读它的人。

      注意:可变长度指令集的通用反汇编程序可能有些困难,在这种情况下,您不想线性反汇编二进制文件,您希望遵循所有执行路径。我会避免它。即使在可变长度指令集上,采用执行某种线性汇编然后反汇编的简单程序也不困难。如果编译器没有汇编器输出选项或没有反汇编器,您可以通过反汇编和检查 C 编译器(或其他高级语言)的输出来了解指令集利用这一点(除非它是一个固定长度的指令集)。

      还请注意,一旦您学习了一个处理器的汇编程序,第二个处理器就会容易得多,依此类推。你需要从一个到下一个学习的东西通常会变成这个跳跃有多大,立即数的规则是什么,间接寻址,基本上所有与检查操作码直接相关的东西。您无需查看操作码即可学习它,但您必须依赖高质量的文档或汇编错误消息。

      【讨论】:

      • 你是认真的吗!?听起来 OP 必须完成工作;谁会付钱让他采取你建议的方法?
      • 在下午做这件事听起来……很快。
      • 是的,很严重。编程就是编程,它是语法问题,通过阅读而不是做来学习语法既昂贵又缓慢。试图编写、运行和调试程序只是为了学习一条指令是缓慢而昂贵的,这是一种非常便宜、快速和可靠的解决方案。如果你能找到一种方法在几个小时内从内到外学习 ISA,而无需使用廉价计算机和免费编译器以外的任何设备,那就去吧。 (好的 pdf 阅读器和汇编器)
      • 这样你可能学得很好,但学习它“足够好”在商业项目中更具成本效益。专业开发人员确实需要精通,但同时必须明白他们的存在是为了创造财富,而不是成为神秘技术的专家。在一个非常大的项目中,您将学习并变得更加熟练,同时提高生产力。如果您将此作为一种爱好,请做您喜欢的事情。我毫不怀疑,许多业余爱好者比许多专业人士更擅长汇编程序员——因为他们的动机不同。
      【解决方案4】:

      还有不止一种 PIC 架构,具有明显不同的指令集。例如,Microchip 不具备 Atmel AVR 的架构一致性。所以你需要指定你使用的是什么——例如 PIC12、16、24、32。

      因此,首先我建议避免使用 PIC 汇编器,因为您在 PIC12 上学到的知识可能不太适用于 PIC24。其次,如果我作为软件开发人员可能的话,我会完全避免使用 PIC - 尽管我承认还有其他考虑因素,您可能别无选择。

      您可以选择不使用汇编程序。虽然低端 PIC 可能不是最适合 C 代码生成,但这是编译器编写者的问题;在可能的情况下使用 C 语言在开发时间方面更具成本效益。另一方面,对于大批量产品,如果您可以使用汇编程序将代码装入较小的部分,这可能是一个因素。在测试 C 解决方案之前决定需要汇编程序通常是“过早的优化”。即使 C 实现未能满足大小或时间限制,您也可以将其称为原型,然后对其重新编码以满足限制条件。这样做可能仍然比从头开始汇编程序编码并同时在设计和指令集上苦苦挣扎要快。告诉你的老板你会用 C 来制作原型,然后当它满足要求时,没有人会愿意浪费金钱重新编码它是一种不可移植、不可维护的汇编代码。

      最后回答您的问题,假设您需要快速高效地完成工作,尽可能使用 Microchip 的示例和应用笔记,并熟悉制造商指令集参考中的指令集。低端部分的指令集并不大。对于日常工作,我喜欢使用“说明集参考卡”作为备忘录 - 它总结了每条说明的所有基本细节,通常在几页中 - 将其双面打印并层压! ;)。这是PIC16 example

      【讨论】:

      • 我完全同意。我用汇编程序完成了PIC编程,实际上学习指令集并不难。然而,在如此低的水平上编程并不令人愉快——C 语言要好得多。除非有令人信服的汇编程序商业案例,否则我会选择 C(如有必要,请远离 PIC)。
      • 对于较小的旧图片,asm 比 C 更快、更简单、效果更好。新的 pic32 源自 mips,因此是一个完全不同的野兽。学习 pic 汇编器可能意味着两个或三个不同的指令集,所以我绝对同意您需要指定您正在谈论的 PIC。
      • 即使您使用 C 进行编程,了解底层程序集也确实很有帮助,这样您就可以了解编译器将如何处理您输入的内容。
      • @dwelch:同意,低端 PIC 不是很好的 C 平台,编译器受到严格限制。当“其他考虑因素”(例如每单位成本)占据主导地位时,您会使用这些。也重新。 PIC这个名字,它已经成为一种营销工具而不是一种架构——PIC32与以前的器件没有任何关系。我不确定 PIC32 是否有很大机会对抗 ARM,从而大举进军 32 位市场。 @Crashworks:是的,在嵌入式系统中尤其如此,但是能够阅读汇编程序并不要求您能够编写它。
      【解决方案5】:

      我会试试这个: Pic Tutorial

      【讨论】:

      • 这是我以前学习的一些汇编(用于 PIC),但是,将来要警告那些:我注意到教程中的一些错误和一些拼写错误。尽管如此,我仍然觉得这是一个很好的资源来“感受”Assembly。另一个学习更多组装的好资源是 Nigel Gardner 的“PIC C 简介”。这是一本关于“C”的书,但列出了一些循环是如何在汇编中完成的,所以它也是一个很好的资源。
      • 链接中的站点已关闭!
      • 还是挂了。这个答案不再具有任何有意义的价值。
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2010-10-05
      • 2010-09-09
      • 1970-01-01
      • 2019-06-07
      相关资源
      最近更新 更多