《第四章汇编语言程序格式优秀课件.ppt》由会员分享,可在线阅读,更多相关《第四章汇编语言程序格式优秀课件.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章汇编语言程序格式第1页,本讲稿共39页1上机环境上机环境硬件硬件系统软件系统软件应用软件应用软件操作系统:操作系统:DOS系统系统编辑器编辑器:EDIT.exe编程序编程序:MASM.exe连接程序连接程序:LINK.exe调试程序:调试程序:DEBUG.exe用户开发的程序:用户开发的程序:ABC.exe等等CPU、存储器、存储器(ROM、RAM)、I/O接口、输入、输出设备接口、输入、输出设备第2页,本讲稿共39页2一一、汇编语言上机过程汇编语言上机过程D:EDITABC.asmD:MASMABC;有语法错,回有语法错,回EDIT下改该程序下改该程序D:LINKABC;有错,回在有错
2、,回在EDIT下改程序下改程序D:ABC运行结果错,回运行结果错,回EDIT下改程序下改程序或在或在DEBUG下调试,找原因。下调试,找原因。D:DEBUGABC.exe编辑源程序编辑源程序 EDITABC.ASM汇编源程序汇编源程序 MASMABC.ASM形成目标程序形成目标程序ABC.OBJ连接目标程序连接目标程序 LINKABC.OBJ有连接错误信息有连接错误信息?形成可执行程序形成可执行程序 ABC.EXE装入可执行程序到内存装入可执行程序到内存,并执行并执行D:subABC下一程序下一程序用用DEBUG调试可执行程序调试可执行程序D:sub DEBUGABC.EXE找到原因找到原因Y
3、NYNNYN有汇编错误信息有汇编错误信息?Y运行结果正确运行结果正确?用用DEBUG调试程序查错调试程序查错?第3页,本讲稿共39页3二二、汇编语言程序结构汇编语言程序结构一、程序结构一、程序结构二、语句结构二、语句结构第4页,本讲稿共39页4一、程序结构一、程序结构l程序由数条语句构成,每条语句占一行。程序由数条语句构成,每条语句占一行。指令性语句指令性语句(指令语句指令语句)指示性语句指示性语句(伪指令语句伪指令语句)l分段结构分段结构程序按段编写程序按段编写,与与8088内存分段编址相对应。内存分段编址相对应。每段由伪操作每段由伪操作SEGMENT开始、由开始、由ENDS结束。结束。l程
4、序最后为程序最后为END结束语句,后跟一启动地址。结束语句,后跟一启动地址。启动地址指示程序开始执行的第一条语句。启动地址指示程序开始执行的第一条语句。l程序中设有返回程序中设有返回DOS的功能。的功能。使程序执行完后返回使程序执行完后返回DOS系统的命令接受状态。系统的命令接受状态。l程序中用到内存操作数时程序中用到内存操作数时,应按操作数的寻址方式应按操作数的寻址方式,给相应的段寄存器赋值给相应的段寄存器赋值;汇编语言程序结构例一汇编语言程序结构例一movs.asm;实现数据传送功能实现数据传送功能aaSEGMENT;数据段数据段1str1DBHello!aaENDSbbSEGMENT;数
5、据段数据段2str2DB6dup(?)bbENDSccSEGMENT;代码段代码段ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4CHINT21H;返回返回DOSccENDSENDstart;指示程序结束指示程序结束第5页,本讲稿共39页51.名字项名字项l据语句功能的不同,据语句功能的不同,名字项可用来表示名字项可用来表示:段名、变量名、段名、变量名、标号、过程名以及常量名等。标号、过程名以及常量名等。二、语
6、句结构二、语句结构第6页,本讲稿共39页6l名字项用一个符号表示。名字项用一个符号表示。对符号的规定对符号的规定:由字符由字符AZ,az,09及符号及符号、$、下划线、下划线_等组成,等组成,最长最长31个字符,超出部分忽略。个字符,超出部分忽略。不能用数字打头,以免与十六进制数相混。不能用数字打头,以免与十六进制数相混。不使用汇编程序中的保留字。不使用汇编程序中的保留字。(如指令的助记符等如指令的助记符等)对定义的符号不区分大小写。对定义的符号不区分大小写。第7页,本讲稿共39页72.助记符项助记符项助记符可以是指令、伪操作中的助记符。助记符可以是指令、伪操作中的助记符。对于指令对于指令,汇
7、编程序将其翻译成机器语言指令。,汇编程序将其翻译成机器语言指令。MOVAX,100B80001对于伪操作对于伪操作,汇编程序据其要求的功能进行处理。,汇编程序据其要求的功能进行处理。dataSEGMENTdata与一段值对应与一段值对应stringDBTsinghuastring与一内存地址对应与一内存地址对应第8页,本讲稿共39页83操作数项操作数项l操作数给出参与操作的数或数所在的地方。操作数给出参与操作的数或数所在的地方。l操作数多于一个时,用逗号分开。操作数多于一个时,用逗号分开。l操作数可以是操作数可以是常数常数、寄存器、存储器操作数、寄存器、存储器操作数、标号名、过程名或标号名、过
8、程名或表达式表达式等。等。第9页,本讲稿共39页9常数常数给出具体的数据。可以是数字常量或字符常量。给出具体的数据。可以是数字常量或字符常量。数字默认十进制,也可加数字默认十进制,也可加D表示十进制数。表示十进制数。如如1234D,1234 数字后加数字后加B表示二进制数。表示二进制数。如如1010B 数字后加数字后加H表示十六进制数。表示十六进制数。如如1234H 字符常量,用单引号表示。字符常量,用单引号表示。如如1234汇编时,用字符对应的汇编时,用字符对应的ASCII表示。表示。如如31H,32H,33H,34H例例 data1DB12,34,56;十进制;十进制data2DB12H,
9、34H,56H;十六进制;十六进制MOVAL,G;字符;字符stringDB1234;字符串;字符串第10页,本讲稿共39页10lA、B、C、D、E、F开头的十六进制数前面加开头的十六进制数前面加0,与与H结尾的标识符区别。结尾的标识符区别。如如寄存器名寄存器名AH、BH、CH、DH变量名变量名abcdH等等例例 movAL,0AHmovAL,AHmovBX,0abcdH第11页,本讲稿共39页114注释项注释项l由分号引出,用来说明语句或程序的功能。由分号引出,用来说明语句或程序的功能。汇编程序对分号后的内容不做处理。汇编程序对分号后的内容不做处理。l作用:作用:注释程序,增强程序可读性。注
10、释程序,增强程序可读性。可放在语句最前,暂时注释某语句,调试程序用。可放在语句最前,暂时注释某语句,调试程序用。例例 、;MOVAH,2;显示提示信息显示提示信息;MOVDL,A;INT21H 、第12页,本讲稿共39页12指示性语句与指令性语句:指示性语句与指令性语句:l指令性语句指令性语句是用指令系统中的指令构成的语句。是用指令系统中的指令构成的语句。例例MOVAX,BXl指示性语句指示性语句是指示汇编程序进行汇编的操作。是指示汇编程序进行汇编的操作。例例 MOVAX,4+8中的中的+codeSEGMENT中的中的SEGMENTMOVBX,OFFSETstring中的中的OFFSET第13
11、页,本讲稿共39页13l指示性语句与指令性语句区别指示性语句与指令性语句区别一个程序经汇编,连接和装入内存后,在执行程序之前:一个程序经汇编,连接和装入内存后,在执行程序之前:指示性语句的功能已经完成,故又称伪操作。指示性语句的功能已经完成,故又称伪操作。而指令性语句的功能尚未完成,需控制而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。去执行,才能完成。第14页,本讲稿共39页14常用伪操作介绍常用伪操作介绍一、一、程序开始和结束程序开始和结束二、二、段定义段定义三、三、变量定义变量定义四、四、ASSUME语句语句五、五、表达式中的操作符表达式中的操作符六、六、过程定义过程定义七、七
12、、等值定义等值定义第15页,本讲稿共39页15一一、模块定义和程序结束伪操作模块定义和程序结束伪操作1.NAME和和TITLE伪操作伪操作格式格式NAME模块名模块名格式格式TITLE模块名模块名在源程序开始可用在源程序开始可用NAME或或TITLE为模块命名为模块命名,模块名的作用是指示给连接程序进行连接用。模块名的作用是指示给连接程序进行连接用。源程序中可无模块定义,此时源文件名作为模块名。源程序中可无模块定义,此时源文件名作为模块名。第16页,本讲稿共39页162.END伪操作伪操作格式格式END启动地址启动地址作用是指示源程序到此结束。作用是指示源程序到此结束。汇编程序对汇编程序对EN
13、D之后的语句不进行处理。之后的语句不进行处理。程序中所有有效语句应放在程序中所有有效语句应放在END语句之前。语句之前。源程序中必须有源程序中必须有END结束语句。结束语句。汇编程序对无汇编程序对无END语句的源程序不进行处理语句的源程序不进行处理,只给出无只给出无END语句错误信息。语句错误信息。第17页,本讲稿共39页17二、段定义伪操作二、段定义伪操作格式格式段名段名SEGMENT、段名段名ENDS段定义由伪操作段定义由伪操作SEGMENT开始开始、ENDS结束结束。其中:其中:SEGMENT和和ENDS必须成对出现,必须成对出现,且语句前必须有段名,且语句前必须有段名,段名必须相同段名
14、必须相同。SEGMENT和和ENDS语句之间可以有指令和其他伪操作语句之间可以有指令和其他伪操作,表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理程序中可以定义多个段。程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的段值。程序经汇编、连接及装入内存后,段名为一具体的段值。第18页,本讲稿共39页18三、变量定义伪操作三、变量定义伪操作格式格式变量名变量名类型助记符类型助记符操作数操作数,操作数操作数,.用来定义程序中所用的内存操作数。用来定义程序中所用的内存操作数。其中其中变量名变量名指示内存操作数的地址(符
15、号地址)指示内存操作数的地址(符号地址)类型助记符类型助记符指示内存操作数的类型指示内存操作数的类型(字节、字、双字等字节、字、双字等)操作数操作数指示内存操作数的内容指示内存操作数的内容汇编程序将定义的操作数,按其类型分配内存单元数汇编程序将定义的操作数,按其类型分配内存单元数,顺序存入变量名指向的内存单元中。顺序存入变量名指向的内存单元中。常用的类型助记符有:常用的类型助记符有:DB指示其后的操作数为字节类型指示其后的操作数为字节类型DW指示其后的操作数为字类型指示其后的操作数为字类型DD指示其后的操作数为双字类型指示其后的操作数为双字类型第19页,本讲稿共39页19例例1:定义赋初值的变
16、量定义赋初值的变量dataSEGMENTxxDB1,-1,0fcHyyDW1,-1,0fcHzzDD1,-1,0fcHdataENDS第20页,本讲稿共39页20例例2:定义字符串变量定义字符串变量(只能用只能用DB定义定义)dataSEGMENTstr1DBTsingHuastr2DBINPUT:,0dH,0aH,$dataENDS注意注意:3个及其以上的字符,个及其以上的字符,只能用只能用DB定义定义str1DWabcdstr2DDabcdstr1str25473696e67487561494e5055543a0d0a24TsingHuaINPUT:0dH0aH$第21页,本讲稿共39页2
17、1操作数可以是用操作数可以是用常量、表达式和常量、表达式和?表示。表示。常量和表达式常量和表达式表示内存操作数的初始值表示内存操作数的初始值,其值应在其定义的类型范围内,否则汇编出错。其值应在其定义的类型范围内,否则汇编出错。例例aaDB270bbDW80000用用?表示不置初始值的内存操作数。表示不置初始值的内存操作数。例例ccDB?可用可用DUP复制操作符复制操作符定义相同的操作数,其格式为定义相同的操作数,其格式为重复次数重复次数DUP(操作数操作数)例例eeDB3DUP(4)等价于等价于eeDB4,4,4第22页,本讲稿共39页22四、四、ASSUME伪操作伪操作格式格式ASSUME段
18、寄存器:段名段寄存器:段名,段寄存器段寄存器:段名段名,其中其中段寄存器段寄存器为为CS、DS、ES、SS中的一个中的一个段名段名为用伪操作为用伪操作SEGMENT定义过的段名定义过的段名例例 ASSUMECS:cc,DS:aaASSUME伪操作的作用伪操作的作用指示汇编程序指令中用到的标号、过程及变量所在的段。指示汇编程序指令中用到的标号、过程及变量所在的段。其中其中对标号、过程必须用对标号、过程必须用CS段寄存器指示段寄存器指示对变量可用对变量可用CS、DS、ES、SS段寄存器指示段寄存器指示第23页,本讲稿共39页23若未用若未用ASSUME语句指示指令中用到的标号、语句指示指令中用到的
19、标号、过程和变量所在的段过程和变量所在的段,汇编程序将给出错误信息。汇编程序将给出错误信息。ASSUME语句只起指示作用,并无实际的操作。语句只起指示作用,并无实际的操作。在程序中引用定义的变量做内存操作数时,在程序中引用定义的变量做内存操作数时,需按寻址方式用传送指令(如需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值)给相应的段寄存器赋值。第24页,本讲稿共39页24codeSEGMENTASSUMECS:codestart:;程序主体部分程序主体部分.MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstart一个完整汇编程序的基本框架一个完整汇编程序的基本框架:
20、第25页,本讲稿共39页25五、表达式及表达式中的操作符五、表达式及表达式中的操作符表达式表达式l由常量、标号、变量和一些操作符构成。由常量、标号、变量和一些操作符构成。l汇编程序对表达式进行运算后,得到一个确定的数值,汇编程序对表达式进行运算后,得到一个确定的数值,再把这个数值汇编到指令中。再把这个数值汇编到指令中。l据表达式所表示的内容,分数字表达式、地址表达式。据表达式所表示的内容,分数字表达式、地址表达式。l表达式是指令或伪操作的操作数表达式是指令或伪操作的操作数;表达式中的操作符由汇编程序完成表达式中的操作符由汇编程序完成例例 MOVAX,12-4;MOVAX,8;数字表达式数字表达
21、式LEABX,string+4;地址表达式地址表达式第26页,本讲稿共39页26表达式中的操作符表达式中的操作符有以下几类有以下几类:1.算术运算符算术运算符(+、-、*、/、MOD)2.逻辑运算符逻辑运算符(AND、OR、NOT、XOR)3.关系运算符关系运算符(EQ、NE、GT、GE、LT、LE)真:真:FFFFH;假假:04.数值返回操作符数值返回操作符(SEG、OFFSET)5.类型操作类型操作(PTR)6.地址记数器地址记数器($)第27页,本讲稿共39页27例例:1.算术运算符算术运算符(+、-、*、/、MOD(取余数取余数)MOVAX,6*8MOVAX,482.逻辑运算符逻辑运算
22、符(AND、OR、NOT、XOR)MOVAX,80hOR70hMOVAX,0F0h3.关系运算符关系运算符(EQ、NE、GT、GE、LT、LE)真:真:FFFFH;假假:0MOVAX,1GE2MOVAX,0第28页,本讲稿共39页28 4.数值返回操作符数值返回操作符(SEG、OFFSET)SEG 取符号地址的段地址取符号地址的段地址 例例 MOV AX,SEG yy OFFSET 取符号地址的偏移地址取符号地址的偏移地址 例例 MOV BX,OFFSET yybbSEGMENTyy DB6dup(?)bbENDSccSEGMENTASSUMECS:cc,DS:aa,ES:bbstart:CL
23、DMOVAX,SEGyyMOVES,AXMOVDI,OFFSETyyMOVCX,6.ccENDSENDstart第29页,本讲稿共39页29aaSEGMENTxx DBHello!aaENDSbbSEGMENTyyDB6dup(?)bbENDSccSEGMENTASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,xxMOVAX,SEGyyMOVES,AXMOVDI,OFFSETyyMOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartMOVAX,bbLEADI,yy第30页,本讲稿共39页30注意注意:S
24、EG、OFFSET只能对符号地址操作只能对符号地址操作MOVAX,SEGBXMOVBX,OFFSETSI第31页,本讲稿共39页31六、过程定义伪操作六、过程定义伪操作格式格式过程名过程名PROC类型类型、过程名过程名ENDP过程定义由伪操作过程定义由伪操作PROC开始、开始、ENDP结束结束。其中:其中:PROC和和ENDP必须成对出现必须成对出现,且语句前必须有过程名,且语句前必须有过程名,过程名必须相同过程名必须相同。PROC和和ENDP语句之间为子程的指令序列。语句之间为子程的指令序列。程序中可以定义多个过程。程序中可以定义多个过程。程序经汇编、连接及装入内存后程序经汇编、连接及装入内
25、存后,过程名为一具体的内存地址,指示子程入口。过程名为一具体的内存地址,指示子程入口。第32页,本讲稿共39页32过程名常用作过程名常用作CALL调用指令的操作数调用指令的操作数,子程的最后安排子程的最后安排RET返回指令,使执行完子程后能返回调用处返回指令,使执行完子程后能返回调用处。过程有两种类型:过程有两种类型:NEAR和和FAR无类型项时,无类型项时,默认为默认为NEAR类型类型。当过程与调用指令不在同一段时,应将过程定义为当过程与调用指令不在同一段时,应将过程定义为FAR类型。类型。过程类型决定子程中过程类型决定子程中RET的返回类型的返回类型第33页,本讲稿共39页33例例1dis
26、playPROC、C3H、RET;NEAR属性的过程对应段内返回属性的过程对应段内返回displayENDP例例2displayPROCFAR、CBH、RET;FAR属性的过程对应段间返回属性的过程对应段间返回displayENDP第34页,本讲稿共39页34七、等值定义伪操作七、等值定义伪操作格式格式符号名符号名EQU需等值的表达式需等值的表达式作用是用符号名等值指定的表达式作用是用符号名等值指定的表达式其中其中:表达式可以是任何有效的操作数表达式可以是任何有效的操作数汇编时用语句中的表达式代替程序中符号所在的地方。汇编时用语句中的表达式代替程序中符号所在的地方。应用:应用:1.定义符号常量
27、,方便修改程序。定义符号常量,方便修改程序。2.某表达式多次出现时,用等值伪操作可以方便编程。某表达式多次出现时,用等值伪操作可以方便编程。第35页,本讲稿共39页35八八、数值数值回送操作符回送操作符TYPE,LENGTH,SIEE,OFFSET,SEG5种。种。把一些特征或存贮器地址的一部分作为数值回送。把一些特征或存贮器地址的一部分作为数值回送。TYPE格式:格式:TYPEvariable变量变量或或label标号标号回送该变量的以字节数表示的类型回送该变量的以字节数表示的类型(DB为为1,DW为为2,DD为为4,DQ为为8,DT为为10)回送标号类型数值(回送标号类型数值(NEAR为,
28、为,FAR为为2)例:例:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编程序其形式:汇编程序其形式:ADDSI,2第36页,本讲稿共39页36LENGTH格式:格式:LENGTHvariable对于变量中使用对于变量中使用DUP,汇编回送分配给变量单元数,其他情况回送,汇编回送分配给变量单元数,其他情况回送1。例:例:FESSDW100DUP(0)对于对于MOVCX,LENGTHFEES汇编程序将其形式:汇编程序将其形式:MOVCX,100其他情况:其他情况:例:例:ARRAYDW1,2,3对于指令对于指令MOVCX,LENGTHARRAY汇编程序将使其形式为:汇编程序将使其形式为
29、:MOVCX,1例:例:TABLEDBABCD对于指令对于指令MOVCX,LENGTHTABLE汇编程序使其形式为:汇编程序使其形式为:MOVCX,1第37页,本讲稿共39页37SIZE格式:格式:SIZEvariable回送分配给该变量的字节数回送分配给该变量的字节数LENGTH*TYPE例:例:FEESDW100DUP(0)MOVCX,SIZEARRAY将形成:将形成:MOVCX,200例:例:TABLEDBABCDMOVCX,SIEETABLE将形成:将形成:MOVCX,1例:例:ARRAYDW1,2,3MOVCX,SIEEARRAY形式:形式:MOVCX,2LENGTH*TYPE=2第38页,本讲稿共39页38小小小结:小结:TYPE变量的返回值是类型的字节数变量的返回值是类型的字节数:DB为为1,DW为为2,DD为为4,DQ为为8,DT为为10;TYPE标号的返回值是:标号的返回值是:NEAR为为-1,FAR为为-2。LENGTH变量返回:变量返回:DUP分配的单元数,对于其他情况则返回分配的单元数,对于其他情况则返回1。SIZE返回返回值是:值是:LENGTH和和TYPE值的乘积,即变量的字节数。值的乘积,即变量的字节数。第39页,本讲稿共39页39
限制150内