第三节汇编程序输入和输出文件的格式

第三节 汇编程序输入和输出文件的格式

一、源文件

源文件是由文字编缉器编写的由汇编指令和MASM51伪指令构成的文本文件。源文件一般应以.ASM为扩展名。

二、源文件的格式

以回车作为结束的一行称为语句行。每一语句行长度应少于80个字符(即40个汉字)。每一个语句行对于汇编程序来说都是一条单独的命令行,它可以是一条汇编语言指令,也可以是一条注释,或是空白(即什么也不写),还可以是系统允许的伪指令。所有行必须按照INTEL标准格式书写即:

标号: 命令 参数 ;注释

即一行由四部份组成,各部份的顺序不能搞错,但可以根据需要缺省其中的一部份或几部份,甚至全部省去,即空白行。标号后面必须有‘:’,而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用‘,’分开,注释前必须用‘;’,也即‘;’后面的语句将不参与汇编,不生成代码,所以可以在‘;’引导的后面写任何字符,包括汉字。

标号是标志程序中某一行的符号名,标号的数值就是标号所在行代码的地址。在宏汇编MASM51中标号的长度不受限制,但标号中不能包含‘:’或其它的一些特殊符号,也不以用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用(如标号作转移地址),在命令后面出现时,必须舍去‘:’(如 LJMP START中的 START)。

每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文来说明行,使源程序读起来更方便。

命令及参数请参考有关单片机教材,其规定符合INTEL公司的51单片机汇编语言要求。这里必须注意:当采用十六进制数时,如果数值是以A,B,C,D,E,F开头的,则为了区分是数字还是字母,应当在这些数字前加'0',如FFH,应当写成0FFH,C0H应写成0C0H等。

注释用于对程序的说明,它以分号开始,以回车结束。源程序行可以只包含注释,注释只是被复制到列表文件中,不产生机器码。由于汇编程序不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于源程序的阅读。否则,时间一长,自编的程序也会搞不清表达的含义。典型的注释有如下几种:1.在一行的后面写,以说明这一行语句的用途;2.在一段子程序的前面写,以说明这一子程序的用途,由什么程序调用,入口参数,

出口值,占用资源等等情况;3.在整个源程序的最前面书写,以说明本程序的用途,资源的分配等情况。以下是一个例子:

;堆栈从5FH起

;01H单元,用作键盘扫描程序判断是否有键按下,有为'1',无为'0'

;38H单元,音量大小代码,初始为2

ORG 0000H

LJMP START

ORG 0003H ;外中断0处理程序

NOP

RET

START: ;初始化程序

MOV SP,5FH

.

.

;***********************************************

;以上初始化程序

;***********************************************

MAIN:

LCALL KEY

LJMP MAIN

;**********************************************

;以上主程序

;*******************************************

;***********************************************

;以下键盘程序,键值从0开始

;***************************************

KEY:

PUSH PSW ;将PSW推入堆栈

SETB RS0 ;选第一工作区

MOV SBUF,#00H

KEY_DISP:

.

.

.

POP PSW

RET

;*********************************************************

;以上键盘程序

;********************************************************

.

.

三、算术表达式和算术操作

在宏汇编中允许使用一个算术表达式的结果来作为一个参数使用,从而使编写源程序时更为灵活。算术表达式由参数与算术操作符组成,其中参数可以是数值类型,符号类型或字符串类型。而算术表达式的最后运算结果即为该算术表达式所代表的参数。它是一个十六位的二进制数。在可以用数值的任何地方,都可以使用表达式,例如直接值,转移和子程序调用的址址部分。汇编命令内表达式由汇编解释程序在汇编时计算,改变表达式值的唯一方法就是修改参数值。

算术表达式的最简单的形式就是只有一个参数,这个参数的值也就是它的结果。一般形式为参数与算术操作符的组合,它们之间用某些限定符予以隔离,例如空格、制表符等。 在宏汇编中,所有的参数值均为整数,以十六位二进制形式存放,因此其表示范围为0~65535。对于负数则以其补码来表示。下面给出一个例子介绍宏汇编中允许使用的各种算术操作符,请大家仔细阅读。

