您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 教案12微型机技术-伪指令
微型机原理与应用第13次课章节名称第四章汇编语言程序设计第二节伪指令语句目的要求1.教学目的:掌握微型汇编语言程序设计中段定义伪指令和数据定义为指令。2.教学要求:熟悉程序开始和结束伪指令、段定义伪指令和数据定义伪指令。掌握符号定义语句。主要内容与时间概算序号主要内容时间概算1程序开始结束语句15分2段定义语句20分3过程定义语句10分4数据定义语句25分5变量和标号10分6符号定义语句10分78共计100分重点难点重点:伪指令语句的功能;伪指令语句的种类;段定义语句、过程定义语句的格式;数据定义语句的功能与格式。难点:数据定义语句的应用。方法手段课堂讲授,详细分析每一种伪指令的作用及格式,通过存储空间分配示意图,掌握数据定义语句的功能。(续表)课堂提问①汇编语言语句分类有哪几种?本次课内容总结本节课介绍的是汇编语言程序设计中的伪指令语句其中重点需要掌握的是:伪指令语句的功能;伪指令语句的种类;段定义语句、过程定义语句的格式;数据定义语句的功能与格式;同时由于数据定义语句的应用相对较难理解,大家多多复习。思考题作业题作业:Page1534.14.44.5参考资料《IBM-PC汇编语言程序设计》第四章填表说明:1.该表供主讲教员备课使用,每次课均应按表中所列内容填写,各次课构成一门课教案的整体;2.表中相关项目内容的详略程度由主讲教员酌情掌握;3.该表可书写或电脑录入,书写字迹应工整,电脑录入应按格式中显示的字体、字号(仿宋GB2312小四)填写,外语可用TimesNewRoman字体。授课内容上节课内容回顾:在上一节课当中我们学习了汇编语言的基本语法,了解了汇编语言程序的基本结构、也知道了汇编语言各种语句的区别和常量、标识符和表达式的表示方法,那么在程序设计中如何将它们有机的结合到一起?这就是我们这节课学习伪指令的作用。4.2伪指令语句伪指令是汇编语言程序的重要组成部分,用于指示汇编程序在对源程序进行汇编期间所要做的操作,和连接程序在程序定位时所应遵循的规定。伪指令可以分为程序开始和结束语句、段定义语句、过程定义语句、数据定义语句和符号定义语句等几大类,下面对它们分别进行介绍。4.2.1程序开始和结束语句程序开始和程序结束语句的命令有NAME、TITLE和END等。1.模块命名语句采用命令NAME来为程序模块命名,其格式为:NAME名字其中名字是程序员按标识符规定所取的程序模块名,汇编后它就成为该程序模块的名字。2.标题命名语句命令TITLE为源程序定义标题,其格式为:TITLE名字其中由程序员所取的名字在列表文件中的每一页作为标题打印出来。标题的名字最多可有60个字符。若程序没有使用NAME命令,应用标题名字中的前面6个字符作为模块名。值得注意的是,程序开始时不用NAME和TITLE命令的语句是允许的,此时可直接由段定义语句开始编写源程序。3.程序结束语句程序结束语句的格式为:备注:END[标号]其中标号是程序中第1条指令性语句的标号。当程序由多个模块组成时,只需在主程序的结束语句中写出标号;其他子程序模块的结束语句只要写出命令END即可。4.2.2段定义语句段定义语句用来定义一个段,命令有SEGMENT,ENDS,ASSUMEN和ORG等。1.段定义语句段定义语句的格式为:段名SEGMENT[定位类型][组合类型][‘类别’]┇段名ENDS其中段名为程序员编程时按标识符规定为该段所取的名字,在汇编和连接时系统将给该段名的段分配一个具体的段基值。命令SEGMENT和ENDS必须成对使用,它们前面的段名必须是一致的,SEGMENT语句和ENDS语句之间就是该段的内容。SEGMENT语句中的参数共有三项,这三个参数用来设定该段在内存中的位置,且都是任选项。(1)定位类型(align_type)定位类型用来指定该段段基址的边界条件,可以有以下四种:BYTE此时该段可从任何地址开始,即段基址=XXXXXXXXXXXXXXXXXXXXB,其中X表示任意二进制位,即1/0。WORD此时该段必须从字的边界开始,即段基址=XXXXXXXXXXXXXXXXXXX0B。PARA此时该段必须从小节的边界开始,即段基址=XXXXXXXXXXXXXXXX0000B.PAGE此时该段必须从页的边界开始,即段基址=XXXXXXXXXXXX00000000B。定位类型的缺省值(即不写)为PARA。(2)组合类型(combine_type)详细讲解在汇编和连接时,当该段与其他段组合在一起时,组合类型用来决定该段与其他段的连接关系,组合类型有以下六种:PUBLIC段连接时将与其他段同名段依次连接起来,其连接次序由连接程序确定。COMMON段连接时将与其他同名段有相同的段基值,即共享相同的存储空间,亦即各段会产生覆盖,但可节省内存容量。Atexp使段基值等于按表达式exp计算所得的16位数。对于代码段不能用Atexp来设定段基值。STACK仅用于堆栈段,使同名段都连接成一个连续段,且系统自动对SS和SP初始化。MEMORY指定该段在同名段的最后,即该段在同名段中位于最高的地址空间,若连接时有几个组合类型为MEMORY的段,则只有最前面(最先遇到)的段按组合类型MEMORY处理,其他段均按组合类型PUBLIC处理。NONE表示本段与其他段逻辑上不发生关系,各段都有自已的段基值。组合类型缺省值为NONE。(3)‘类别’(‘class’)类别必须用单引号括起来。在定位时,连接程序将各程序模块中具有相同类别的逻辑段集中在一起,形成一个统一的物理段。2.偏移地址定位语句程序中有时需要指定某一语句所在内存单元在段内的偏移地址,这可用ORG命令的语句来实现,其格式为:ORGexp其中表达式exp可计算出16位地址。【例4-1】CODESEGMENT.ORG1000HMOVAL,BL:CODEENDS本例表明MOVAL,BL语句从本段内偏移地址为1000H的地方开始存放。3.段设定语句程序结束部分一个程序通常由很多段组成,对于某一代码段,它所用到的数据段、附加段和堆栈段只是程序中的某几个有关段,因此在代码段开始时必须用ASSUME命令语句来示明该代码段所用到的段,并明确这些段和段寄存器的关系,以便进行汇编。ASSUMEN命令语句紧跟在SEGMENT命令语句之后,其格式为:ASSUMENCS:段名1,[DS:段名2,][ES:段名3,][SS:段名4]其中段名1、2、3和4分别为该代码段所用到的作为代码段、数据段、附加段和堆栈段段的段名,亦即将这些段的段基值1、2、3和4作为段寄存器CS、DS、ES和SS的内容。4.2.3过程定义的语句过程是程序的一部分,即子程序。过程可用程序中的CALL指令调用,当过程中的指令执行完后,用RET指令返回调用它的程序。过程定义语句的格式为:过程名PROC类型::过程名ENDP过程名是程序员编程时按标识符规定取定的。类型表明该过程是供段内调用,还是供段间调用,对于前者用NEAR表示,对于后者用FAR表示,当类型项缺省(即不写明)时,隐含值为NEAR。PROC和ENDP是成对使用的,两语句之间就是该过程的内容(子程序),且用RET指令结尾以返回调用它的程序。4.2.4数据定义语句数据定义语句用来为数据分配存储单元,例如在内存中设置原始数据以及为运算结果数据而保留内存单元等。数据段、附加段和堆栈段都是存放数据的,其中所用的语句主要是数据定义语句。数据定义语句的格式为:[变量]命令参数1,参数2,…[;注释]200C41-3412--7856012ARRAY112301212364000ARRAY2ARRAY3ARRAY4汇编结果其中变量是由程序员在编程时按标识符规定取定的,如ARRAY,BUFFER,SUM等,一般按照数据的功用取名。命令的表示符号(助记符)以及功能如下:DB定义长度为1字节(8位)的数据(字节数据)DW定义长度为2字节(16位)的数据(字数据)DD定义长度为4字节(32位)的数据(双字数据)DQ定义长度为8字节(64位)的数据(8字节数据)DT定义长度为10字节(80位)的数据(10字节数据)其中参数就是相应内存单元中的数据,它可以是数字常量、字符常量或符号常量,当该单元是保留以备存入有关数据时就以问号(?)表示。参数可以有多个,相互间要用逗号隔开,若连续多个数据是重复的,就可应用复制符DUP以简化书写,DUP的用法为:复制次数DUP(数据)其中数据可以不只一个,且数据还可以有复制部分。【例4-2】段名为DATA的段由以下语句组成DATASEGMENTARRAY1DB20H,12,‘A’,?ARRAY2DW1234H,?,5678HARRAY3DB2DUP(0,2DUP(1,2),3)ARRAY4DD100DATAENDS则本段的内存占用情况如图所示。在汇编语言中,只能用DB定义两个字符以上的字符串,如‘ABCD’,且从低地址依次存放A、B、C、D的ASCII码,用其余数据定义命令定义字符串常量外,单引号中字符的个数不得超过2个,且第一个字符的ASCII配合图形多举例码要存在地址最大的单元中。如DW‘AB’中是从低地址依次存放B、A的ASCII码。4.2.5符号定义语句有时程序中会多次出现同一个表达式,为方便起见,可以用符号定义语句为该表达式赋予一个名字。符号定义命令有EQU、=和PURGE。1.EQU赋值语句应用EQU命令的符号定义语句格式为:名字EQUexp其中名字是程序员取定的,表达式exp可以是任何能够计算出一个具体数值的表达式,也可以是任何有效的操作数格式,还可以是任何有效的助记符。如:COUNTEQU200DATAEQUCOUNT+10BEQU[BX+16]符号一旦被定义,在后面的程序中就可以引用这个名字来表示表达式的实际值。但是一个符号不能重复定义,若要改变赋值,需先用PURGE命令语句撤销原赋值,再用EQU命令语句赋新值,PURGE命令语句的格式为:PURGE名字其中名字可不只一个,即可同时撤销几个用逗号分开的己赋值。【例4-3】应用EQU和PURGE的符号定义。COUNTEQU20;给COUNT赋值为20::MOVAL,COUNT;即MOVAL,20:PURGECOUNT;撤销原赋值COUNTEQU10;给COUNT赋新值10::注意它们之间的区别MOVBL,COUNT;即MOVBL,102.=符号定义语句应用=命令的符号定义语句格式为:名字=exp命令“=”的功能与EQU类似,只是“=”只能对常数表达式赋值,另外,“=”可随时对名字(符号常量)赋新值,而不必使用PURGE命令。如上例可写为:COUNT=20::MOVAL,COUNT:COUNT=10MOVBL,COUNT
本文标题:教案12微型机技术-伪指令
链接地址:https://www.777doc.com/doc-2421072 .html