如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第4章汇编语言程序设计本章学习目标通过本章的学习,应当掌握以下内容:•了解汇编语言的基本知识和特点。•熟悉汇编语言的程序结构、段定义以及语句的格式。•掌握汇编语言常用伪指令的使用方法。•熟练掌握汇编语言程序设计的基本方法:顺序结构、•分支结构、循环结构和子程序结构。•掌握程序设计中的宏指令和常用的系统功能的调用方法。1.汇编程序汇编是把汇编语言程序翻译成机器语言描述的目标程序的过程。汇编程序是完成汇编任务的程序。2.连接程序连接程序的主要功能是实现多个目标文件及库文件的连接,并完成浮动地位的重定位。从汇编语言源程序到可执行程序的生成过程如图所示。例1:两个字节数据的相加的完整的汇编语言程序DATASEGMENTBUF1DB34HBUF2DB2AHDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,BUF1ADDAL,BUF2MOVSUM,ALMOVAH,4CHINT21HCODEENDSENDSTART4、2汇编语言源程序的结构4、2、1汇编语言的语句格式汇编语言源程序中的每个语句可以由4项组成,格式如下[name]operationoperand[;comment][名字项]操作项操作数项;注释项下面分别说明各项的表示方法。1.名字项源程序中用下列字符表示名字:字母:A~Z或a~z;数字:0~9;专用字符号:?、•、@、―、$;一般来讲,名字项可以是标号或变量。(1)标号:在代码段定义,后面跟冒号:它有三种属性:段、偏移及类型。①段属性:定义标号的段起始地址,在CX寄存器中。②偏移属性:16位无符号数。③类型属性:用来指出该标号是在本段内引用还是在其他段内引用的。(2)变量:变量在除代码以外的其他段中定义,后面不跟冒号。它也可以用LABLE或EQU伪操作来定义。变量经常在操作数字段出现。它也有段、偏移及类型三种属性。①段属性定义变量的段起始地址,此值必须在一个段寄存器中。②偏移属性变量的偏移地址是16位无符号数,它代表从段的起始地址到定义变量的位置之间的字节数。在当前段内给出变量的偏移值等于当前地址计数器的值,当前地址计数器的值可以用$来表示。③类型属性变量的类型属性定义该变量所保留的字节数。2.操作项操作项可以是指令、伪操作或宏指令的助记符。3.操作数项操作数项由一个或多个表达式组成,多个操作数项之间一般用逗号分开。4.注释项注释项用来说明一段程序或一条或几条指令的功能,它是可有可无的。4、2、2汇编语言源程序的段定义段定义伪操作的格式如下:segment-nameSEGMENT…segment-nameENDS其中删节号部分,对于DS、ES和SS来说,一般是存贮单元的定义、分配等伪操作;对于代码段则是指令及伪操作。此外,还必须明确段和段寄存器的关系,这可用ASSUME伪操作来实现,其格式为:ASSUMEassignment,…,assignment其中assignment说明分配情况,其格式为:〈段寄存器名〉:〈段名〉其中段寄存器名必须是CS、DS、ES和SS中的一个,而段名则必须是由SEGMENT定义的段中的段名。4、2、.3汇编语言源程序的结构汇编语言源程序的程序基本结构是段,一个汇编语言源程序由若干个代码段、数据段、附加段和堆栈段组成。段之间的顺序可以随意安排,通常数据段在前,代码段在后。任何可执行汇编语言程序至少要有一个代码段,通常还可能有数据段和堆栈段。每个段都有段首指令和段结束指令,段的内容介于这两条指令之间。其一般结构如下:SSEGSEGMENTSTACK〈堆栈段的内容〉SSEGENDSDSEGSEGMENTDATA〈数据段的内容〉DSEGENDSCSEGSEGMENTCODE〈代码段的内容〉CSEGENDSEND〈启动标号〉对于一般程序来说,定义太多的段只会增加程序设计的复杂性,通常需要一个代码段、一个数据段和一个堆栈段,有时可包含一个附加段。1.为什么要用ASSUME语句指令movbl,xdmovxe,bl被汇编为movbl,byteptr[0000h]movbyteptres:[0000h],bl其中,在变量xe前增加了段超越前缀ES:,这就是ASSUME的作用,也仅此而已。2.设置段寄存器的初值(1)CS与IPCS与IP的初值不能在程序中显示设置,由系统自动设置为END后指定的起始地址。IP指向下一条指令的地址(2)DS和ES、DS和ES的初值必须在程序中设置。设置方法如下:MOVAX,SEGNAMEMOVDS,AX(3)SS与