汇编语言程序格式_第1页
汇编语言程序格式_第2页
汇编语言程序格式_第3页
汇编语言程序格式_第4页
汇编语言程序格式_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——汇编语言程序格式汇编语言程序格式

(1)建立并运行一个汇编语言程序有几个操作步骤?(2)指令和伪指令的区别是什么?

(3)在汇编语言程序中,段定义伪指令和数据定义伪指令起什么作用?(4)变量和标号的类型属性分别有哪几种?

(5)什么是表达式?表达式的优先级顺序是如何排列的?(6)汇编语言的上机过程是什么?

(7)汇编语言源程序一般由几个段组成?

(8)汇编程序和连接程序的输入、输出文件有哪些?它们的作用是什么?

了解编辑程序、汇编程序、连接程序的功能及其输入、输出文件的类型;了解汇编语言源程序的格式;

熟练把握并运用段定义伪指令和数据定义及存储器分派伪指令;

熟悉数值表达式的书写规范;上机编程时学会使用DEBUG调试程序。

介绍了汇编语言程序的完整段和简化段格式。在学习本内容时,可利用汇编语言程序的框架,通过上机来验证和理解各种指令和伪指令的格式、功能及作用。

段定义伪指令、数据定义及存储器分派伪指令及其它伪指令;数据类型属性和代码属性及其在编程中的应用;数值表达式的表示及其应用。

1汇编程序功能2伪指令

2.1段定义伪指令

2.1.1完整的段定义伪指令

2.2.2存储模型与简化段定义伪指令2.2.3段组定义伪指令

2.3程序开始和终止伪指令

2.4数据定义及存储器分派伪指令2.5表达式赋值伪指令

2.6地址计数器与对准伪指令2.7基数控制伪指令3汇编语言程序格式

3.1.汇编语言源程序语句的格式3.2表达式

3.3汇编语言源程序格式举例

4汇编语言程序的上机过程1建立汇编语言的工作环境2汇编语言程序上机运行过程3COM文件

第1页共21页

第一节汇编程序功能建立,运行汇编语言程序

汇编程序的主要功能:

1.检查源程序,给出出错信息。

2.产生目标文件(.obj)和列表文件(.lst)。3.展开宏指令。

其次节伪指令

汇编语言程序中的语句可以由指令、伪指令和宏指令组成。上一章我们介绍了8086指令系统中的6类指令,每一条指令都对应一种CPU操作。

伪指令又称为伪操作,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分派存储区、指示程序终止等功能。

宏指令是由用户依照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。宏指令将在第七章中介绍。

伪指令和指令的区别在于,每一条指令必需生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分派伪指令分派存储器空间外,其它伪指令不生成目标码。和各种指令一样,伪指令也是程序设计不可缺少的工具。下面介绍一些常用的伪指令。

第2页共21页

2.1处理器选择伪操作

.8086选择8086指令系统.286选择80286指令系统

.286P选择保护模式下的80286指令系统.386选择80386指令系统

.386P选择保护模式下的80386指令系统.486选择80486指令系统

.486P选择保护模式下的80486指令系统.586选择Pentium指令系统

.586P选择保护模式下的Pentium指令系统

2.2段定义伪指令

段定义伪指令是表示一个段开始和终止的命令,80x86有两种段定义的方式:完整段定义和简化段定义,分别使用不同的段定义伪指令来表示各种段。

1.完整段定义伪指令的格式如下:

由于ASSUME伪指令只是指定某个段分派给哪一个段寄放器,它并不能把段地址装入段寄放器中,所以在代码段中,还必需把段地址装入相应的段寄放器中:MOVAX,DATA_SEG1;数据段地址MOVDS,AX;存入DS寄放器MOVAX,DATA_SEG2;附加段地址MOVES,AX;存入ES寄放器

假使程序中还定义了堆栈段STACK_SEG,也需要把段地址装入SS中:MOVAX,STACK_SEG;堆栈段地址MOVSS,AX;存入ES寄放器

第3页共21页

注意,在程序中不需要用指令装入代码段的段地址,由于在程序初始化时,装入程序已将代码段的段地址装入CS寄放器了。而DS和ES是指向一个称为“PSP〞(程序段前缀)的一块区域的首地址。

为了对段定义作进一步地控制,SEGMENT伪指令还可以增加类型及属性的说明,其格式如下:

段名SEGMENT[定位类型][组合类型]['类别']…段名ENDS

[]中的内容是可选的,一般状况下,这些说明可以不用。但是,假使需要用连接程序把本程序与其他程序模块相连接时,就需要提供类型和属性的说明。

第4页共21页

·定位类型:说明段的起始边界值(物理地址)。

