汇编语言代码书写规范

 汇编语言代码书写规范

                         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-2宏定义文件的结构

 

 

(版权和版本声明见示例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.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-5汇编语言的函数结构

 

 

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个库文件。

-:最后的负号(-)是列表选项的前缀。(不能有空格分开),如果命令行忽略选项,那连接器会有提示。

                     示例1-6 ReadMe.txt

 

2 程序的版式

 

版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。因此,可以把程序的版式比喻为“书法”。

 

2.1对齐

 【规则2-1-1 要求编辑中对齐使用 Tab,而编辑软件中将Tab设为 8 个字符位置,且跳格不用空格代替。

 【规则2-1-2】每行程序宽度为6Tab,8*6=48个字符,49列为分号,分号后写注释

 【规则2-1-3】标号从行首(即第1)开始输入,标号后不直接跟汇编指令,换行后加一个Tab键后再输入汇编助记符,输完助记符后再加一个Tab键才输操作数.(参见示例2-1)。

 

fun_ec_LoadWord:                                               ;

               ldy        #0                                         ; (加注释)

 

 

1Tab  1Tab        4Tab  

 


   示例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-1 函数体内跳转标号的命名约定

 

3.5数据标识的命名约定

      

                   d_模块名+数据标识名

:

d_ec_WordLeftTree:                                                                    ;英汉单词左树

d_ec_WordRightTree:                                                                  ;英汉单词右树

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值