汇编语言程序设计第四章汇编语言程序格式.ppt

上传人:laozhun 文档编号:2978207 上传时间:2023-03-07 格式:PPT 页数:153 大小:672.50KB
返回 下载 相关 举报
汇编语言程序设计第四章汇编语言程序格式.ppt_第1页
第1页 / 共153页
汇编语言程序设计第四章汇编语言程序格式.ppt_第2页
第2页 / 共153页
汇编语言程序设计第四章汇编语言程序格式.ppt_第3页
第3页 / 共153页
汇编语言程序设计第四章汇编语言程序格式.ppt_第4页
第4页 / 共153页
汇编语言程序设计第四章汇编语言程序格式.ppt_第5页
第5页 / 共153页
点击查看更多>>
资源描述

《汇编语言程序设计第四章汇编语言程序格式.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计第四章汇编语言程序格式.ppt(153页珍藏版)》请在三一办公上搜索。

1、第四章 汇编语言程序格式,河南师范大学计算机与信息技术学院,2,2023/3/7,硬指令和伪指令,硬指令:使CPU产生动作、并在程序执行时才处理的语句。就是第3章学习的处理器指令。,伪指令(伪操作:Directive):不产生CPU动作、在程序执行前由汇编程序处理的说明性语句。例如,处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等等。,伪指令与具体的处理器类型无关,但与汇编程序的版本有关。,河南师范大学计算机与信息技术学院,3,2023/3/7,本章内容提要,河南师范大学计算机与信息技术学院,4,2023/3/7,4.1 汇编语言程序的开发,河南师范大学计算机与信息技术学院,5,

2、2023/3/7,4.1.1 汇编程序功能,河南师范大学计算机与信息技术学院,6,2023/3/7,1.汇编语言程序的建立及汇编过程,在计算机上运行汇编语言程序的步骤是:,用编辑程序建立ASM源文件;,汇编语言程序的建立及汇编过程,如图4.1所示。,用MASM程序把ASM文件转换成OBJ文件;,用LINK程序把OBJ文件转换成EXE文件;,用DOS命令直接键入文件名就可执行该程序。,河南师范大学计算机与信息技术学院,7,2023/3/7,2.汇编程序的主要功能,检查源程序。,测出源程序中的语法错误,并给出出错信息。,产生源程序的目标程序,并可给出列表文件(同时列出汇编语言和机器语言的文件,称为

3、LST文件)。,展开宏指令。,河南师范大学计算机与信息技术学院,8,2023/3/7,3.常用的汇编程序,Microsoft公司推出的宏汇编程序MASM(Macro Assembler);,Borland公司推出的TASM(Turbo Assembler)。,本课程采用MASM6.11。,河南师范大学计算机与信息技术学院,9,2023/3/7,4.1.2 汇编语言程序的语句格式,汇编语言语句格式:,说明性语句由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:,执行性语句由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:,nameoperation operand;comme

4、nt,标号:硬指令助记符 操作数,操作数;注释,名字 伪指令助记符 参数,参数,;注释,河南师范大学计算机与信息技术学院,10,2023/3/7,1.名字(name)项,源程序中用下列字符来表示名字项(name):,注意:,字母AZ数字09专用字符?,$,名字不能以数字开头。名字中如果用到,则必须是第一个字符。汇编程序只识别名字的前31个字符。默认情况下,汇编程序不区别标识符中的字母大小写。,河南师范大学计算机与信息技术学院,11,2023/3/7,1.名字(name)项,name可以是标号或变量。它们都用来表示本语句的符号地址,都是可有可无的,只有当需要用到符号地址来访问该语句时,它才需要出

5、现。,标号:,在代码段中定义,是反映硬指令位置(逻辑地址)的标识符,后跟一个冒号分隔。经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。,河南师范大学计算机与信息技术学院,12,2023/3/7,1.名字(name)项,名字:,标识符(Identifier):,每个标识符的定义是唯一的,还不能是汇编语言采用的保留字。,是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格或制表符分隔,没有冒号。,可用LABEL或EQU伪操作来定义。,还可以作为过程名定义(第六章中介绍)。,河南师范大学计算机与信息技术学院,13,2023/3/7,2.保留字,保留字(Reserved Word)是汇