定位类型BYTEWORDDWORDPARAPAGE说明段可以从任何地址边界开始段从字边界开始,即段的起始边界值为偶数段从双字的边界开始,即段的起始边界值为4的倍数段从小段边界开始,即段的起始边界值为16(或10H)的倍数段从页边界开始,即段的起始边界值为256(或100H)的倍数注意:定位类型的缺省项是PARA,即在未指定定位类型的状况下,则连接程序默认为PARA。BYTE和WORD用于把其它段(寻常是数据段)连入一个段时使用;DWORD一般用于运行在80386及后继机型上的程序。

·组合类型:说明程序连接时的段组合方法。组合类型PRIVATEPUBLICCOMMONAT表达式MEMORYSTACK说明该段为私有段,连接时将不与其它模块中的同名段合并该段连接时将与其它同名段连接在一起,连接次序由连接命令指定该段在连接时与其它同名段有一致的起始地址,所以会产生覆盖段地址=表达式的值,其值必为16位但AT不能用来指定代码段与PUBLIC同义将多个同名堆栈段连接在一起,SP设置在第一个堆栈段的开始注意:组合类型的缺省项是PRIVATE。

例:在连接之前已定义两个目标模块如下:

模块1SSEGSEGMENTPARASTACK

DSEG1SEGMENTPARAPUBLIC'Data'DSEG2SEGMENTPARA

CSEGSEGMENTPARA'Code'

模块2DSEG1SEGMENTPARAPUBLIC'Data'DSEG2SEGMENTPARA

CSEGSEGMENTPARA'Code'

以上两个模块分别汇编后产生.OBJ文件,经连接程序连接后产生的.EXE模块如下:

模块1CSEGSEGMENTPARA'Code'模块2CSEGSEGMENTPARA'Code'

模块1+2DSEG1SEGMENTPARAPUBLIC'Data'

第5页共21页

DUP(duplicate)

DUP伪指令可以依照给定的次数来复制某个(某些)操作数,它可以避免屡屡键入同样一个数据。例如,把6个FFH存入相继字节中,可以用下面两种方法,显然用DUP的方法更简便些。

存入6字节的FFH

DATA20DB0FFH0FFH0FFH0FFH0FFH0FFH;DATA21DB6DUP(0FFH)

PTR属性操作符

PTR指定操作数的类型属性,它优先于隐含的类型属性。其格式为:

类型PTR变量[±常数表达式]

其中类型可以是BYTE、WORD、DWORD、FWORD、QWORD或TBYTE,这样变量的类型就可以指定了。如下例:(P131例14)

LABEL伪指令

LABEL可以使同一个变量具有不同的类型属性。其格式为:

其中变量的数据类型可以是BYTE,WORD,DWORD。

第11页共21页

2.5表达式赋值伪操作EQU

EQU是一个赋值伪操作(伪指令),它给一个数据标号赋于一个常数值,但这个常数不占用存储单元。当这个数据标号出现在程序中时,汇编程序即用它的常数值代替数据标号。EQU可以在数据段之外使用,甚至可用在代码段中间。

使用EQU操作的优点可从下面的例子中看出:COUNTEQU25

COUNTERDBCOUNTMOVAL,COUNT

=伪操作

赋值伪操作\的作用与EQU类似。它们之间的区别是,EQU伪操作中的标号名是不允许重复定义的,而=伪操作是允许重复定义的。

注意:在EQU语句的表达式中,假使有变量或标号的表达式,则在该语句前应率先给出它们的定义。如上例,ALPHA必需在BETA之前定义,否则汇编程序将指示出错。例如,TMPEQU5

TMPEQUTMP+1则是错误语句,由于TMP已赋值为5,就不能再把它定义为其它数值。

而TMP=5

TMP=TMP+1则是允许使用的,由于=伪操作允许重复定义。第一个语句TMP的值为5,其次个语句TMP的值就为6了。

2.6地址计数器与对准伪指令1.

第12页共21页

ORG伪操作:

生成COM程序:

2.EVEN伪指令

EVEN伪指令使下一个变量或指令开始于偶数字节地址。

3.ALIGN伪指令

ALIGN伪指令使它后面的数据或指令从2的整数倍地址开始。其格式为:ALIGN2n(n为任意整数)

2.7基数控制伪指令.RADIX伪指令

.RADIX可以把默认的基数改变为2~16范围内的任何基数。其格式如下:

.RADIX基数值

其中基数值用十进制数来表示。

应当注意,在用.RADIX16把基数定为十六进制后,十进制数后面都应跟字母D。在这种状况下,假使某个十

六进制数的末字符为D,则应在其后跟字母H,以免与十进制数发生混淆。

第13页共21页

4.3汇编语言程序格式

3.1.汇编语言源程序语句的格式

(1)名字项

源程序中用以下字符来表示名字:字母A~Z数字0~9

专用字符?、·、@、-、$

除数字外,所有字符都可以放在源语句的第一个位置。名字中假使用到·则必需是第一个字符。可以用好多字符来说明名字,但只有前面的31个字符能被汇编程序所识别。一般说来,名字项可以是标号或变量。它们都用来表示本语句的符号地址,都是可有可无的,只有当需要用符号地址来访问该语句时它才需要出现。·标号:标号在代码段中定义,后面跟着冒号:,它也可以用LABEL或EQU伪操作来定义。此外,它还可以作为过程名定义,这将在以后的章节中加以说明。·变量:变量在数据段或附加数据段中定义,后面不跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经常在操作数字段出现。(2)操作项