MOV A,#3+5 ;MOV A,#8,加法,前面加'#'号代表是立即数

MOV A,3+5 ;MOV A,8 ,加法,未加'#'号代表3+5是地址

MOV A,5-3 ;MOV A,2 ,减法

MOV A,3-5 ;MOV A,0FEH,减法

MOV A,#5-3 ;MOV A,#2,减法

MOV A,#5*3 ;MOV A,#15,乘法

MOV A,#6/3 ;MOV A,#2 ,除法

MOV A,#6 MOD 3 ;MOV A,#0 ,取模运算

MOV A,01010010 SHR 3 ;MOV A,E3H ,向右移位,01010010向右移3位

MOV A,#21 SHL 5 ;MOV A,#0A0H ,向左移位,21向左移5位

MOV A, # NOT 0A5H ;MOV A,#5AH ,取0A5H的反

MOV A,#10101111 OR 11110000 ;MOV A,#57H,求两数之或

MOV A,#10101010 AND 00001111 ;MOV A,#52H,求两数之与

MOV A,#4B2H XOR 3197 ;MOV A,#0CFH,求两数之异或

MOV A,#(HIGH 4567H) ;MOV A,#45H ,取4567H的高两位

MOV A,LOW 4567H ;MOV A,67H ,取4567H的低两位

END

四、机器码代码文件

机器码代码文件由宏汇编产生,为了与一般的HEX文件相区别,通常由宏汇编产生的机器码代码文件被称为INTEL文件。该文件是由能够在处理器上运行的机器指令码组成。它可被用来传送到仿真器或用户系统中进行调试或运行。

INTEL HEX文件由若干行组成,每行表示一个记录,它的每一行都是可以打印的ASCII字符,用两个字符,用两个字符来表示一个字节的值。每一行的格式如下: :CC aaaa tt dd.......dd ss冒号":"为每一行的起始符,随后为一组数据在其中。CC 为由两个字节表示的十六进制数,它的范围为00H~10H,它表示该记录包含的机器代码的字节数。 aaaa为用ASCII码表示的四个十六进制数,它是该记录第一个数据字节所驻存的存储空间的绝对地址。

tt是表示该记录数据类型的一个代码,若该记录为数据,则tt为0,否则是其它值。dd表示代码的实际字节值,每一个字节值用两个字符表示。(将会有cc个dd数据)ss是一个和校验,它是从计数器到最后一个数据字节的所有字节值累加和的相所数。

当ss与记录中所有的字相加时,其结果应该为零,若为其它值则表明该记录有错。

五、列表文件

由汇编程序生成的第二个文件是列表文件,它以LST为扩展名,也是一个ASCII码字符文件,回而可以被打印显示,也可以作为程序的文档。

列表文件是分页的,每页的长度由缺省值决定。也可以通过伪指令&PAGE来决定。每页以一起始行开始,用来指出汇编的类型类型和版本,以及页号。

当用户使用&TITLE伪指令时,该行后面紧接着一个标题行,当用户使用SUBTITLE指令时,后再接一个子标题行。例如:The Cybernetic Micro Sysystems 8051

FamilyAssembler,Version 3.03 Page 109-10-83。

每页的其它部分由用户程序、汇编所产生的绝对地址和机器代码组成。通常一个行的第一个字符是一个空格,若出现"I"则指出这一行是个外部来的文件。而"+"则表明是一个宏扩展行。后面接着的四个字符通常是当前语句的程序地址,以十六进制形式给出,END指令前的四个字符表示该指令的起始地址参数值。后面有一个空格。

程序计数器后是10个字符的空间,它通常包含该行汇编出的目标代码的十六进制值。显示出的字节值的数目依赖于每条语句所要求的字节数目,这里,每个字节值用两字符表示。对等价指令,这个域还包含一个等号(=)。不生成目标代码的源程序行中该域全为空格。 每行的前16个字符后面的剩余部分包含着台的源程序文件。因而列表文件的每一行长度为源程序的长度再加上16列字符。如果是用80列宽的打印纸则源程序行的长度应小于64列,否则打印设备在打印时反长行切断,或则分成两行。