6、编程序已经利用的标识符,主要有:,硬指令助记符例如:MOV、ADD伪指令助记符例如:DB、EQU操作符例如:OFFSET、PTR寄存器名例如:AX、CS预定义符号例如:data,河南师范大学计算机与信息技术学院,14,2023/3/7,3.指令助记符,硬指令助记符可以是任何一条处理器指令,也可以是一条宏指令。,伪指令助记符将在本章和下章学习。,前一章引入的定义字节数据和字符串的DB就是伪指令。,河南师范大学计算机与信息技术学院,15,2023/3/7,4.操作数与参数,处理器指令的操作数可以是立即数、寄存器和存储单元。,伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔。

7、,河南师范大学计算机与信息技术学院,16,2023/3/7,5.注释(comment)项,用来说明程序或语句的功能。,汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理。,;为注释的开始。,;可以从一行的第一个字符开始,此时整行都是注释,常用来说明下面一段程序的功能。,河南师范大学计算机与信息技术学院,17,2023/3/7,6.分隔符,语句的4个组成部分要用分隔符分开。,其他部分通常采用空格或制表符。,标号后用冒号,注释前用分号。,操作数之间和参数之间使用逗号分隔。,多个空格和与一个制表符的作用相同。,MASM支持续行符“”。,河南师范大学计算机与信息技术学院,18,2023/3/7,4

8、.1.3 汇编语言程序的程序格式,完整的汇编语言源程序由段组成。,一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列。,需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。,所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内。,通常,程序还需要一个堆栈段。,汇编语言源程序段定义格式有两种:简化段定义格式从MASM 5.0开始支持 完整段定义格式MASM 5.0以前就具有,河南师范大学计算机与信息技术学院,19,2023/3/7,4.1.3 汇编语言程序的程序格式,Mainprocfarassumec

9、s:program,ds:datareaStart:push dssub ax,axpush axmov ax,datareamov ds,axretMainendp,首先把DS的内容和0作为段地址和偏移地址入栈,以便在程序结束时用RET指令返回DOS,这是一种工作方式。,mov ax,4c00hint 21h,如果在主程序开始时没有这三条指令在堆栈段建立返回信息,则在程序结束时就不能直接用RET返回指令,而应该用DOS功能调用4CH:,河南师范大学计算机与信息技术学院,20,2023/3/7,4.1.4 汇编语言程序的上机过程,1.建立汇编语言的工作环境,2.建立ASM文件;,3.用MASM

10、程序产生OBJ文件;,4.用LINK程序产生EXE文件;,5.程序的执行。,河南师范大学计算机与信息技术学院,21,2023/3/7,1.建立汇编语言的工作环境,为运行汇编语言程序至少要在磁盘上建立以下文件:,必要时,还可建立如CREF.EXE,EXE2BIN.EXE等文件。,编辑程序,如EDIT.EXE汇编程序,如MASM.EXE连接程序,如LINK.EXE调试程序,如DEBUG.COM,河南师范大学计算机与信息技术学院,22,2023/3/7,2.建立ASM文件,用编辑程序EDIT在磁盘上建立如下的源程序EX_MOVS.ASM。,例4.30 把40个字母a的字符串从源缓冲区传送到目的缓冲区

11、。,河南师范大学计算机与信息技术学院,23,2023/3/7,3.用MASM程序产生OBJ文件,用汇编程序对源程序文件汇编,产生二进制的目标文件(.OBJ文件),其操作与汇编程序回答如下:,Cmasm ex_movsMicrosoft(R)Macro Assembler Version 5.00Copyritht(C)Microsoft Corp 1981-1985,1987,All rights reserved.Object filename ex_movs,obj:Source listing NUL.LST:ex_movsCross-reference NUL.CRF:ex_movs5

12、1646+447778 Bytes symbol space free0 Warning Errors0 Severe Errors,河南师范大学计算机与信息技术学院,24,2023/3/7,3.用MASM程序产生OBJ文件,例4.30的列表文件EX_MOVS.LST。,这个文件同时列出了源程序和机器语言程序清单,并给出符号表,方便程序调试。这个文件可有可无,如果不需要,则直接在 NUL.LST:后敲回车;否则,可回答文件名,这里是ex_movs。,程序请看教材P148-151。,河南师范大学计算机与信息技术学院,25,2023/3/7,4.用LINK程序产生EXE文件,OBJ文件不是可执行文

