汇编语言代码书写规范
来源:互联网 发布:淘宝车内饰品 编辑:程序博客网 时间:2024/05/18 02:14
汇编语言代码书写规范
第1章 文件结构
每个汇编程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。头文件以“.h”为后缀,定义文件以“.asm”为后缀,宏定义文件以“.mac”为后缀。
1.1版权和版本的声明
版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有:
(1)版权信息。
(2)文件名称,标识符,摘要。
(3)版本历史信息。
;*********************************************************************;
;Copyright (c)2002 ,广东步步高教育电子分公司 ;
;All rights reserved. ;
; ;
;文件名称:di.asm ;
;文件标识:英汉词典程序文件 ;
;修改历史: ;
; 版本 日期 作者 改动内容和原因 ;
; ------ ------- --------- ----------------------------------- ;
; 1.0 1999.12.1 黄福广 BA757英汉词典完成 ;
; 2.0 2002.5.1 杨文容 BA777英汉词典移植完成 ;
;********************************************************************;
示例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,此处省略。 )
;------------------------------------------------------------------;
; 常量定义 ;
;------------------------------------------------------------------;
;----------------------------------------------------------;
;功能 :设置LCD的显示页面 ;
;入口 :页面值 ;
;出口 :无 ;
;修改历史: ;
;版本 日期 作者 改动内容和原因 ;
; 1.0 2002.5.1 XXXX BA757英汉词典用 ;
;----------------------------------------------------------;
LCDSETPAGE .MACRO PAGEPARA ;
lda PAGEPARA ;读参数
and #%00001111 ;高4位清0
ora #%10110000 ;重设高4位
LCDWDAT ;向LCD写数据
.ENDM ;
;-----------------------------------------------------------------;
(版权和版本声明见示例1-1,此处省略。 )
;------------------------------------------------------------------;
; 常量定义 ;
;------------------------------------------------------------------;
FIRST_HZ_CODEH equ $85 ;代码最小的汉字码(汉英一级索引)
FIRST_HZ_CODEL equ $de ;
LAST_HZ_CODEH equ $fc ;代码最大的汉字码(汉英一级索引)
LAST_HZ_CODEL equ $a0 ;
;------------------------------------------------------------------;
; 变量定义 ;
;------------------------------------------------------------------;
m_ec_WordCompressOffSetL ds 1 ; 压缩数据数据地址低位
m_ec_WordCompressOffSetH ds 1 ; 压缩数据数据地址高位
m_ec_CompressData ds 1 ;根据偏移取的压缩数据
m_ec_BitInCompressOffSet ds 1 ;在压缩区某个字节的位偏移
1.3定义文件的结构
1.3.1定义文件有三部分内容:
(1)定义文件开头处的版权和版本声明(参见示例1-1)。
(2)对一些头文件的引用。
(3)程序的实现体(包括数据和代码)。
假设定义文件的名称为di.asm,定义文件的结构参见示例1-4。
(版权和版本声明见示例1-1,此处省略。)
.include di.h ;引用头文件
… ;
;------------------------------------------------------------;
;(函数使用说明) ;
;------------------------------------------------------------;
fun_ec_EnToCh: ;
… ;
;------------------------------------------------------------;
示例1-4汇编定义文件的结构
1.3.2函数(参见示例1-5)
【规则1-3-1】原则上函数内不允许对绝对地址进行操作。
【建议1-3-1】函数内不要分配大的数组,占用堆栈空间。
【建议1-3-2】函数内尽量不要使用数字和字符等常量,而要用标识符常量,便于以后的修改。
【建议1-3-3】每个函数体不得超过150行(不含注释)
;----------------------------------------------------------;
;功能 :把保存在单词缓冲区的单词送到 ;
; 显示缓冲区 ;
;入口 :无 ;
;出口 :无 ;
;堆栈使用:无 ;
;全局变量:m_ec_BuffLine,m_ec_BuffColumn ;
; 两变量为显示 缓冲区的行列计数器;
;修改历史: ;
;版本 日期 作者 改动内容和原因 ;
; 1.0 2002.5.1 杨文容 BA777英汉词典用 ;
;----------------------------------------------------------;
fun_ec_LoadWord: ;
ldy #0 ;
lw_loop: ;
lda m_ec_SaveWordBuff,y ;读一个字节
beq lw_next ; =0?
sta m_ec_TempBuff,y ;不等于0,保存到TempBuff
iny ;
jmp lw_loop ;跳转回去再读下一字节
lw_next: ;savewordbuff已读完
sta m_ec_TempBuff,y ; (A)=0,保存到TempBuff末
jsr fun_ec_TempToDispBuff ;调用将TempBuff数据转移
;到DispBuff中去的子函数
lda m_ec_BuffColumn ;显示缓冲区列计数器为0吗?
beq lw_end ;为0,跳转结束
lda #0 ;
sta m_ec_BuffColumn ;
inc m_ec_BuffLine ;行计数器加1
lw_end: ;
rts ;
;----------------------------------------------------------;
1.4、编译连接环境
【规则1-4-1】在项目文档和项目源代码的ReadMe文件,说明编译连接环境和方法,特别是 Dos行命令下相关的 Path ,及编译连接参数。(参见示例1-6)
一、编译:
X6502 [-q] 输入文件名 [输出文件名] [选项]
或
X6502 [-q] [选项]输入文件名 [输出文件名]
[q]—静态模式:编译程序只在屏幕上输出错误和行号。
输入文件名:如果忽略文件扩展名,那缺省的是 .asm
X6502 编译源文件.asm,输出目标文件.obj
输出文件名:如果忽略文件名,那缺省的跟输入文件名一样,扩展名是 .obj
X6502 编译源文件.asm,输出目标文件.obj
-t :终端,编译(.asm文件),创建(.obj文件),向终端输出程序清单
-p :打印机,编译(.asm文件),创建(.obj文件),向打印机输出程序清单
-d :磁盘,编译(.asm文件),创建(.obj文件),向磁盘文件(.lst)输出程序清单
二、连接:
link [-q] –c file1 [-loffset] [file2[...]] [-ofile] [-Lfile][...] [-optiones]
-q:主要参数。该参数把连接器置为情态模式,即只向屏幕输出连接错误的信息。
-c:领先于第一个输入文件,它置连接器为命令行的模式。
File1:必须要求的。至少必须指定一个输入文件
-l:(小写l)...
file2:第二个输入文件。可以同时连接几个文件,跟第一个文件的句法结构、段偏移量一样。
-o:第一个输出文件名。如果忽略输出文件名,那连接器创建缺省的跟第一个输入文件同名的文件。扩展名由输出文件格式决定。
-L:(大写L)把库文件包含进来。不必指定扩展名,因为连接器自动认为是(.lib)
最多可以包含50个库文件。
-:最后的负号(-)是列表选项的前缀。(不能有空格分开),如果命令行忽略选项,那连接器会有提示。
第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)。
fun_ec_LoadWord: ;
ldy #0 ; (加注释)
1个Tab 1个Tab 4个Tab
示例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
fun_sys_PutChar: ;
... ;
pc_loop: ;
... ;
jmp pc_loop ;循环跳转
... ;
pc_end: ;
rts ;
;------------------------------------------;
3.5数据标识的命名约定
d_模块名+数据标识名
如:
d_ec_WordLeftTree: ;英汉单词左树
d_ec_WordRightTree: ;英汉单词右树
- 汇编语言代码书写规范
- java代码书写规范
- Java代码书写规范
- Verilog 代码 书写规范
- 代码书写规范
- iOS书写代码规范
- java代码书写规范
- android代码书写规范
- iOS代码书写规范
- iOS代码书写规范
- android代码书写规范
- C++ 代码书写规范
- html代码书写规范
- java 代码书写规范
- 伪代码书写规范
- Android代码书写规范
- html代码书写规范
- 代码书写规范
- c sockopt选项
- C++学习笔记(一)--基础知识sizeof用法 .
- Java 开发:PreparedStatement的用法
- 从http协议研究json返回在IE中下载
- paip.银行卡号的发卡行归属地查询
- 汇编语言代码书写规范
- Makefile教程(一)(转)
- Linux网络协议栈(一)——Socket入门(1)
- c结构体字节对齐
- java命令
- 干货--如何利用微博来写原创文章
- unity 2.0 interception 学习1
- 堆和栈
- C# 任意类型数据转JSON格式