




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章汇编语言程序设计基础,3.1汇编语言的注释与指令格式3.2汇编语言程序的需求3.3EXE文件的初始化3.4源程序的实例,3.1汇编语言的注释与指令格式,3.1.1汇编语言注释栏注释的使用可增强程序的可读性,尤其是对一组令人费解的汇编语言指令。注释栏是以分号(;)开始的,当程序中出现分号时,汇编程序就把右侧的所有字母视为注释。注释栏可以使用包括空格在内的任何可显示的字母、符号和数字。,注释栏可跟在同一行指令的右侧或自成一行,如下面例子所示:(1);Thisentirelineisacomment.(2)ADDAX,BX;Commentonsamelineasinstruction.注释栏只出现在汇编语言的源程序中,并不产生机器码,所以它不影响程序的执行。在本章中汇编语言指令是以大写字母来编写的,这样做的目的是使程序更容易阅读。,3.1.2汇编语言的语句格式汇编语言符号指令的一般格式如下所示:名称助记符操作数(一个或多个)名称(若存在的话)、助记符、以及操作数之间至少要使用一个空格或跳格(Tab)分隔。虽然一行最多可容纳132个字符,但由于屏幕显示为80个字符,因此一般人还是以80个字符来处理一行,方括号表示该项是可选择项。,下面是两个例子:名称助记符操作数注释COUNTDB1;变量名,操作码,一个操作数MOVAX,0;操作码,两个操作数,1.名称汇编语言的名称可用下列的字符来组成:字母:AZ与az数字:09特殊字符:?,-,$,名称的第一个字符必须是字母或是特殊字符,其最大长度限制在31个字符。例如,CONT、PGE25以及$E10皆为合法的名称。而且应尽量使用具有意义与可描述的名称。寄存器名称,诸如AX、DI与AL是保留字,专门用来表示寄存器名,不能作为名称使用。所以,像下面这条指令:ADDAX,BX,汇编程序会自动知道AX与BX是寄存器。然而像下面这条指令:MOVREGSAVE,AX则只有在数据段内定义过REGSAVE后,汇编程序才能识别这个名称。注意:名称使用在数据段中时被称为变量名,若是用在指令段(即程序)中则称标号名,简称标号,用在过程中时又称为过程名。当作为标号使用时,必须以冒号(:)结束。如:START:MOVAX,DATA,2.助记符(操作码)助记符表示所要执行的操作,也被称为操作码。在数据段中,操作码则定义了一个工作区或常数。而在指令段中,操作码则表示了一个诸如MOV或ADD的操作。,3.操作数操作码(即助记符)表示了要执行何种操作,而操作数则指出被操作的对象。操作数在数据段中一般为变量的初值,在指令段中一般为操作的对象。下面的例子在数据段,定义了变量COUNTR,其操作数表示所定义的值为0。名称操作码(助记符)操作数注释COUNTRDB0;COUNTR定义了一个值为0的字节,在指令段中,一个操作数可以包含1个、2个或0个项目,项与项之间用逗号隔开。下面有三个例子:操作码(助记符)操作数注释没有操作数RET;返回一个操作数INCCX;递增CX,即(CX+1)CX两个操作数ADDAX,12;把12加入AX中,名称(变量名、标号)、操作码以及操作数不需要从特定的列开始。然而,这些项目一般均从相同的列开始编写,以提高程序的易读性。DOSEDIT编辑软件提供了Tab键,它能在每隔8个字符的位置停住。,3.2汇编语言程序的需求,当汇编程序对汇编语言源程序进行汇编时,必须得到一些指示才能进行。汇编语言提供了一些伪指令,可以满足汇编程序的需求。这些伪指令只能在汇编程序对汇编语言源程序的汇编过程中产生作用,并不会产生任何可执行的机器指令码。下面将介绍一些常用的伪指令。,1.SEGMENT段定义伪指令任何一个汇编语言源程序至少含有一个指令段,以容纳可执行的机器指令码。某些程序同时也定义堆栈段作为堆栈存储使用,以及定义数据段来定义变量的初值。定义段的汇编语言伪指令为SEGMENT,其格式如下所示:名称操作码(助记符)操作数段名SEGMENT选择项段名ENDS,此格式必须含有段名,且是唯一的。除此之外,段名称必须符合汇编语言的名称命名规则。ENDS指示段的结束,并且与SEGMENT含有相同的段名。SEGMENT的选择项含有下列三种:起始边界类型、结合类型与分类(Class)。1)起始边界类型此项指示段的起始边界地址,一般是PARA。其作用是使得段的起始地址与节边界位置地址对齐。即它的物理地址能被16整除(nnnn0)。若没有此选择项,汇编程序就将它默认为PARA。,2)结合类型此项指示当汇编后进行链接时,是否需要与其他段结合。其类型有STACK、COMMON、PUBLIC、ATexpression以及MEMORY。例如:STACK_SEGMENTPARASTACK你可以使用PUBLIC、COMMON以及MEMORY将各个已独立汇编过的程序链接起来。若程序无需与其他程序结合时,就可省略这个选择项。3)类型此项目用引号括起来。当链接时,它会把相关的段集合在一起,如下所示:STACK_SEGMENTPARASTACKstack,2.PROC过程定义伪指令指令段内含程序的机器指令码。此段同时也含有一个或数个由PROC伪指令所定义的程序段,称为过程(Procedure)。下面是仅含有一个过程的指令段。段名SEGMENTPARA过程名PROCFAR;一个包含在指令段内的过程RET;返回DOS过程名ENDP段名ENDS,过程也必须有名称,且是唯一的。除此之外,此过程名必须符合汇编语言名称的命名规则。操作数FAR告诉DOS的装载程序,PROC是此程序的执行进入点。ENDP伪指令指示一个过程的结束,它与PROC具有相同的过程名。一个指令段可以同时含有数个过程。,3.ASSUME段指定伪指令微处理器使用SS寄存器作堆栈段的定址,以DS寄存器定址数据段,且以CS寄存器定址指令段。你必须告诉汇编程序,每一段所对应的段寄存器是哪个。ASSUME伪指令可以完成此工作,它在指令段中的编程格式如下所示:助记符操作数ASSUMESS:堆栈段名,DS:数据段名,CS:指令段名,例如,SS:堆栈段名,表示汇编程序将使SS寄存器指向堆栈段。操作数项可依任意的顺序出现。除此之外,它也可以含有ES寄存器项,若程序中没有使用到ES寄存器,则可将ES项省略或写成ES:NOTHING。,4.END伪指令如前所述,ENDS伪指令结束一个段,ENDP伪指令结束一个过程。而END伪指令可用来结束整个源程序,其格式如下:操作码(助记符)操作数END过程名若程序不用执行,则操作数项可为空白。对于仅含有一个模块的典型程序,END的操作数应为PROC的名称,即类型为FAR的过程名。,3.3EXE文件的初始化,EXE与COM为两种可执行磁盘文件。在本节中,我们将探讨EXE文件的程序格式,而在以后的学习中再介绍COM文件的程序格式。在DOS环境下,对汇编语言EXE文件的程序初始化,有四项需求,分别为:告知汇编程序哪些段寄存器指向哪些段;当程序开始执行时,把DS的内容压入堆栈中;将一个0地址压入堆栈中;把数据段的起始地址装入DS。,当退出一个程序并返回DOS时,可以利用RET指令实现返回。图3-1说明了启动与退出EXE文件程序的全部。DATASGSEGMENTPARAData;定义数据段DATASGENDS;数据段结束;,CODESGSEGMENTPARACODE;定义代码段BEGINPROCFAR;定义过程1.ASSUMECS:CODESG,DS:DATASG,SS:STACKSG2.PUSHDS;DS压入堆栈3.SUBAX,AX;AX清0000PUSHAX;堆栈压入00004.MOVAX,DATASG;数据段起始地址送入DS,MOVDS,AX5.RET;返回DOSBEGINENDP;过程结束CODESGENDS;代码段结束ENDBEGIN;源程序结束,图3-1EXE程序的初始化1,(1)ASSUME伪指令告诉汇编程序,将哪些段寄存器指向哪些段。图3-1中,CS指向CODESG、DS指向DATASG,SS指向STACKSG。在此例子中并没有定义STACKSG,若定义则将写成下列的形式:STACKSGSEGMENTPARASTACKStackStackSTACKSGENDS,借助使用段寄存器指向段,汇编程序就能够计算出每个项的差距值(偏移地址)。例如,指令段中每一条指令都有特定的长度,第一条指令位于差距0处,若其长度为一个字,则第二条指令就位于差距为2的地址,其余依次类推。,(2)存储器中,在可执行程序之前的256(十六进制100)个字节区域,称为程序段前缀区(PSP)。DOS装载程序时使用DS寄存器来建立PSP的起点。你的程序必须将此地址“压入”堆栈存储起来,以供后面的RET指令利用这个地址返回DOS。(3)系统要求堆栈中的下一个地址值为0。为了达到这个目的,可以利用SUB指令把AX清成0,再把0值压入堆栈。,(4)DOS装载程序会正确地把堆栈的起始地址存放在SS寄存器中,并把指令段的起始地址置入于CS寄存器中。因为装入程序已经把DS作别的用途,所以你必须按如图3-1所示的方式,利用MOV指令设置DS的初值,使DS指向DATASG数据段的起始地址。在下一节的源程序例3.1中,将详细地介绍DS的初始化。(5)借助开始压入堆栈中的地址(PUSHDS和PUSHAX),RET指令将使控制权退出程序而返回到DOS。另一种退出程序返回DOS的方法是使用MOVAH,4CH和INT21H指令,其特点是程序不通过过程实现执行,程序格式如图3-2所示。,DATASGSEGMENTPARAData;定义数据段DATASGENDS;数据段结束;CODESGSEGMENTPARACODE;定义代码段ASSUMECS:CODESG,DS:DATASG,SS:STACKSG,START:MOVAX,DATASG;数据段起始地址送入DSMOVDS,AXMOVAH,4CH;返回DOSINT21HCODESGENDS;代码段结束ENDSTART;源程序结束,图3-2EXE程序的初始化2,3.4源程序的实例,例3.1把前面所介绍的EXE文件程序架构,编写成一个汇编语言源程序。此程序包含了一个称为STACKSG的堆栈段与一个称为CODESG的指令段。STACKSG包含了一项DB(定义字节),它重复定义了“STACKSEG”12次。以后的程序不会再用此方式来定义堆栈段,但当你使用DEBUG来观察汇编、链接过的程序时,此定义将有助于你找到堆栈段的位置。,EXE程序格式的源程序清单如下:;L31.ASM;STACKSGSEGMENTPARASTACKstackDB12DUP(STACKSEG)STACKSGENDS;CODESGSEGMENTPARACode,BEGINPROCFARASSUMESS:STACKSG,CS:CODESG,DS:NOTHINGPUSHDS;pushdsontostackSUBAX,AX;pushzerooffsetPUSHAX;ontostackMOVAX,0123H;Movehex0123toax,ADDAX,0025H;Addhex25toaxMOVBX,AX;MoveAXtobxADDBX,AX;AddAXtobxMOVCX,AX;MoveCXtoaxMOVAX,AX;MoveAXtoaxNOPRETBEGINENDPCODESGENDSENDBEGIN,CODESG包含了程序中所有可执行的指令,但第一条陈述ASSUME并不产生可执行指令码。ASSUME伪指令指定了STACKSG给SS寄存器以及CODESG给CS寄存器。实际上,此程序告诉汇编程序使用SS寄存器的值来对STACKSG定位,以及使用CS寄存器的值来对CODESG定位。当系统将程序装入到内存储器中执行时,它会设定实际的地址给SS与CS寄存器。因为此程序并没有定义数据,故它没有数据段,所以ASSUME无需指定DS寄存器。,紧接在ASSUME之后的指令PUSH、SUB与PUSH是初始化的标准操作,它先把DS寄存器的内容压入堆栈,其次再把一个0压入堆栈。因为通常是从DOS执行一个程序,所以这些指令使得在程序执行后能够正确地返回DOS。例3.1的程序没有显示功能,汇编、链接后生成的.EXE程序直接执行时会看不到结果,你可以使用DEBUG执行该程序,方法可参考第2章的2.4.1和2.4.3小节。,例3.2用MOVAH,4CH和INT21H返回DOS的EXE格式的源程序。源程序清单如下:;L32.ASM;DATASGSEGMENTPARADataDATAW1DW0123H;dataw10123HDATAW2DW0025H;dataw20025HDATAW3DW?;dataw3预留一个字单元DATASGENDS,;STACKSGSEGMENTPARASTACKs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年零售电商行业智能客服在售后服务优化中的应用报告
- 节能灯能源用电协议合同
- 篮球馆租场地合同协议书
- 高速公路合同制合同范本
- 闺房哲学就业协议书模板
- 矿山生产加工合同协议书
- 瑜伽托管合同协议书模板
- 电厂粉煤灰售卖合同范本
- 经营店铺转让合同协议书
- 理由拒绝签质量协议合同
- 2023年山东青岛局属高中自主招生物理试卷真题(含答案详解)
- 2024年中华全国律师协会招聘5人历年(高频重点复习提升训练)共500题附带答案详解
- 房地产 -2024年第二季度大连写字楼和零售物业市场报告
- 档案管理借阅制度
- 《电机与变压器》教案
- 质量目标及实施计划制定
- 重力式(仰斜、俯斜)挡土墙计算软件
- 财务年终总结报告
- 曲率系数不均匀系数自动计算
- 小米 新员工入职培训
- 2023年江苏财经职业技术学院单招考试职业适应性测试试题及答案解析
评论
0/150
提交评论