13、件,还需要用连接程序LINK把OBJ文件转换为可执行的EXE文件。,Clink ex_movsMicrosoft(R)Macro Assembler Version 5.00Copyritht(C)Microsoft Corp 1981-1985,1987,All rights reserved.Run File EX_MOVS.EXE:List File NUL.MAP:ex_movsLibraries.LIB:LINK:Warning L4021:no stack segment,如果一个程序是由多个模块组成时,也要通过连接程序LINK把它们连接在一起,操作方法及机器回答如下:,河南师范大

14、学计算机与信息技术学院,26,2023/3/7,4.用LINK程序产生EXE文件,LINK程序有两个输入文件OBJ和LIB。,LINK程序有两个输出文件EXE和MAP。,OBJ是需要连接的目标文件;LIB是程序中要用到的库文件,如无需要,则直接敲回车。,EXE是最后得到的可执行文件;直接敲回车。MAP是连接程序的列表文件,又称为连接映像(link map),它给处每个段在存储器中的分配情况。,例4.30的连接映像EX_MOVS.MAP文件,河南师范大学计算机与信息技术学院,27,2023/3/7,5.程序的执行,在建立了EXE文件后,就可以直接从DOS执行程序,如下所示:,如果用户程序中,有在

15、终端显示结果的语句,则程序运行结束,可在终端看到运行结果。,程序运行结束并返回DOS。,EX_MOVS程序没有显示结果的语句,则可通过调试程序DEBUG的D命令来检查附加段是否已得到了从源缓冲区传来的40个字母a。,Cex_movsC,河南师范大学计算机与信息技术学院,28,2023/3/7,4.2 参数、变量、标号及相关伪操作,河南师范大学计算机与信息技术学院,29,2023/3/7,4.2.1 数值型参数,参数是指令的操作对象(在学习硬指令时被称为操作数),由一个或多个表达式组成,参数之间用逗号分隔。,参数根据指令不同可以没有,可以有1个、2个或多个。,汇编语言程序中,参数可以是常数、寄存

16、器、标号、变量或由表达式组成。,指令参数有数值型,它的主要形式是常数和数值表达式。,硬指令的操作数有立即数;立即数就要用数值型参数表达。,河南师范大学计算机与信息技术学院,30,2023/3/7,4.2.1 数值型参数,河南师范大学计算机与信息技术学院,31,2023/3/7,1.常数,常数(常量)表示一个固定的数值。,它又分成多种形式:,十进制常数,表达式赋值伪操作EQU,十六进制常数,二进制常数,字符串常数,符号常数,基数控制伪操作,河南师范大学计算机与信息技术学院,32,2023/3/7,(1)十进制常数,由0 9数字组成,以字母D或d结尾。,缺省情况下,后缀D或d可以省略。,汇编语言大

17、小写不敏感,D和d通用。,例如:100、255D,河南师范大学计算机与信息技术学院,33,2023/3/7,(2)十六进制常数,由09、AF组成,以字母H或h结尾。,以字母AF开头的十六进制数,前面要用0表达,以避免与其他符号混淆。,汇编语言大小写不敏感,H和h 通用,例如:64H、0FFh、0B800H,河南师范大学计算机与信息技术学院,34,2023/3/7,(3)二进制常数,由0或1两个数字组成,以字母B或b结尾。,汇编语言大小写不敏感,B和b通用。,例如:01101100B,河南师范大学计算机与信息技术学院,35,2023/3/7,(4)八进制常数,由0 7数字组成,以字母Q或q结尾。

18、,汇编语言大小写不敏感,Q和 q 通用。,例如:144Q,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数。,河南师范大学计算机与信息技术学院,36,2023/3/7,(5)基数控制伪操作,MASM提供基数控制.RADIX伪指令可以改变默认进制,其格式是:.RADIX n,其中,n用来表示基数值(用十进制数表示)。,例如:MOVBX,0FFH.RADIX16与MOV BX,178MOVBX,0FFHMOVBX,178D是等价的。,.RADIX 16把基数定位十六进制后,十进制数后面都应跟字母D。如果某个十六进制数的末字符为D,则应在其后跟字母H,以免与十进制数发生混淆。,河南师范大学

