理解系统的CPU体系
学习系统CPU文档。深入研究特别是指令和功能,比如硬件回路,位操作,缓冲转移,条件性执行,循环跳跃指令,以及非通用的体系操作。
查看地址模型。确认你一定知道ALU标志(零,进位,溢出等)以及它们如何被CPU体系所影响。
查看CPU是否包含特别的影响指令工作的模型。Intel x86的32位体系的实时受保护模式可以更改CPU的操作。其他体系也包含影响算法或者地址模型的特别模式。
理解汇编语言的语法
在汇编语言中很少有一致性,所以你必须学会如何定义基本的东西,如标签,数字,字符串,变量,以及注解。
查看你的汇编语言如何允许你将代码分成几个分隔的逻辑部分,这样就可以使用linker/loader将它们放置在CPU内存的不同区域。
始终如一的使用寄存器和标记
错误的出现一般都是在寄存器发生意外崩溃的时候。例如,一个函数可以损坏使用调用函数的寄存器的内容,或者改变一个使用中断服务程序的寄存器。
为了避免这些问题的产生,应该建立一些协定,这些协定包括:哪些寄存器用于传递参数和子程序的结果,哪些寄存器可以被子程序随意更改,哪些寄存器必须受到保护。
还有,可以考虑使用进位或零标记来显示从子程序中返回的状态,当一个错误出现时就执行一个额外的分支,这样的操作就显得很方便。
突出多数的语法
使用一个支持语法突出的文本编辑器。很多文本编辑器只支持一些流行的汇编语言的语法突出,比如微软的x86 MASM格式。
学会如何自定义语法突出,因为语法突出可以支持你所使用的CPU的汇编语言。以不同颜色显示保留的或特别的寄存器,就可以避免很多潜在的错误。
编写注解
作为一个通用的规则,在汇编代码中的每一行应该尽可能地编写注解。每一行汇编指令的右边的简短注解都以英文或伪代码来描述所要发生的事情。应该尽可能地避免注解的过于简单性。
使用宏和高级特性
汇编语言中的宏特性提供了用户自定义宏的支持,自定义宏能够减少编写重复代码的繁琐。一些简单的汇编代码也可以支持高级程序指令,比如“if”,“else”,以及“for”语句。使用这些特性有助于编写更易于维护的可靠的代码。
如果你没有一个宏的汇编程序,可以考虑在运行汇编程序之前通过一个标准的C程序来传递你的汇编程序代码,但你应该会发现不同的执行之间有一些微小的不同,比如处理空格。如果C处理程序不能正常运行,请试图运行GNU M4处理程序或者检查自己的处理程序。
遵循这些技巧有助于你在开发过程中建立更加可靠的正确的汇编代码。