汇编语言代码书写规范
每个汇编程序通常分为两个文件。一个文件用于保存程序的声明(declaration ),称为头文件。另一个文件用于保存程序的实现(implementation ),称为定义(definition )文件。头文件以“.h ”为后缀,定义文件以“.asm ”为后缀, 宏定义文件以“.mac ” 为后缀。
1.1 版权和版本的声明
版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有:
(1)版权信息。
(2)文件名称,标识符,摘要。
(3)版本历史信息。
示例1-1 版权和版本的声明
1.2 头文件的结构
头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明(参见示例1-1)。
(2)常量和变量的定义。
(3)宏定义(参见示例1-2)。
假设头文件名称为di.h ,头文件的结构参见示例1-3。
【规则1-2-1】用 .include di.h 头文件(编译器将从用户的工作目录开始搜索)。
【规则1-2-2】每个标号定义时, 要加空格时都用”Tab ”键, 定义符和定义值要整齐, 每个定义符后都在同一列加上”; ”(分号), 分号后加上每个标号的注释(参见示例1-3)。
第1章 文件结构
示例1-2 宏定义文件的结构
示例1-3 汇编头文件的结构
1.3 定义文件的结构
1.3.1定义文件有三部分内容:
(1)定义文件开头处的版权和版本声明(参见示例1-1)。
(2)对一些头文件的引用。
(3)程序的实现体(包括数据和代码)。
假设定义文件的名称为di.asm ,定义文件的结构参见示例1-4。
示例1-4 汇编定义文件的结构
1.3.2函数(参见示例1-5)
【规则1-3-1】原则上函数内不允许对绝对地址进行操作。
【建议1-3-1】函数内不要分配大的数组,占用堆栈空间。
【建议1-3-2】函数内尽量不要使用数字和字符等常量,而要用标识符常量,便于以后的修改。
【建议1-3-3】每个函数体不得超过150行(不含注释)
示例1-5 汇编语言的函数结构
1.4、编译连接环境
【规则1-4-1】在项目文档和项目源代码的ReadMe 文件,说明编译连接环境和方法,特别是 Dos 行命令下相关的 Path ,及编译连接参数。(参见示例1-6)
示例1-6 ReadMe.txt
第2章 程序的版式
版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。因此,可以把程序的版式比喻为“书法”。
2.1 对齐
【规则2-1-1】 要求编辑中对齐使用 Tab ,而编辑软件中将Tab 设为 8 个字符位置,且跳格不用空格代替。
【规则2-1-2】每行程序宽度为6个Tab 宽, 即8*6=48个字符, 第49列为分号, 分号后写注释。
【规则2-1-3】标号从行首(即第1列) 开始输入, 标号后不直接跟汇编指令,
换行后加一
个Tab 键后再输入汇编助记符, 输完助记符后再加一个Tab 键才输操作数. (参见示例2-1)。
示例2-1 对齐
2.2 注释
汇编语言的注释符为”; ”。注释通常用于:
(1)版本、版权声明;
(2)函数接口说明;
(3)重要的代码行或段落提示。
【规则2-1-1】使用中文做注释。
【规则2-1-2】汇编语言是低级语言, 原则上要求每行都加上注释。最少注释率不得低于50%。
【规则2-1-3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
【规则2-1-4】注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。
【规则2-1-5】尽量避免在注释中使用缩写,特别是不常用缩写。
【规则2-1-6】注释的位置应与被描述的汇编指令相邻,汇编语言一般把注释放在指令的右方。(参见示例1-4)。
第3章 命名规则
3.1 共性规则
【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。
标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue 写成NowValue 。
【规则3-1-2】单词连写时, 用第一个字母大写来区分。如: CurrentValue。
3.2 常量的命名约定
【约定3-2-1】常量全用大写的字母,用下划线分割单词。
例如:
MAX equ 100;
MAX_LENGTH equ 100;
3.3 变量的命名约定
【约定3-3-1】全局变量名的约定:
g_模块名+变量标识名
如:
g_card_CardNumber ds 1 ; 名片总数量 g_ sys_KeyCode ds 1 ; 系统变量, 保存键码
【约定3-3-2】模块变量名的约定:
m_模块名+变量标识名
如:
m_ec_WordOrder ds 2 ; 英汉单词序号
m_ec_DispBuffColumn ds 1 ; 显示缓冲区列计数 m_ec_DispBuffLine ds 1 ; 显示缓冲区行计数
3.4 函数的命名约定
【约定3-4-1】函数的命名约定:
fun_+模块标识+_+函数标识名;
如:
fun_sys_PutChar: ; 系统程序, 显示一个字符 fun_ec_Unpress: ; 英汉解压子程序
【约定3-4-2】函数体内跳转标号的命名约定:
函数名内单词第一个字母的集合+_+跳转标识名 如: 示例3-1
3.5 数据标识的命名约定
d_模块名+数据标识名
如:
d_ec_WordLeftTree:
d_ec_WordRightTree: ; 英汉单词左树 ; 英汉单词右树
汇编语言代码书写规范
每个汇编程序通常分为两个文件。一个文件用于保存程序的声明(declaration ),称为头文件。另一个文件用于保存程序的实现(implementation ),称为定义(definition )文件。头文件以“.h ”为后缀,定义文件以“.asm ”为后缀, 宏定义文件以“.mac ” 为后缀。
1.1 版权和版本的声明
版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有:
(1)版权信息。
(2)文件名称,标识符,摘要。
(3)版本历史信息。
示例1-1 版权和版本的声明
1.2 头文件的结构
头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明(参见示例1-1)。
(2)常量和变量的定义。
(3)宏定义(参见示例1-2)。
假设头文件名称为di.h ,头文件的结构参见示例1-3。
【规则1-2-1】用 .include di.h 头文件(编译器将从用户的工作目录开始搜索)。
【规则1-2-2】每个标号定义时, 要加空格时都用”Tab ”键, 定义符和定义值要整齐, 每个定义符后都在同一列加上”; ”(分号), 分号后加上每个标号的注释(参见示例1-3)。
第1章 文件结构
示例1-2 宏定义文件的结构
示例1-3 汇编头文件的结构
1.3 定义文件的结构
1.3.1定义文件有三部分内容:
(1)定义文件开头处的版权和版本声明(参见示例1-1)。
(2)对一些头文件的引用。
(3)程序的实现体(包括数据和代码)。
假设定义文件的名称为di.asm ,定义文件的结构参见示例1-4。
示例1-4 汇编定义文件的结构
1.3.2函数(参见示例1-5)
【规则1-3-1】原则上函数内不允许对绝对地址进行操作。
【建议1-3-1】函数内不要分配大的数组,占用堆栈空间。
【建议1-3-2】函数内尽量不要使用数字和字符等常量,而要用标识符常量,便于以后的修改。
【建议1-3-3】每个函数体不得超过150行(不含注释)
示例1-5 汇编语言的函数结构
1.4、编译连接环境
【规则1-4-1】在项目文档和项目源代码的ReadMe 文件,说明编译连接环境和方法,特别是 Dos 行命令下相关的 Path ,及编译连接参数。(参见示例1-6)
示例1-6 ReadMe.txt
第2章 程序的版式
版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。因此,可以把程序的版式比喻为“书法”。
2.1 对齐
【规则2-1-1】 要求编辑中对齐使用 Tab ,而编辑软件中将Tab 设为 8 个字符位置,且跳格不用空格代替。
【规则2-1-2】每行程序宽度为6个Tab 宽, 即8*6=48个字符, 第49列为分号, 分号后写注释。
【规则2-1-3】标号从行首(即第1列) 开始输入, 标号后不直接跟汇编指令,
换行后加一
个Tab 键后再输入汇编助记符, 输完助记符后再加一个Tab 键才输操作数. (参见示例2-1)。
示例2-1 对齐
2.2 注释
汇编语言的注释符为”; ”。注释通常用于:
(1)版本、版权声明;
(2)函数接口说明;
(3)重要的代码行或段落提示。
【规则2-1-1】使用中文做注释。
【规则2-1-2】汇编语言是低级语言, 原则上要求每行都加上注释。最少注释率不得低于50%。
【规则2-1-3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
【规则2-1-4】注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。
【规则2-1-5】尽量避免在注释中使用缩写,特别是不常用缩写。
【规则2-1-6】注释的位置应与被描述的汇编指令相邻,汇编语言一般把注释放在指令的右方。(参见示例1-4)。
第3章 命名规则
3.1 共性规则
【规则3-1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。
标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue 写成NowValue 。
【规则3-1-2】单词连写时, 用第一个字母大写来区分。如: CurrentValue。
3.2 常量的命名约定
【约定3-2-1】常量全用大写的字母,用下划线分割单词。
例如:
MAX equ 100;
MAX_LENGTH equ 100;
3.3 变量的命名约定
【约定3-3-1】全局变量名的约定:
g_模块名+变量标识名
如:
g_card_CardNumber ds 1 ; 名片总数量 g_ sys_KeyCode ds 1 ; 系统变量, 保存键码
【约定3-3-2】模块变量名的约定:
m_模块名+变量标识名
如:
m_ec_WordOrder ds 2 ; 英汉单词序号
m_ec_DispBuffColumn ds 1 ; 显示缓冲区列计数 m_ec_DispBuffLine ds 1 ; 显示缓冲区行计数
3.4 函数的命名约定
【约定3-4-1】函数的命名约定:
fun_+模块标识+_+函数标识名;
如:
fun_sys_PutChar: ; 系统程序, 显示一个字符 fun_ec_Unpress: ; 英汉解压子程序
【约定3-4-2】函数体内跳转标号的命名约定:
函数名内单词第一个字母的集合+_+跳转标识名 如: 示例3-1
3.5 数据标识的命名约定
d_模块名+数据标识名
如:
d_ec_WordLeftTree:
d_ec_WordRightTree: ; 英汉单词左树 ; 英汉单词右树