19、计算机与信息技术学院,37,2023/3/7,(6)字符串常数,用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值。,例如:d=64HAB=4142HHello,Everybody!,河南师范大学计算机与信息技术学院,38,2023/3/7,(7)符号常数,利用一个标识符表达的一个数值。,MASM提供等价机制,用于常量定义。,符号定义伪指令:,常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性。,等价EQU伪指令,等号=伪指令,河南师范大学计算机与信息技术学院,39,2023/3/7,(8)表达式赋值伪操作EQU,符号定义伪指令:用于常量定义

20、,利用一个标识符表达的一个数值。,等价EQU伪指令:Expression_name EQU Expression,符号名 EQU 数值表达式符号名 EQU,其中符号名不允许重复定义。,等号=伪指令,符号名=数值表达式,符号名允许重复定义。,常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性。,二者区别,示例2,示例1,河南师范大学计算机与信息技术学院,40,2023/3/7,2.数值型表达式,数值表达式一般是指由运算符连接的各种常数所构成的表达式。,MASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator)。,程序运行之前,就已经计算出了表达式;所以,程序运行

21、速度没有变慢,但增强程序的可读性。,汇编程序在汇编过程中计算表达式,最终得到一个数值。,河南师范大学计算机与信息技术学院,41,2023/3/7,运算符,算术运算符+-*/MOD,逻辑运算符AND OR XOR NOT,移位运算符SHL SHR,关系运算符EQ NE GT LT GE LE,高低分离符HIGH LOW HIGHWORD LOWWORD,河南师范大学计算机与信息技术学院,42,2023/3/7,(1)算术运算符,实现加、减、乘、除、取余的算术运算mov ax,3*4+5;等价于 mov ax,17,其中MOD也称为取模,它产生除法之后的余数,如19 mod 7=5,加+和减-运算

22、符还可以用于地址表达式。,示例1,除加、减外,其他运算符的参数必须是整数。,两个地址相乘、相除是无意义的;两个不同段的地址相加也是无意义的。经常使用的是地址数字量,它是有意义的。,示例2,河南师范大学计算机与信息技术学院,43,2023/3/7,(2)逻辑运算符,实现按位相与、相或、异或、求反的逻辑运算。or al,03h AND 45h;等价于 or al,01h,示例,河南师范大学计算机与信息技术学院,44,2023/3/7,(3)移位运算符,实现对数值的左移、右移的逻辑操作;移入低位或高位的是0。,格式为:数值表达式 SHL/SHR 移位次数,若移位次数大于15,则结果为0。,例如:mo

23、v al,0101b SHL(2*2);等价于 mov al,01010000b,河南师范大学计算机与信息技术学院,45,2023/3/7,(4)关系运算符,用于比较和测试符号数值。,关系运算符的两个操作数必须是数字,或是同一段内的两个存储器地址。,MASM用0FFFFH(补码-1)表示条件为真。,MASM用0000H表示条件为假。,示例,河南师范大学计算机与信息技术学院,46,2023/3/7,(5)高低分离符,取数值的高半部分或低半部分。,HIGH、LOW字节分离符:从一个字数值或符号常量中得到高、低字节。,HIGHWORD、LOWWORD字分离符:从MASM 6.0引入的,取一个符号常量

24、(不能是其他常数)的高字或低字部分。,示例,河南师范大学计算机与信息技术学院,47,2023/3/7,3.运算符的优先级,1()LENGTH SIZE WIDTH MASK2PTR OFFSET SEG TPYE THIS:3HIGE LOW4*/MOD SHL SHR5+-6EQ NE GT LT GE LE7NOT8AND9OR XOR10SHORT,建议采用圆括号“()”显式表达,它可以极大地提高程序的可阅读性。,河南师范大学计算机与信息技术学院,48,2023/3/7,4.地址型参数,汇编语言程序中,指令参数还有地址型,它的主要形式是标号和名字(变量名、段名、过程名等)。,硬指令的操作

25、数有存储单元;存储单元就应该用地址型参数(存储器操作数)表达。,河南师范大学计算机与信息技术学院,49,2023/3/7,4.2.2 数据定义及存储器分配伪操作,该类伪操作又称变量定义伪指令。,变量定义(Define)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化。变量名 伪指令助记符 初值表,格式:Variable Mnemonic Operand,Operand;Commnet,河南师范大学计算机与信息技术学院,50,2023/3/7,变量名(variable),变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址。,变量名可以没有。