第三节 汇编程序输入和输出文件的格式

一、源文件

源文件是由文字编缉器编写的由汇编指令和MASM51伪指令构成的文本文件。源文件一般应以.ASM为扩展名。

二、源文件的格式

以回车作为结束的一行称为语句行。每一语句行长度应少于80个字符(即40个汉字)。每一个语句行对于汇编程序来说都是一条单独的命令行,它可以是一条汇编语言指令,也可以是一条注释,或是空白(即什么也不写),还可以是系统允许的伪指令。所有行必须按照INTEL标准格式书写即:

标号: 命令 参数 ;注释

即一行由四部份组成,各部份的顺序不能搞错,但可以根据需要缺省其中的一部份或几部份,甚至全部省去,即空白行。标号后面必须有‘:’,而命令语句和参数之间必须用空格分开,如果命令有多个参数,则参数与参数之间必须用‘,’分开,注释前必须用‘;’,也即‘;’后面的语句将不参与汇编,不生成代码,所以可以在‘;’引导的后面写任何字符,包括汉字。

标号是标志程序中某一行的符号名,标号的数值就是标号所在行代码的地址。在宏汇编MASM51中标号的长度不受限制,但标号中不能包含‘:’或其它的一些特殊符号,也不以用汉字,可以用数字作标号,但必须用字母开头。当标号作参数用(如标号作转移地址),在命令后面出现时,必须舍去‘:’(如 LJMP START中的 START)。

每行只能有一个标号,一个标号只能用在一处,如果有两行用了同一个标号,则汇编时就会出错。由于标号的长度没有限制,可以用有意义的英文来说明行,使源程序读起来更方便。

命令及参数请参考有关单片机教材,其规定符合INTEL公司的51单片机汇编语言要求。这里必须注意:当采用十六进制数时,如果数值是以A,B,C,D,E,F开头的,则为了区分是数字还是字母,应当在这些数字前加'0',如FFH,应当写成0FFH,C0H应写成0C0H等。

注释用于对程序的说明,它以分号开始,以回车结束。源程序行可以只包含注释,注释只是被复制到列表文件中,不产生机器码。由于汇编程序不直观,所以在编写源程序时,应当养成多写注释的习惯,这样有助于源程序的阅读。否则,时间一长,自编的程序也会搞不清表达的含义。典型的注释有如下几种:1.在一行的后面写,以说明这一行语句的用途;2.在一段子程序的前面写,以说明这一子程序的用途,由什么程序调用,入口参数,

出口值,占用资源等等情况;3.在整个源程序的最前面书写,以说明本程序的用途,资源的分配等情况。以下是一个例子:

;堆栈从5FH起

;01H单元,用作键盘扫描程序判断是否有键按下,有为'1',无为'0'

;38H单元,音量大小代码,初始为2

ORG 0000H

LJMP START

ORG 0003H ;外中断0处理程序

NOP

RET

START: ;初始化程序

MOV SP,5FH

.

.

;***********************************************

;以上初始化程序

;***********************************************

MAIN:

LCALL KEY

LJMP MAIN

;**********************************************

;以上主程序

;*******************************************

;***********************************************

;以下键盘程序,键值从0开始

;***************************************

KEY:

PUSH PSW ;将PSW推入堆栈

SETB RS0 ;选第一工作区

MOV SBUF,#00H

KEY_DISP:

.

.

.

POP PSW

RET

;*********************************************************

;以上键盘程序

;********************************************************

.

.

三、算术表达式和算术操作

在宏汇编中允许使用一个算术表达式的结果来作为一个参数使用,从而使编写源程序时更为灵活。算术表达式由参数与算术操作符组成,其中参数可以是数值类型,符号类型或字符串类型。而算术表达式的最后运算结果即为该算术表达式所代表的参数。它是一个十六位的二进制数。在可以用数值的任何地方,都可以使用表达式,例如直接值,转移和子程序调用的址址部分。汇编命令内表达式由汇编解释程序在汇编时计算,改变表达式值的唯一方法就是修改参数值。

