已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,5.4汇编语言源程序,掌握:汇编语言与汇编程序的概念;汇编语言程序设计过程;汇编语言源程序的结构框架;常用伪指令及基本DOS功能模块的应用。,2,一、80X86新增指令特点:,增加对32位字长操作的指令;加强各类指令功能;增加了高级语言、控制保护、Cache管理等指令。,3,二、汇编语言及汇编程序,计算机语言:,机器语言汇编语言高级语言,面向机器的语言,机器语言,汇编语言,高级语言,4,汇编语言及汇编程序,汇编语言源程序用助记符编写的程序,源程序的编译程序,汇编程序,汇编语言源程序,机器语言目标程序,5,汇编语言程序设计与执行过程,输入汇编语言源程序源文件.ASM汇编(编译)目标文件.OBJ链接可执行文件.EXE调试最终程序,6,汇编语言的程序结构,一个源程序必须用其编译器能够理解的语法进行编写,这些语法是指语句和程序结构必须遵循的规则。汇编语言也是如此。首先,通过以下可在PCDOS环境下运行的汇编语言源程序实例,初步认识标准的汇编语言源程序的框架结构,并通过它来了解汇编语言的有关规定和格式。,7,例:打印输出字符串“THISISASAMPLEPROGRAM”,;SAMPLEPROGRAMDISPLAYMESSAGE;注释行STACKSEGMENTPARASTACKSTACK;定义堆栈段DB1024DUP(0);在存储器建立一个堆栈区STACKENDS;段结束DATASEGMENT;定义数据段MESSAGEDBTHISISASAMPLEPROGRAM;存放数据DB0DH,0AH,$DATAENDS;段结束CODESEGMENT;代码段开始ASSUMECS:CODE,DS:DATA,SS:STACK;将段名与段寄器联系起来,8,STARTPROCFAR;将过程定义为远过程PUSHDSMOVAX,0PUSHAXMOVAX,DATA;建立数据段的可寻址性MOVDS,AX;初始化DSLEABX,MESSAGELOOP1:CMPBYTEPTRBX,$JELOOP2MOVAH,5,标准序,以便返回DOS操作系统,9,MOVDL,BXINT21HINCBXJMPLOOP1LOOP2:RETSTARTENDP;过程结束CODEENDS;代码段结束ENDSTART;整个程序汇编结束,10,汇编源程序的特点,一、由若干逻辑段组成,各逻辑段都有一个段名,由段定义语句(伪指令)来定义和说明。通常只有代码段是必不可少的。数据段或附加段用来在内存中建立一个适当容量的工作区用以存放常量和变量。堆栈段则在内存中建立一个堆栈区,以便中断和子程序调用及各模块间传递参数时使用。某些简单的程序并不一定需要数据段和堆栈段,但对一些复杂的程序,堆栈段、数据段和代码段都可以不止一个。通常把数据段放在代码段前面。,11,汇编源程序的特点(续),二、在代码段的起始处,用ASSUME命令说明各个段寄存器与逻辑段的关系。并由用户自己设置各段寄存器(除代码段外)初值,以建立这些逻辑段的可寻址性。三、每个逻辑段由若干行汇编语句组成,每行只有一条语句且不能超过128个字符,但一条语句允许有后续行,最后均以加车作结束。整个源程序必须以END语句来结束,它通知汇编程序停止汇编。END后面的标号START表示该程序执行时的起始地址。,12,汇编源程序的特点(续),四、每一条汇编语句最多由4个字段组成,它们均按照一定的规则分别写在一条语句的4个区域,各区域之间用空格或TAB键隔开。五、每个源程序在代码段中都必须含有返回到DOS操作系统的指令语句,以保证程序执行完毕后能自动回到DOS状态,以便继续向计算机键入命令。,13,源程序与PCDOS的接口,为保证用户程序执行完后自动返回DOS,应采取两项措施:一是将用程序中的主程序定义为FAR过程,其最后一条指令为RET;二是在主程序的开始处将PSP所在段的段地址DS(或ES)保存进栈,然后再将一个全0的字(PSP的段内偏移地址)压入堆栈。PUSHDSMOVAX,0PUSHAX,14,源程序与PCDOS的接口(续),还有一种返回DOS的非标准方法:不定义主程序为FAR过程并去掉标准序部分,只在代码段结束之前(即CODEENDS之前)增加两句:MOVAH,4CHINT21H,15,汇编语言的语句格式,语句是汇编语言源程序的基本组成单位,源程序是一个语句序列。语句序列中的每个语句规定了一个基本操作要求,而语句序列则完成某个特定的操作任务。,16,语句的种类,在80X86/Pentium汇编语言中,有三种基本语句:指令语句、伪指令语句和宏指令语句。指令语句:对应于CPU指令系统中的一条指令,为可执行语句。汇编程序将为之产生一对应的机器目标代码。如:指令语句MOVDS,AX;机器代码为8EH和D8H,17,语句的种类(续),伪指令语句CPU不执行的语句,只是汇编时给汇编程序提供汇编信息,如定义符号、分配存储单元、将程序分段等。它本身不产生目标代码,所以是指示性语句。如伪指令语句SEGMENT/ENDS;,18,语句的种类(续),宏指令语句是以某个宏名字定义的一段指令序列。汇编时,凡有宏指令语句的地方都将用相应的指令序列的目标代码插入。,19,汇编语言的语句格式,指令性语句由CPU执行的指令语句格式:标号:前缀助记符操作数,操作数;注释,指令的符号地址,标号后要有冒号,操作码,注释前加分号,20,汇编语言的语句格式,指示性语句:CPU不执行的指令,不生成目标代码;由汇编程序执行,用于分配内存空间、定义变量、指示程序开始和结束等。指令格式:,名字伪指令助记符操作数,操作数,;注释,变量的符号地址其后不加冒号,指示性语句中至少有一个操作数,21,汇编语言的语句格式(续),其中,方括号中的内容为可选部分,操作数部分或是0、1操作数,或是由逗号隔开的多个操作数。(1)标号和名字:标号和名字分别是给指令单元和伪指令起的符号名称,用符号汇编语言规定的标识符来表示。标号后面必须有冒号,名字后面没有。标号和名字的选择有一些限制。首先,它们必须符号汇编语言的标识符定义,即以字母开头,由字母(AZ或az,汇编程序不区分大小写)、数字及部分特殊字符(?、$和下划线_等)组成的字符串表示,字符串长度不能超过31个。此外,标识符不能是汇编言中有特定意义的保留字。,22,汇编语言的语句格式(续),(2)助记符和定义符助记符和定义符分别用于规定指令语句的操作性质和伪指令语句的伪操作功能,这部分是语句中唯一不可缺省的。(3)操作数指令语句中的操作数提供该指令的操作对象,并说明要处理的数据存放在什么位置以及如何访问它。(4)注释注释由分号“;”开始,用来对语句的功能加以说明,它们构成了源程序的编程文档,使程序更容易被理解和阅读。,23,操作数,常量数值或字符、字符串寄存器存储器单元变量或标号表达式可包括各种运算符,24,常量,在汇编时已经确定其值且程序运行期间不变化的量为常量,如语句中的立即数或端口地址等。这些常量的形式各不相同,常用的有二、十、八或十六进制的整型数值常量、字符串常量和已赋值的常标识符。在汇编语言源程序中,常用十六进制来表示数据和地址。,25,变量,代表内存中的数据区,程序中视为存储器操作数变量的三种属性:段值变量所在段的段地址偏移量变量单元地址与段首地址之间的位移量。类型字节型(BYTE)、字型(WORD)、双字型(DWORD)、四字和十字节5种,26,表达式操作数,表达式操作数由各种操作数、运算符和操作符组成。汇编语言中的两类表达式:数值表达式:由数值常量、字符串常量或符号常量等与算术、逻辑或关系运算符连接而成。地址表达式:由常量、变量、标号、寄存器的内容以及一些运算符组成。其值表示存储器地址,一般都是段内的偏移地址。地址表达式主要用来表示指令语句中的操作数。,27,三、基本伪指令,数据定义伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令结束伪指令*过程定义伪指令*宏命令伪指令,28,数据定义伪指令,数据定义语句用于定义变量。它指定变量的类型和名称,并为变量分配存储单元。格式:变量名伪指令助记符操作数,;注释其中,变量名是可选的;操作数是赋给变量的初值,多个相同类型的变量可在一条语句中定义。经过定义的变量名有三个属性:数据类型、偏移量(可用OFFSET获得)和段基址(可用SEG获得)。若某个变量所表示的是一个数组,则其类型属性为变量的单个元素所占用的字节数。,29,数据定义伪指令,伪指令助记符DB定义的变量为字节型DW定义的变量为字类型(双字节)DD定义的变量为双字型(4字节)DQ定义的变量为4字型(8字节)DT定义的变量为10字节型,30,数据定义伪指令,DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD11H*2,22H,33445566H,考虑以上变量在内存中的存放形式,31,数据定义伪指令,伪指令的性质决定所定义变量的属性;定义字符串必须用DB伪指令例:DATA1DBABCD,66H,A,B,C,D,41H,42H,43H,44H,66H,32,数据定义语句的具体形式和功能,(1)为数据项分配存储单元,用变量名作为该存储单元的名称。例:XDB25H;定义变量X为字节YDW4124H;定义变量Y为字汇编时汇编程序会把25H、4142H这些初值分别放入名为X、Y的存储单元中,33,数据定义语句的具体形式和功能,(2)预留若干字节(字、双字)存储单元但并不赋以具体的初值,以存放程序的运行结果。这时操作数部分可使用问号“?”。例:ADB?;为变量A分配一个字节单元BDB?;为变量B分配一个字单元,34,数据定义语句的具体形式和功能,(3)引入若干个用逗号分隔的操作数来定义一个表(数组)。例:W_TABLEDW1122H,3344H;定义一个字表B_TABLEDB1,2,4,8,16;定义一个字节表其中字变量W_TABLE的内容为1122H,下一个字单元的内容为3344H。,35,数据定义语句的具体形式和功能,(4)用DB伪指令在内存中定义一个字符串。字符串中的每一个字符用它的ASCII码值来表示,为一个字节,所以字符串的定义必须用DB命令。例如:MESSAGEDBHELLO注意:当字符串的长度不超过两个字符时,也可用DW伪指令来定义。例:STRING1DBABSTRING1DWABSTRING1DWAB,CD,36,重复操作符,为一个数据区的各单元设置相同的初值格式:变量名伪指令助记符nDUP(初值,)例:BW20DUP(0)DB3DUP(22H,11H,?),随机数,37,分析操作符与合成操作符,作为存储器操作数的标号或变量都有段、偏移量和类型三种属性。在程序设计中,有时需要随时查询、调用或修改这些属性,以满足不同的访问要求,这些操作由分析和合成操作符来完成。,38,分析操作符,分析操作符作用于存储器操作数时返回它们的属性值。这些操作符是:SEG、OFFSET、TYPE、SIZE、LENGTH等。分析操作符的使用格式:操作符标号或变量SEG和OFFSET操作符SEG和OFFSET分别用以返回标号或变量的段地址和偏移地址。,39,分析操作符,TYPE、LENGTH、SIZE操作符TYPE操作符返回一个数字值,表示存储器操作数的类型。LENGTH操作符返回变量用DUP重复定义的数据项总数。SIZE操作符则返回TYPE和LENGTH的乘积,表示为变量所分配的字节存储单元总数。注意:要用LENGTH操作符返回的存储区必须用DUP()来定义,否则返回1.,40,合成操作符,PTR操作符PTR用来临时指定或修改存储器操作数的类型属性(保持原有的段属性和偏移地址属性),如果这些变量或标号已有定义,则原定义的类型属性不变。使用格式:类型PTR标号或变量其中,类型可以是BYTE、WORD、DWORD、NEAR或FAR,它们仅在当前所在的指令中有效。,41,合成操作符(续),LABEL操作符LABEL操作符为当前存储单元定义个指定类型的标号或变量。它常用于定义一个数据块或标号,使它们具有多重名字或属性。使用格式:标号或变量名LABLE类型例:WBYTELABELWORD,42,合成操作符(续),THIS操作符THIS操作符与EQU配合使用,具有LABEL操作符的同样作用。使用格式:标号或变量名EQUTHIS类型例:BWORDEQUTHISBYTE,43,符号定义伪指令,格式:符号名EQU表达式操作:用符号名取代后边的表达式,不可重新定义,即在同一源程序中,用EQU定义过的符号名不能再赋予不同的值。例:CONSTANTEQU100;常量赋予符号名VAREQU30H+99H,EQU说明的表达式不占用内存空间,44,符号定义伪指令,等号语句格式:符号表达式此语句的功能与EQU类似,唯一区别是能对符号进行再定义。例:EMP=60EMP=EMP+1EMP=123*4,45,段定义伪指令,说明逻辑段的起始和结束;说明不同程序模块中同类逻辑段之间的联系形态,46,段定义伪指令,段名SEGMENT定位类型组合类型类别段名ENDS,说明逻辑段的起点,说明不同模块中同名段的组和连接方式,47,段定义伪指令SEGMENT/ENDS,格式:段名SEGMENT定义类型组合类型类别名(段体)段名ENDS功能:指出段名及段的各种属性,并表示段的开始和结束位置。段名是用户定义的标识符,是识别段的标志,用来指示汇编程序为该段分配的存储器起始位置,包含段地址和段内偏移量两个属性。,48,定义类型,汇编程序对源程序汇编后生成的目标代码文件(.OBJ),其中的段地址和偏移量都未最后确定,还需要用链接程序(LINK)把各个模块连接起来。定位类型参数用于告诉LINK程序,链接时本段首地址的边界定位方式。定位有四种类型:PARA(节):表示段的起始地址必须为16的倍数(XXXX0H),若语句中没有给出定位类型,则默认为PARA。,49,定义类型,PAGE(页):表示段的起始地址必须为256的倍数(XXX00H),也就是页的起点上。WORD(字):表示段的起始地址必须为偶数,它最适合于安排类型为字的数据段。BYTE(字节):表示该段可以从任意地址开始。,50,组合类型,一个汇编语言源程序往往有许多模块组成,而每一个模块常常又有自己的数据段、代码段和堆栈段。组合类型用于告诉LINK程序,多个模块链接时本段与其他模块中同名段的组合链接关系。组合类型共有六种。NONE:本段与其他同名段无组合关系,并有自己的段起始地址。若语句中没有指明组合类型,则默认为NONE。,51,组合类型,PUBLIC:在满足定位类型的前提下,LINK程序将其与其他模块中说明为PUBLIC的同名段邻接在一起,共用一个段地址。STACK:与PUBLIC同样处理,只是链接后的段作为堆栈段。COMMON:各模块中由COMMON方式说明的同名段得叠履盖,有着相同的起始地址。段的长度邓决于最长的COMMON段的长度。段的内容为所链接的最后一个模块中COMMON段的内容以及没有覆盖到的前面的COMMON段的内容。,52,段寄存器说明伪指令ASSUME,格式:ASSUME段寄存器:段名,段寄存器:段名,ASSUME伪指令一般出现在代码段中SEGMENT伪指令的后面,它设定特定的段寄存器指向特定的段,说明源程序中定义的段应由哪个段寄存器去寻址。但是,ASSUME并未真正将段地址装入相应的段寄存器,段寄存器(CS除外)的初值设定还要由程序中的MOV指令来完成。,53,指定地址伪指令ORG,格式1:ORG表达式格式2:ORG$+表达式功能:ORG伪指令用来强行指定地址计数器的当前值,以改变段内在它以后的代码或数据块存放的偏移地址。格式1直接将表达式的值送入地址计数器。格式2将汇编ORG语句前地址计数器的现值$加上表达式后送入地址计数器。,54,例,DATASEGMENTORG10H;在数据段10H偏移地址处开始存放20H,30HXDB20H,30HORG$+5YDB40H,50H,55,段定义伪指令例,DATASEGMENTMEM1DB11H,22HMEM2DW1234HDATAENDS,56,结束伪指令,表示源程序结束格式:END标号,57,一个完整源程序结构例,DSEGSEGMENTDATA1DB1,2,DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTDB200DUP(?)SSEGENDS,58,一个完整源程序结构例,CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AXCSEGENDSENDSTART,源程序代码,59,过程定义伪指令,用于定义一个过程体格式:过程名PROCNEAR/FARRET过程名ENDP,过程入口的符号地址,60,宏命令伪指令,宏命令源程序中由汇编程序识别的具有独立功能的一段程序代码格式:宏命令名MACROENDM,宏体,61,四、DOS功能模块,用INT21H软中断指令,可调用包含多个子功能的功能包;各子功能采用功能号来区分;功能包括:设备管理、目录管理、文件管理等。,62,DOS功能子程序的基本方法,BIOS/DOS的每个功能子程序都对应着一个子程序文件。使用这些子程序时,用户不必过问其内部结构和细节,也不必关心硬件I/O接口的特性,只要直接用一条软件中断指令INTn即可(n为中断向量号),这称为中断调用。一般,对功能子程序的调用需要经过三个步骤:子程序入口参数关规定寄存器子程序编号送AH寄存器发软件中断命令:INTn,63,其中软中断命令INTn中的n值因子程序不同而可能不同,比如ROMBIOS的软中断类型号有n=51FH,DOS的软中断类型号有n20H,21H,232AH,2EH,2FH,33H和67H等几种情况。有的软中断命令只对应一个子程序,这时的功能调用无需上列步骤2;有的软中断则对应很多子程序,这时的功能调用就必须指明子程序号。,64,DOS功能模块调用格式,调用格式:MOVAH,功能号INT21H,65,常用子功能,从键盘输入单字符并显示;从键盘输入字符串并显示;在屏幕上显示单字符;在屏幕上显示字符串。,66,从键盘输入单字符并显示,01号功能调用等待从键盘输入一个字符,调用返回时该字符的ASCII码值送入AL寄存器,同时将该字符显示在屏幕上。入口参数:无调用方法:MOVAH,01INT21H输入的字符在AL中,67,单字符输入例,GET_KEY:MOVAH,1INT21HCMPAL,YJZYESCMPAL,NJZNOJNZGET_KEYYES:NO:,交互式应答程序,68,从键盘输入字符串,AH功能号OAHDS:DX字符串在内存中的存放地址INT21H从键盘接收字后串后存入以DS:DX为首地址的内存缓冲区,同时显示该字符串,输入过程以回车键结束。使用时,要求事先在数据段定义一个输入缓冲区,其中第一个字节指出缓冲区能容纳的字符个数,不能为0.第二个字节保留用以存放实际输入的字符个数。从第三个字节开始存放从键盘上接收的字符。,69,定义字符缓冲区,用户自定义缓冲区格式:,0DH,N1,N2,整个缓冲区,最大键入字符数,实际键入字符数,70,输入字符串程序段,DAT1DB20,?,20DUP(?)LEADX,DAT1MOVAH,0AHINT21H,71,输入缓冲区,14H,?,20个字节,定义后的输入缓冲区初始状态:,72,单字符显示输出,AH功能号O2H或05HDL待输出字符INT21H功能:将寄存器DL中的单个字符输出到显示器或打印机。02H为显示器、05H为打印机,73,单字符显示输出例,MOVAH,02MOVDL,41H;A的ASCII值INT21H执行结果:屏幕显示字符A,74,字符串输出显示,入口参数:DS:DX指向内存中一个以$结尾的字符串(不包括$)输出到显示器。AH功能号O9HDS:DX待输出字符串的偏移地址INT21H,75,字符串输出显示例,DATASEGMENTMESS1DBInputString:0DH,0AH,$DATAENDSCODESEGMENTMOVAH,09MOVDX,OFFSETMESS1INT21H,被显示的字符串必须以$结束,76,练习一,写一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教育行业在线教育平台数字化教学模式研究报告及未来发展趋势预测
- 网络安全监察考试题库及答案解析
- 传染科护理学题库及答案解析
- 2025年生物科技农业行业生物农业技术发展与农产品质量安全研究报告及未来发展趋势预测
- 2025年服装行业工业0技术在服装行业的应用研究报告及未来发展趋势预测
- 《初中历史专题研究:中国古代史教学教案》
- 文档管理分类标准化指南
- 安全注册工程师万题库及答案解析
- 安全C2科目题库及答案解析
- 数据保护安全利用承诺书4篇
- 2025年企业管理人员安全培训考试试题及参考答案(满分必刷)
- 国家事业单位招聘2025退役军人事务部宣传中心招聘应届毕业生拟聘用考试题库含答案
- 2025年全国共青团“新团员入团”应知应会知识考试能力检测试卷附参考答案详解(完整版)
- 离婚协议法律文书模板及填写示范
- 2025年检验科生物安全培训试题(答案)
- 施工现场集装箱式活动房安装验收表
- 《中国近现代史纲要》说课教案
- 2025年船厂打磨工考试试题及答案
- 2025年公路水运安全员B证备考真题及答案解析
- 上市公司股份转让协议书
- 中小学班主任基本功素质大赛情景答辩题附参考答案
评论
0/150
提交评论