26、这种情况,汇编程序将直接为初值表分配空间,无符号地址。,设置变量名是为了方便存取它指示的存储单元。,河南师范大学计算机与信息技术学院,51,2023/3/7,初值表,初值表是用逗号分隔的参数。,主要由数值常数、表达式或?、DUP组成,?表示初值不确定,即未赋初值;DUP表示重复初值。,DUP的格式为:,重复次数 DUP(重复参数)Repeat_count DUP(operand,opreand),其中repeat_count可以是一个表达式,它的值应该是一个正整数,用来指定括号中的操作数的重复次数。,河南师范大学计算机与信息技术学院,52,2023/3/7,变量定义伪指令助记符(Mnemoni

27、c),变量定义伪指令根据申请的主存空间单位分类,说明所定义的数据类型。,DB定义字节伪指令DW定义字伪指令DD定义双字伪指令DF定义3字伪指令DQ定义4字伪指令DT定义10字节伪指令,这些伪操作可以把其后跟着的数据存入指定的存储单元,形成初始化数据;或者只分配存储空间而并不存入确定的数值,形成未初始化数据。,可存储由16位段地址及32位偏移地址组成的远地址指针。,可存储地址,形成压缩BCD码,河南师范大学计算机与信息技术学院,53,2023/3/7,1.定义字节单元伪指令DB,DB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值。,初值表中每个数据一定是字节量(Byte),存放一个

28、8位数据:,可以是0255的无符号数或是128127带符号数也可以是字符串常数,示例1,示例2,河南师范大学计算机与信息技术学院,54,2023/3/7,2.定义字单元伪指令DW,DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值。,初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据:,一个段地址一个偏移地址两个字符065535之间的无符号数3276832767之间的带符号数,河南师范大学计算机与信息技术学院,55,2023/3/7,3.定义双字单元伪指令DD,DD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值。,初值表中每个数据是一个32位的

29、双字量(Double Word):,可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针varddDD 0,?,12345678hfarpointDD 00400078h,示例1,示例2,示例3,示例4,河南师范大学计算机与信息技术学院,56,2023/3/7,4.其他数据单元定义伪指令,定义3字伪指令DF用于为一个或多个6字节变量分配空间及初始化。6字节常用在32位CPU中表示一个48位远指针(16位段选择器:32位偏移地址),定义4字伪指令DQ用于为一个或多个8字节变量分配空间及初始化。8字节变量可以表达一个64位整数,定义10字节伪指

30、令DT用于为一个或多个10字节变量分配空间及初始化。10字节变量可以表达扩展精度浮点数,示例,河南师范大学计算机与信息技术学院,57,2023/3/7,5.变量定义伪指令使用说明,操作数中的变量或标号可以是表达式,汇编后,存储器中应该存入表达式的值。,DB、DW、DD、DF、DQ、DT等伪操作在MASM6中可用BYTE、WORD、DWORD、FWORD、QWORD、TBYTE来取代,其含义是等同的。,河南师范大学计算机与信息技术学院,58,2023/3/7,4.2.3 地址计数器与对准伪操作,河南师范大学计算机与信息技术学院,59,2023/3/7,1.地址计数器$,地址计数器(locatio

31、n counter)用来保存当前正在汇编的指令的偏移地址。,当开始汇编或在每一段开始时,把地址计数器初始化为零。,汇编过程中,每处理一条指令,地址计数器就增加一个值,此值为该指令所需要的字节数。,地址计数器的值可用符号“$”表示。,汇编语言允许用户直接用$来引用地址计数器的值。,示例,河南师范大学计算机与信息技术学院,60,2023/3/7,2.ORG伪操作,定位伪指令控制数据的偏移地址。,ORG 参数或ORG constant expression,ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址。,ORG 100h;从100h处安排数据或程序ORG$+10;使偏移地址加10,即跳过1