算术表达式的最简单的形式就是只有一个参数,这个参数的值也就是它的结果。一般形式为参数与算术操作符的组合,它们之间用某些限定符予以隔离,例如空格、制表符等。 在宏汇编中,所有的参数值均为整数,以十六位二进制形式存放,因此其表示范围为0~65535。对于负数则以其补码来表示。下面给出一个例子介绍宏汇编中允许使用的各种算术操作符,请大家仔细阅读。

MOV A,#3+5 ;MOV A,#8,加法,前面加'#'号代表是立即数

MOV A,3+5 ;MOV A,8 ,加法,未加'#'号代表3+5是地址

MOV A,5-3 ;MOV A,2 ,减法

MOV A,3-5 ;MOV A,0FEH,减法

MOV A,#5-3 ;MOV A,#2,减法

MOV A,#5*3 ;MOV A,#15,乘法

MOV A,#6/3 ;MOV A,#2 ,除法

MOV A,#6 MOD 3 ;MOV A,#0 ,取模运算

MOV A,01010010 SHR 3 ;MOV A,E3H ,向右移位,01010010向右移3位

MOV A,#21 SHL 5 ;MOV A,#0A0H ,向左移位,21向左移5位

MOV A, # NOT 0A5H ;MOV A,#5AH ,取0A5H的反

MOV A,#10101111 OR 11110000 ;MOV A,#57H,求两数之或

MOV A,#10101010 AND 00001111 ;MOV A,#52H,求两数之与

MOV A,#4B2H XOR 3197 ;MOV A,#0CFH,求两数之异或

MOV A,#(HIGH 4567H) ;MOV A,#45H ,取4567H的高两位

MOV A,LOW 4567H ;MOV A,67H ,取4567H的低两位

END

四、机器码代码文件

机器码代码文件由宏汇编产生,为了与一般的HEX文件相区别,通常由宏汇编产生的机器码代码文件被称为INTEL文件。该文件是由能够在处理器上运行的机器指令码组成。它可被用来传送到仿真器或用户系统中进行调试或运行。

INTEL HEX文件由若干行组成,每行表示一个记录,它的每一行都是可以打印的ASCII字符,用两个字符,用两个字符来表示一个字节的值。每一行的格式如下: :CC aaaa tt dd.......dd ss冒号":"为每一行的起始符,随后为一组数据在其中。CC 为由两个字节表示的十六进制数,它的范围为00H~10H,它表示该记录包含的机器代码的字节数。 aaaa为用ASCII码表示的四个十六进制数,它是该记录第一个数据字节所驻存的存储空间的绝对地址。

tt是表示该记录数据类型的一个代码,若该记录为数据,则tt为0,否则是其它值。dd表示代码的实际字节值,每一个字节值用两个字符表示。(将会有cc个dd数据)ss是一个和校验,它是从计数器到最后一个数据字节的所有字节值累加和的相所数。

当ss与记录中所有的字相加时,其结果应该为零,若为其它值则表明该记录有错。

五、列表文件

由汇编程序生成的第二个文件是列表文件,它以LST为扩展名,也是一个ASCII码字符文件,回而可以被打印显示,也可以作为程序的文档。

列表文件是分页的,每页的长度由缺省值决定。也可以通过伪指令&PAGE来决定。每页以一起始行开始,用来指出汇编的类型类型和版本,以及页号。

当用户使用&TITLE伪指令时,该行后面紧接着一个标题行,当用户使用SUBTITLE指令时,后再接一个子标题行。例如:The Cybernetic Micro Sysystems 8051

FamilyAssembler,Version 3.03 Page 109-10-83。

每页的其它部分由用户程序、汇编所产生的绝对地址和机器代码组成。通常一个行的第一个字符是一个空格,若出现"I"则指出这一行是个外部来的文件。而"+"则表明是一个宏扩展行。后面接着的四个字符通常是当前语句的程序地址,以十六进制形式给出,END指令前的四个字符表示该指令的起始地址参数值。后面有一个空格。

