汇编语言(主要是PIC)是否存在代码规范?

6

汇编语言(主要是PIC)有代码规范吗?


2
我不会说这是离题,但我的代码约定是使用C或C++,而不是汇编语言。 - Jason S
同意评论里的观点。按照我的惯例,只有在追求速度/空间优化的最后一个选择时才会使用汇编语言。 - kenny
我需要降低产品的价格。C 并不是最好的选择。 - Daniel Grillo
6个回答

10

1
这是一般的风格,但评论很糟糕(太低级或不够精确)。 - starblue
这是一个很好的起点文档。但正如上面所评论的那样。 - Daniel Grillo
我在这里提出了同样的问题:http://electronics.stackexchange.com/questions/7468/are-there-any-code-conventions-for-assembly,也许你也想在那里回答。 - Daniel Grillo

6

编写汇编代码时,每行注释是非常有帮助的,而且并不过分。


我刚要说类似的话。我有一些几年前的汇编代码,只有少量注释,而且我对其中的内容一无所知。 - Zifre

2

这取决于您是使用汇编语言编程还是使用c编译器为您创建汇编代码。如果性能很重要,请不要使用c编译器,自己编写汇编代码。

但一般来说,惯例是对每行进行注释,使用具有有意义指针名称的简单子程序。有些事情您会在块上进行注释,例如:

    start:   movlw   0x24      //  \
             movf    count     //   put 24 into count


    MyCount: decfsz  count     //decrement count and exit if done
             goto    myCount   //do the loop
             goto    exit      //count is done exit

这是典型的编码方式,第一列用于地址指针,下一列为命令和相关变量,通常在实际程序之前的头部区域定义变量,但这依赖于您使用的汇编器。有些汇编器不提供变量指针选项,您必须使用直接内存位置。如果您查看从反汇编器返回的注释代码,它会像这样:

    0020  movlw  0x24
    0021  movf   0x25     // 0x25 = memory address of count
    0022  decfsz 0x25
    0023  goto   0x0022   // loop back to 0x22 until count = 0
    0024  goto   0x01FF

当你注释掉代码时,请确保对其进行分组,并使用“nop”将代码偏移至好的地址,例如从20开始,留下2到20之间的地址以供中断等使用。根据芯片的不同,我编写了许多12f675的代码,因此我通常使用这个型号。
同时,将代码保持简单明了的子程序,并使用整洁的地址,留出10个或更多的nop块在初始子程序之间,你总是可以稍后回来压缩你的代码。并且一定要注释你的代码,你永远不能注释太多。
另外,我通常将我的初始化程序放在内存末尾尽可能靠近,以便为实际程序留下最大空间。
希望这些有所帮助。

0

我赞成Jason S的看法——如果有可能,尽量使用C编译器,即使你最终需要在".c"文件中使用"__asm"关键字嵌入几行汇编语言。

如果你必须为PIC编写整个汇编程序,推荐的函数调用约定是在 PIClist: PIC Paging and PCLATH


0

我认为没有正式的东西,但是在他们网站上阅读编码示例可以让你尝试通常的习语。只需注意,有许多来自不同爱好者的“贡献”,它们可能不那么好。

还要检查其他项目,大多数都会有丑陋的代码;但你会找到一两个宝石。

我从未在PIC上编程,但喜欢阅读代码。我模糊地记得有一个“实时操作系统”,具有非常好和清晰的执行流程。我不记得编码风格有多一致,但我会从那里开始。

最好阅读其中大部分,并使其像散文一样容易,那么你就会找到自己的风格。


0

这真的取决于您使用的PIC型号。例如,PIC16和PIC18有很多汇编示例可以在网上轻松找到。

然而,像PIC24和PIC32这样的型号更加适合C语言。在特定PIC型号的网站上可以找到许多用C编写的PIC示例。这些PIC型号仍然可以用汇编语言编程,但是如何编程的网络示例非常少。最好的资源是MPLAB中的“帮助”,检查您的PIC型号所使用的“汇编器”的“帮助内容”。这将向您展示一些示例以及有关如何在PIC汇编中编程并完成简单的PIC任务(例如定义内存或编写宏)的说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接