32、0个字节空间,如常数表达式的值为n,则ORG伪操作可以使下一个字节的地址成为常数表达式的值n。,常数表达式也可以表示从当前已定义过的符号开始的位移量,或表示从当前地址计数器值$开始的位移量。,示例1,示例2,河南师范大学计算机与信息技术学院,61,2023/3/7,3.EVEN伪操作,EVEN;从偶地址开始,EVEN伪指令使下一个变量或指令开始于偶数字节地址。,EVEN伪操作可以保证字数组从偶数地址开始。,例如:DATA_SEGSEGMENTEVENWORD_ARRAYDW 100 DUP(?)DATA_SEGENDS,河南师范大学计算机与信息技术学院,62,2023/3/7,4.ALIGN伪

33、操作,ALIGN n;从n的整数倍地址开始,ALIGN伪操作是将当前偏移地址指针指向n(n是2的乘方)的整数倍的地址。如果原地址指针已指向n的整数倍地址,则不做调整;否则将指针加以1n-1中的一个数,使地址指针指向下一个n的整数倍地址。,ALIGN 2与EVEN等价。,示例,河南师范大学计算机与信息技术学院,63,2023/3/7,4.2.4 变量和标号的属性,标号和名字一经定义便具有以下两类三种属性:,段值标号和名字对应存储单元的段地址。偏移值标号和名字对应存储单元的偏移地址。类型 标号、子程序名的类型可以是NEAR(近)和FAR(远),分别表示段内或段间。变量名的类型可以是BYTE(字节)

34、、WORD(字)和DWORD(双字)等。,河南师范大学计算机与信息技术学院,64,2023/3/7,4.2.4 变量和标号的属性,变量的类型属性(type attribute):用来表示该语句中的每一个数据项的长度(以字节为单位表示)。,因此,DB/DW/DD/DF/DQ/DT伪操作的类型属性分别为1、2、4、6、8、10。,变量表达式的属性和变量是相同的。汇编程序可以用这种隐含的类型属性来确定某些指令是字指令还是字节指令。,示例1,示例2,河南师范大学计算机与信息技术学院,65,2023/3/7,4.2.4 变量和标号的属性,河南师范大学计算机与信息技术学院,66,2023/3/7,1.地址

35、操作符,取得名字或标号的段地址和偏移地址两个属性。,将括起的表达式作为存储器地址$当前偏移地址:采用指定的段地址寄存器OFFSET 名字/标号;返回名字或标号的偏移地址SEG 名字/标号;返回名字或标号的段地址,示例1,示例2,河南师范大学计算机与信息技术学院,67,2023/3/7,2.类型操作符,类型操作符对名字或标号的类型属性进行有关设置。,类型名 PTR 名字/标号,THIS 类型名,SHORT 标号,TYPE 名字/标号,SIZEOF 变量名,LENGTHOF 变量名,河南师范大学计算机与信息技术学院,68,2023/3/7,(1)类型名 PTR 名字/标号,PTR操作符使名字或标号

36、具有指定的类型。,类型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是NEAR/FAR,还可以是由STRUCT、RECORD、UNION以及TYPEDEF定义的类型。mov al,byte ptr w_var;w_var是一个字变量jmp far ptr n_label;n_label是一个标号,使用PTR操作符,可以临时改变名字或标号的类型。,示例,河南师范大学计算机与信息技术学院,69,2023/3/7,(2)THIS 类型名,利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型。,LABEL伪指令的功能等同于“EQU THIS”。,示例1,示

37、例2,河南师范大学计算机与信息技术学院,70,2023/3/7,(3)SHORT 标号,用来修饰JMP指令中转向地址的属性。,指定标号作为-128+127字节范围内的短转移。jmp short n_jump,当然,如果标号实际上超出了这个范围,则出错。,河南师范大学计算机与信息技术学院,71,2023/3/7,(4)TYPE 名字/标号,返回表明名字或标号类型的一个字量数值:,对变量,则返回该变量的以字节数表示的类型。DB/DW/DD/DF/DQ/DT伪操作的类型属性分别为1、2、4、6、8、10。对短、近和远转移依次返回ff01h、ff02h和ff05h。对常数,返回0。,示例,河南师范大学

38、计算机与信息技术学院,72,2023/3/7,(5)LENGTH/LENGTHOF 变量,LENGTH对于变量中使用DUP的情况,将返回分配给该变量的单元数,对于其他情况则送1。,LENGTHOF返回整个变量的数据项数(即元素数)。,河南师范大学计算机与信息技术学院,73,2023/3/7,(6)SIZE/SIZEOF 变量,SIZE返回LENGTH与TYPE的乘积。,操作符SIZEOF返回整个变量占用的字节数。SIZEOF LENGTHOF TYPE,示例1,示例2,示例3,河南师范大学计算机与信息技术学院,74,2023/3/7,4.3 程序段的定义及相关伪操作,河南师范大学计算机与信息技