程序计数器后是10个字符的空间,它通常包含该行汇编出的目标代码的十六进制值。显示出的字节值的数目依赖于每条语句所要求的字节数目,这里,每个字节值用两字符表示。对等价指令,这个域还包含一个等号(=)。不生成目标代码的源程序行中该域全为空格。 每行的前16个字符后面的剩余部分包含着台的源程序文件。因而列表文件的每一行长度为源程序的长度再加上16列字符。如果是用80列宽的打印纸则源程序行的长度应小于64列,否则打印设备在打印时反长行切断,或则分成两行。


相关内容

  • 合肥工业大学编译原理课程设计
  • 关于<编译原理>课程设计的有关说明 <编译原理>是计算机专业的一门重要的专业课程,其中包含大量软件设计思想.大家通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义.大家在进行课程设计时, ...

  • xx科技股份有限公司软件项目管理制度(DOC 14)
  • **科技股份有限公司 软件项目管理制度 目录 项目开发计划 .................................. 2 软件需求说明书 ................................ 4 详细设计说明书 ................................ ...

  • 汇编语言第六章 输入输出和WIN32编程
  • 第六章 输入/输出和中断 和WIN32编程 前面已经讲过有关输入/输出的问题,主要是用DOS 中断调用INT 21H来完成键盘输入以及屏幕显示.对于计算机来说,仅有这种输入/输出还不够,因为DOS 的中断调用无法实现对其它外设的控制.关于如何用汇编程序实现主机与外设之间的信息交换,将是本章的主要内容 ...

  • 用户操作手册_模板
  • 编写说明 类别:项目文档 密级: 撰稿人: 修改人: 存放位置: 编辑软件: 版本信息: 目录 1 引言 ................................................................................................. ...

  • 功能性测试方法
  • 目 录 功能性测试的测试方法一............................................................................................ 2 1.1软件故障模型............................... ...

  • 大一计算机基础考试基本知识
  • 一.基础知识 1. 计算机的概念.发展.特点.分类及其应用领域. 计算机系统的配置及主要技术指标. 2. 数制的概念,二.八.十.十六进制整数之间的转换. 3. 计算机信息的表示:数.字符的编码包括西文字符与ASCII 码和汉字及其编码(外码,内码,汉字库,字模及点阵).数据的存储单位(位.字节.字 ...

  • 数据结构课程实习大纲-2015
  • <数据结构与算法>课程设计大纲 (一)课程设计教学目的及基本要求 1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力: 2.初步掌握软件开发过程的问题分析.系统设计.程序编码.测试等基本方法和技能: 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力: 4.训 ...

  • 集成电路测试原理和向量生成方法分析
  • 摘 要: 测试向量生成是集成电路测试的一个重要环节.在此从集成电路基本测试原理出发,介绍了一种ATE测试向量生成方法.通过建立器件模型和测试平台,在仿真验证后,按照ATE向量格式,直接生成ATE向量.以一种实际的双向总线驱动电路74ALVC164245为例,验证了此方法的可行性,并最终得到所需的向量 ...

  • 全国计算机等级考试大纲
  • 全国计算机等级考试大纲 全国计算机等级考试一级MS-Office 考试大纲(2009年版) 基本要求 1.具有使用微型计算机的基础知识(包括计算机病毒的防治常识). 2.了解微型计算机系统的组成和各组成部分的功能. 3.了解操作系统的基本功能和作用,掌握Windows 的基本操作和应用. 4.了解文 ...

  • 软件工程文档编写指南
  • 软件文档编写指南封面格式: 封面格式:文档编号 版 本 号文档名称: 项目名称: 项目负责人:编写 校对 审核 批准 开发单位年 年 年 年月 月 月 月日 日 日 日系统规约说明书( 系统规约说明书(System Specification) )一.引言 A. 文档的范围和目的 B. 概述 1.目 ...