操作项可以是指令、伪指令或宏指令的助记符。对于指令,汇编程序将其翻译为机器语言指令。对于伪指令,汇编程序将根据其所要求的功能进行处理。对于宏指令,则将根据其定义展开。宏指令在第七章中将会专门论述。(3)操作数项

操作数项由一个或多个表达式组成,多个操作数项之间一般用逗号分开。对于指令,操作数项一般给出操作数地址,它们可能有一个,或二个,或三个,或一个也没有。对于伪操作或宏指令,则给出它们所要求的参数。

操作数项可以是常数、寄放器、标号、变量或由表达式组成。(4)解释项

解释项用来说明一段程序、一条或几条指令的功能。对于汇编语言程序来说,解释项的作用是很明显的,它可以使程序简单被读懂,因此汇编语言程序必需写好解释。解释应当写出本条(或本段)指令在程序中的功能和作用,而不应当只写指令的动作。

第14页共21页

3.2表达式

(1)算术操作符

算术操作符有+、-、*、/和MOD。

MOD是指除法运算后得到的余数,如19/7的商是2,而19MOD7则为5(余数)。

(2)规律操作符AND、OR、XOR、NOT、SHL、SHR

(3)关系操作符

关系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。

第15页共21页

(4)数值回送操作符

TYPE、LENGTH、SIZE、OFFSET、SEG

例:

(5)属性操作符

属性操作符主要有:PTR、段操作符、SHORT、THIS、HIGH、LOW等。

第16页共21页

·操作符的优先级(p143)

操作符的优先级别从高到低排列如下:1.在圆括号中的项,方括号中的项,结构变量(变量,字段。),然后是LENGTH、SIZE、WIDTH和MASK。2.名:(段取代)。

3.PTR,OFFSET,SEG,TYPE,THIS及段操作符。HIGH和LOW。

5.乘法和除法:*,/,MOD。6.加法和减法:+,-。

7.关系操作:EQ,NE,LT,LE,GT,GE。8.规律:NOT。9.规律:AND。

10.规律:OR,XOR。11.SHORT。

3.3汇编语言源程序格式举例(p144)例1.完整段定义格式

;TITLE文件名-程序主要功能描述;EQU语句

;**************************datareasegment;定义数据段;数据定义语句

datareaends

;**************************prognamsegment;定义代码段

;mainprocfar;主程序assumecs:prognam,ds:datarea

start:;程序起始执行地址;为程序返回DOS设置堆栈值pushds;入栈保存原DS段址subax,ax;设置偏移地址为0pushax;入栈保存偏移地址

;置DS寄放器为当前数据段

movax,datarea;datarea段地址movds,ax;存入DS寄放器

;主程序部分

ret;返回DOSmainendp;主程序终止

第17页共21页

;sub1procnear;定义子程序

;子程序部分

sub1endp;子程序终止

;

prognamends;代码段终止

;***********************************endstart;汇编终止

例2.简化段定义格式

.modelsmall;定义存储器模型.stack100h;定义堆栈段.data;定义数据段

;数据定义语句

.code;定义代码段mainprocfarstart:

movax,@data;数据段地址

movds,ax;存入DS寄放器

;主程序部分

movax,4c00h

int21h;返回DOSmainendp;主程序终止endstart;汇编终止

4汇编语言程序的上机过程1建立汇编语言的工作环境

为运行汇编语言程序至少要在磁盘上建立以下文件:1.编辑程序,如EDIT.EXE2.汇编程序,如MASM.EXE3.连接程序,如LINK.EXE调试程序,如DEBUG.COM

必要时,还可建立如CREF.EXE,EXE2BIN.EXE等文件。

第18页共21页

2汇编语言程序上机运行过程

C>EDITMYFILE.ASM

C>MASMMYFILE.ASM

Microsoft(R)MacroAssemblerVersion5.00

Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[MYFILE.OBJ]:Sourcelisting[NUL.LST]:MYFILE.LSTCross-reference[NUL.CRF]:

51646+44778Bytessymbolspacefree0WarningErrors0SevereErrors

C>LINKMYFILE.OBJ

Microsoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.RunFile[MYFILE.EXE]:ListFile[NUL.MAP]:Libraries[.LIB]:

LINK:warningL4021:nostacksegment

C>MYFILE

上述内容是建立并运行一个汇编语言程序的操作,红色字表示程序员键入的命令,黑色字是计算机的回复,为回车符。假设EDIT、MASM、LINK和汇编语言程序都在C盘中。

LINK程序的输出文件有.EXE可执行文件和.MAP连接映象文件。.EXE文件是CPU能识别并执行的代码,.M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论