39、术学院,75,2023/3/7,4.3.1 DOS的程序结构,河南师范大学计算机与信息技术学院,76,2023/3/7,1.EXE程序,它可以有独立的代码、数据和堆栈段,还可以有多个代码段或多个数据段,程序长度可以超过64KB,执行起始处可以任意指定。,利用程序开发工具,通常将生成EXE结构的可执行程序(扩展名为.EXE的文件)。,当DOS装入或执行一个程序时,DOS确定当时主存最低的可用地址作为该程序的装入起始点。此点以下的区域称为程序段。在程序段内偏移0处,DOS为该程序建立一个程序段前缀控制块PSP(Program Segment Prefix),它占256(=100h)个字节;而在偏移

40、100h处才装入程序本身。,河南师范大学计算机与信息技术学院,77,2023/3/7,EXE程序的内存映像图,河南师范大学计算机与信息技术学院,78,2023/3/7,2.COM程序,在程序开发时,需要满足一定要求并采用相应参数才能正确生成COM结构的程序。,COM程序是一种将代码、数据和堆栈段合一的结构紧凑的程序,所有代码、数据都在一个逻辑段内,不超过64KB,因而只能用来编制较小的程序。,COM文件存储在磁盘上是主存的完全影象,不包含重新定位的加载信息,与EXE文件相比其加载速度更快,占用的磁盘空间也少。,尽管DOS也为COM程序建立程序段前缀PSP,但由于两种文件结构不同,所以加载到主存

41、后各段设置并不完全一样。,河南师范大学计算机与信息技术学院,79,2023/3/7,2.COM程序,由于其小而简单,装入速度比EXE文件要快。,COM文件也是一种可执行文件,由程序本身的二进制代码组成,它没有EXE文件所具有的包括有关文件信息的标题区(header),所以它占有的存储空间比EXE文件要小。,COM文件不分段,其入口点必须是100H(其前的256个字节为程序段前缀所在地),且不必设置堆栈段。,在程序装入时,由系统自动把SP建立在该段之末。,对于所有的过程则应定义为NEAR。,河南师范大学计算机与信息技术学院,80,2023/3/7,COM程序的内存映像图,河南师范大学计算机与信息

42、技术学院,81,2023/3/7,COM程序的生成,第一个filename给出已形成的EXE文件的文件名,但不必给出扩展名。,第二个filename即为所要求的COM文件的文件名,必须带有扩展名,这样就形成了COM文件。,用户在建立源程序后,同样经过汇编、连接形成EXE文件,然后可以通过EXE2BIN程序来建立COM文件,操作方法如下:Cexe2bin filename,在DOS系统下,可直接在机器上用文件名执行。,如果第二个filename后没有带扩展名,则生成BIN文件。在DOS系统运行时,必须先用rename命令将它改名为COM文件才能直接运行。,COM文件还可以直接在调试程序DEBUG

43、中用A或E命令建立,对于一些短小的程序,这也是一种相当方便的方法。,河南师范大学计算机与信息技术学院,82,2023/3/7,4.3.2 处理器选择伪操作,本组伪操作的就是告诉汇编程序应该选择哪一种指令系统。,由于80 x86的所有处理器都支持8086/8088指令系统,但每一种高档机型又都增加了一些新的指令,因此在编写程序时都要对所用处理器有一个确定的选择。,本组伪操作的位置:,一般放在整个程序的最前面,如不给出处理器选择,则默认为.8086。,也可放在程序中,如程序中用了一条80486所增加的指令,则可在该指令的上一行加上.486。,河南师范大学计算机与信息技术学院,83,2023/3/7

44、,4.3.2 处理器选择伪操作,主要有以下几种:,.8086选择8086指令系统.286选择80286指令系统.286 P选择保护方式下的80286指令系统.386选择80386指令系统.386 P选择保护方式下的80386指令系统.486选择80486指令系统.486 P选择保护方式下的80486指令系统.586选择Pentium指令系统.586 P选择保护方式下的Pentium指令系统,指包括特权指令在内的指令系统,河南师范大学计算机与信息技术学院,84,2023/3/7,4.3.3 段定义伪操作,河南师范大学计算机与信息技术学院,85,2023/3/7,1.完整段定义伪操作,段名segm

