汇编语言入门教程PPT-第五章:汇编语言程序结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

教学重点本章重点掌握:程序的格式、开发方法参数的表达、变量的定义变量和标号的属性第一章基础知识第五章汇编语言程序结构第一章基础知识机器语言—计算机能够直接识别并执行的二进制机器指令序列优点:开销小、运行速度快;缺点:难以编写和理解,编程效率很低。汇编语言(AssemblyLanguage)—用助记符号表示机器指令代码、变量地址,标号等的符号指令序列。优点:易记、易理解,易编写程序,大大提高了编程效率;问题:需要将助记符号翻译为机器语言。汇编语言源程序:用汇编语言编写的程序。汇编程序:将助记符号翻译为机器语言的语言处理程序,以便计算机能够识别。汇编:将助记符号翻译为机器语言的过程。理解以上几个名词概念:汇编语言、汇编语言源程序、汇编程序、汇编概念第一节:汇编程序功能及上机过程汇编程序功能汇编程序的主要功能如下:(1)检测语法错显示错误信息(2)源程序文件二进制目标文件(并输出*.LST文件)(3)展开宏指令一般汇编程序都应具有如下功能:•宏汇编功能•支持地址和数据的符号表示•支持内存管理•支持程序的模块化组织•支持多种类型的数据表示等汇编程序依赖于硬件,不同机型的系统有自己的汇编程序。上机过程上机过程如图所示第一章基础知识第五章汇编语言程序结构汇编语言源程序的结构与书写格式汇编语言源程序是段结构的:代码段、数据段、堆栈段、附加段源程序由段组成,每段有一个段名,segment定义段起点,ends定义段结束点。每段由若干语句行组成,源程序以end结束。例字符串传送指令和伪指令•指令——使CPU产生动作、并在程序执行时才处理的语句,就是前一章学习的处理器指令•伪指令(Directive)——不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等•伪指令与具体的处理器类型无关,但与汇编程序的版本有关本课程采用微软宏汇编程序MASM5.0汇编语言语句一般格式为:[标识符/语句标号]指令名[操作数序列][;注释]标识符——用来为变量、段及过程等命名语句标号——标识符后加:,提供转移地址指令名——指令可分为三类:机器指令、伪指令和宏指令。机器指令:指令系统中的指令,程序运行时由CPU执行;伪指令:汇编程序执行的操作,规定汇编程序如何按要求进行汇编及分配内存。宏指令:由一系列指令或伪指令构成,汇编时展开成若干条机器指令,用于提高编程效率。操作数序列——可以是常量、变量、表达式、寄存器名或标号等,用逗号隔开。(伪指令和宏指令由汇编程序在汇编期间处理)注释符——“;”后可给出语句注释,提高可读性和可理解性。第二节:汇编语言语句格式与分类(1)常量00110110B389D467OB407H3.475E+5'Inputanumber'(2)变量变量名:存储单元的符号地址变量值:存储单元中的数据MOVAL,'A'moval,'a'变量的三种属性:段值(SEG):变量所在段的起始地址偏移量(OFFSET):段起点距离变量所在存储单元位置的字节数50偏移量段起点类型(TYPE):变量占用的字节数常量、变量、标号(3)标号标号:存放指令的存储单元的符号地址,常用作转移地址。NEAR:2字节转移地址…CMPAX,BXJNENEXT…NEXT:MOVAX,0…标号的三种属性:段值(SEG):标号所在段的起始地址偏移量(OFFSET):段起点距离标号所指存储单元位置的字节数类型(TYPE):NEAR,FAR(偏移地址)短指针(近指针)段内转移FAR:4字节转移地址(段、偏移地址)长指针(远指针)段间转移第一章基础知识第五章汇编语言程序结构汇编语言程序的语句类型:1、程序执行指令语句。2、伪操作语句。3、宏指令语句。伪操作的功能:伪操作又称为伪指令,它不象机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如下功能:(1)符号定义伪指令(2)数据定义伪指令(3)段定义伪指令(4)过程定义伪指令(5)条件汇编伪指令(6)宏指令(7)结构与记录一、数据定义及存储器分配伪操作格式:[Variable]MnemonicOperand,…,Operand[;Comments]变量(Variable)字段:是可有可无的,它用符号地址表示,其作用与指令语句前的标号相同,但它的后面不跟冒号。如果语句中有变量则汇编程序使其记以第一个字节的偏移地址。第一章基础知识第五章汇编语言程序结构注释(Comments)字段:用来说明该伪操作的功能,它也是可有可无的。助记符(Mnemonic)字段:说明所用伪操作的助记符,常用的有以下几种:DB伪操作:用来定义字节,其后的每个操作数都占有一个字节。DW的操作:用来定义字,其后的每个操作数占有一个字(低位字节在第一个字节地址中,高位字节在第二个字节地址中)。DD伪操作:用来定义双字,其后的每个操作数占有二个字。DQ伪操作:用来定义四个字,其后的每个操作数占有四个字。DT伪操作:用来定义十个字节,其后的每个操作数占有十个字节,形成压缩的BCD码。这些伪操作可以把其后面跟着的数据存入指定的存储单元,或者只分配存储器空间而并不存入确定的数值。DW和DD伪操作可以存储偏移地址或完整的地址。第一章基础知识第五章汇编语言程序结构例操作数可以是常数,或者是表达式(根据该表达式可以求得一个常数),如DATA_BYTEDB10,4,l0HDATA_WORDDW100,100H,-5DATA—DWDD3*20,0FFFDH汇编程序可以在汇编期间在存储器中存入数据,如右图所示。例操作数也可以是字符串,如:MESSAGEDB‘H2LLO’则存储器存储情况如下图所示:第一章基础知识第五章汇编语言程序结构注意:DB’AB’和DW’AB’的存储分配空间的不同。如下图:例操作数?可以保留存储空间,但不存入数据。如:ABCDB0,?,?,?,0DFFDW?,52,?经汇编后的存储情况如右图所示。第一章基础知识第五章汇编语言程序结构操作数字段还可以使用复制操作符来复制某个(或某些)操作数。其格式为:repeat_countDUP(operate,operate,…)其中repeat_count可以是一个表达式,它的值应该是一个正整数,用来指定括号中的操作数的重复次数。例ARRAYlDB2DUP(0,1,2,?)ARRAY2DB100DUP(?)汇编后的存储情况如下图所示。ARRAYlDB2DUP(0,1,2,?)和以下语句是等价的:ARRAYlDB0,I,2,?,0,1,2,?第一章基础知识第五章汇编语言程序结构例DUP操作可以嵌套,例如ARRAY3DB100DUP(0,2DUP(1,2),0,3)则汇编结果如右图所示:可以用DW或DD伪操作把变量或标号的偏移地址(DW)或整个地址(DD)存入存储器。用DD伪操作存入地址时,第一个字为偏移地址,第二个字为段地址。例如PARAMETER_TABLEDWPAR1DWPAR2DWPAR3INTERSEG_DATADDDATA1DDDATA2则汇编后的存储情况如下图所示。其中偏移地址或段地址均占有一个宇,其低位字节占有第一个字节,高位字节占有第二个字节。第一章基础知识第五章汇编语言程序结构第一章基础知识第五章汇编语言程序结构顺便说明一下,这里操作数字段中的变量或标号可以使用表达式如:在这种情况下,汇编后,存储器中应该存入表达式的值。例如PARAMETER_TABLEDWPAR1+1DWPAR2+1说明变量的类型属性问题:在数据定义伪操作前面的变量的值是该伪操作中的第一个数据项在当前段内的第一个字节的偏移地址。此外,它还有一个类型属性用来表示该语句中的每一个数据项的长度(以字节为单位表示),因此DB伪操作的类型属性为1,DW为2,DD为4,DQ为8,DT则为10,变量表达式的属性和变量是相同的。汇编程序可以用这种隐含的类型属性来确定某些指令是字指令还是字节指令。第一章基础知识第五章汇编语言程序结构例如OPER1DB?,?OPER2DW?,?…MOVOPER1,0MOVOPER2,0则第一条指令应为字节指令,第二条指令则应为字指令。如果有下列指令序列:OPER1DB1,2OPER2DW1234H,2345H…MOVAX,OPER1+1MOVAL,OPER2汇编程序在汇编这一段程序时,能发现两条MOV指令的两个操作数的类型属性是不相同的:OPERl十1为字节类型属性而AX为字类型属性;OPER2为字类型属性而AL为字节类型属性。汇编语言将指示由于属性类型不匹配出错。第一章基础知识第五章汇编语言程序结构有一个办法可以指定操作数的类型属性,它优先于隐含的类型属性,即可以使用PTR属性操作符。其格式为:typePTRVarible士constantexpression其中类型可以是BYTE,WORD或DWORD(双字),这样变量的类型就可以指定了。上面例子可以写为:OPER1DB1,2OPER2DW1234H,2345H…MOVAX,WORDPTROPER1+1MOVAL,BYTEPTROPER2通过PTR属性操作符就把OPER1十1的类型属性指定为字,两个操作数的属性就一致了,汇编时不会出错,而运行时应把OPER1十1的字内容送到AX,即把OPER1十1的内容送AL,把OPER2的第一个字节的内容运AH,所以指令执行完后,(AX)=3402H。同样,对于第二条语句(AL)=34H第一章基础知识第五章汇编语言程序结构LABEL伪操作:除了用属性操作符给以定义外,还可以用LABEL伪操作来定义,其格式为:nameLABELtype(1)对于数据项可以表示为:variable_nameLABELtype其中,type可以是BYTE,WORD或DWORD(双字)。(2)对于可执行的代码,则可表示为label_nameLABELtype其中,type可以是NEAR或FAR。第一章基础知识第五章汇编语言程序结构例如4.9BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)这样在100个字节数组中的第一个字节的地址赋于二个不同类型的变量名:字节类型的变量BYTE_ARRAY和字类型变量WORD_ARRAY。指令MOVWORD_ARRAY十2.,0把该数组的第3个和第4个字节置0,而MOVBYTE_ARRAY十2.,0则把该数组的第3个字节置0。例:LABFLABELFARLAB:MOVAX,100第一章基础知识第五章汇编语言程序结构二、表达式赋值伪操作EQU有时程序中多次出现同一个表达式.为方便起见可以用赋值伪操作给表达式赋予一个名字,其格式如下:此后,程序中凡需要用到该表达式之处就可以用表达式名来代替了。上式中的表达式可以是任何有效的操作数格式,可以是任何可以求出常数值的表达式,也可以是任何有效的助记符。举例如下:第一章基础知识第五章汇编语言程序结构必须注意EQU语句的表达式中如果有变量或标号的表达式,则在该语句前应该先给出它们的定义。例如,语句:则必须放在DATA_ONE的定义之后才行,否则汇编程序将指示出错。另外还有一个与EQU相类似的=伪操作也可以作为赋值伪操作使用。它们之间的区别是:EQU伪操作中的表达式名是不允许重复定义的,而=伪操作则允许重复定义。例如:EMP=6或EMPEQU6都可以使数6赋以符号名EMP,但是不允许两者同时使用。第一个语句后的指令中EMP值为7;而第二个语句后的指令中EMP值为8。第一章基础知识第五章汇编语言程序结构三、段定义伪操作存储器的物理地址是由段地址和偏移地址组合而成的,汇编程序在把源程序转换为目标程序时,必须确定标号和变量的偏移地址,并且需要把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起形成一个可执行程序。为此,需要用段定义伪操作,段定义伪操作的格式如下:此外,还要明确段和段寄存器的关系,这可用ASSUME伪操作来实现,其格式为:其中assignment说明分配情况,其格式为:其中段寄存器名必须是CS、DS、ES和SS中的一个,而段名则必须是由segm

1 / 64
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功