45、ent 定位 组合 段字 类别.;语句序列段名ends,完整段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束。,段定义指令后的4个关键字用于确定段的各种属性,堆栈段要采用stack组合类型,代码段应具有code类别,其他为可选属性参数。,如果不指定,则采用默认参数;但如果指定,注意要按照上列次序。,数据段、附加段、和堆栈段中,一般是存储单元的定义、分配等伪操作;代码段则是指令及伪操作。,河南师范大学计算机与信息技术学院,86,2023/3/7,(1)定位类型(align_type),PARA 段的起始地址必须从小段边界开

46、始(xxxx 0000b)。这样,偏移地址可以从0开始。BYTE 该段可以从任何地址开始(xxxx xxxxb),这样起始偏移地址可能不是0。WORD 该段必须从字的边界开始(xxxx xxx0b),即段起始地址必须为偶数。DWORD 该段必须从双字的边界开始(xxxxxx00b)。PAGE 该段必须从页的边界开始(0000 0000b),该地址能被256整除。,指定逻辑段在主存储器中的边界,可为:,简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位。,完整段定义伪指令的默认定位属性是PARA,其低4位已经是0,所以默认情况下数据段的偏移地址从0开始。,河南师范大学

47、计算机与信息技术学院,87,2023/3/7,(2)组合类型(combine_type),PRIVATE该段为私有段,在连接时将不与其他模块中同名分段合并。这是完整段定义伪指令默认的段组合方式。,PUBLIC该段连接时,可以把不同模块中的同名段相邻地连接在一起,其连接次序由连接命令指定。每一分段都从小段的边界开始,因此个模块的原有段之间可能存在小于16字节的间隙。这是简化段定义伪指令默认的段组合。,指定多个逻辑段之间的关系,可为:,MEMORY与PUBLIC同义。,河南师范大学计算机与信息技术学院,88,2023/3/7,(2)组合类型(cobmine_type),STACK把不同模块中的同名

48、段组合而形成一个堆栈段。该段的长度为各原有段的总和,各原有段之间并无PUBLIC所连接段中的间隙,而且栈顶可自动指向连接后形成的大段堆栈段的栈顶。这是堆栈段必须具有的段组合。,COMMON该段连接时,可以把不同模块中的同名段重叠而形成一个段,由于各同名段有相同的起始地址,所以会产生覆盖。COMMON的连接长度是各分段中的最大长度。重叠部分的内容取决于排列在最后一段的内容。,AT expression使段地址是表达式所计算出来的16位值。但它不能用来指定代码段。,河南师范大学计算机与信息技术学院,89,2023/3/7,(3)使用类型(use_type),为支持32位段而设置的属性,只适用于38

49、6及其后继机型。,它用来说明使用16位寻址方式还是32位寻址方式。它们可以是:,USE16使用16位寻址方式。USE32使用32位寻址方式。,当使用16位寻址方式时,段长=64KB,地址的形式是16位段地址和16偏移地址;当使用32位寻址方式时,段长可大4GB,地址的形式是16位段地址和32位偏移地址。,编写运行于实模式(8086工作方式)的汇编语言程序,必须采用USE16。,使用类型的默认项是USE16。,河南师范大学计算机与信息技术学院,90,2023/3/7,(4)类别(class),在引号中给出连接时组成段组的类型名,段组的类型名可以是任意名称。,大多数MASM程序使用 code、da

50、ta和stack来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续。,类型说明并不能把相同类别的段合并起来,但在连接程序组织段时,可将所有的同类别段相邻分配。,河南师范大学计算机与信息技术学院,91,2023/3/7,指定段寄存器伪指令ASSUME,ASSUME 段寄存器:段名,段寄存器名:段名,.,ASSUME说明分配情况。汇编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀。这是ASSUME伪指令的主要功能。,其中段寄存器必须是CS、DS、ES、SS(386及其后继机型还有FS和GS)之一,段名则必须是由SEGMENT定义的段中的段名。,通知MASM用指定的段寄存器来寻址对

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号