汇编语言程序格式.ppt

上传人:max****ui 文档编号:15255905 上传时间:2020-08-06 格式:PPT 页数:152 大小:816.31KB
收藏 版权申诉 举报 下载
汇编语言程序格式.ppt_第1页
第1页 / 共152页
汇编语言程序格式.ppt_第2页
第2页 / 共152页
汇编语言程序格式.ppt_第3页
第3页 / 共152页
资源描述:

《汇编语言程序格式.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序格式.ppt(152页珍藏版)》请在装配图网上搜索。

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

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

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

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

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

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

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

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

9、.3 汇编语言程序的程序格式,Mainprocfar assumecs: program , ds: datarea Start: push ds sub ax , ax push ax mov ax , datarea mov ds , ax ret Mainendp,首先把DS的内容和0作为段地址和偏移地址入栈,以便在程序结束时用RET指令返回DOS,这是一种工作方式。,mov ax , 4c00h int 21h,如果在主程序开始时没有这三条指令在堆栈段建立返回信息,则在程序结束时就不能直接用RET返回指令,而应该用DOS功能调用4CH:,河南师范大学计算机与信息技术学院,20,2020

10、/8/6,4.1.4 汇编语言程序的上机过程,1.建立汇编语言的工作环境,2.建立ASM文件;,3.用MASM程序产生OBJ文件;,4.用LINK程序产生EXE文件;,5.程序的执行。,河南师范大学计算机与信息技术学院,21,2020/8/6,1. 建立汇编语言的工作环境,为运行汇编语言程序至少要在磁盘上建立以下文件:,必要时,还可建立如CREF.EXE,EXE2BIN.EXE等文件。,编辑程序,如EDIT.EXE 汇编程序,如MASM.EXE 连接程序,如LINK.EXE 调试程序,如DEBUG.COM,河南师范大学计算机与信息技术学院,22,2020/8/6,2. 建立ASM文件,用编辑程

11、序EDIT在磁盘上建立如下的源程序EX_MOVS.ASM。,例4.30 把40个字母a的字符串从源缓冲区传送到目的缓冲区。,河南师范大学计算机与信息技术学院,23,2020/8/6,3. 用MASM程序产生OBJ文件,用汇编程序对源程序文件汇编,产生二进制的目标文件(.OBJ文件),其操作与汇编程序回答如下:,Cmasm ex_movs Microsoft ( R ) Macro Assembler Version 5.00 Copyritht ( C ) Microsoft Corp 1981-1985, 1987 , All rights reserved. Object filename

12、 ex_movs , obj : Source listing NUL. LST :ex_movs Cross-reference NUL . CRF :ex_movs 51646+447778 Bytes symbol space free 0 Warning Errors 0 Severe Errors,河南师范大学计算机与信息技术学院,24,2020/8/6,3. 用MASM程序产生OBJ文件,例4.30的列表文件EX_MOVS.LST。,这个文件同时列出了源程序和机器语言程序清单,并给出符号表,方便程序调试。 这个文件可有可无,如果不需要,则直接在 NUL . LST :后敲回车;否则

13、,可回答文件名,这里是ex_movs。,程序请看教材P148-151。,河南师范大学计算机与信息技术学院,25,2020/8/6,4. 用LINK程序产生EXE文件,OBJ文件不是可执行文件,还需要用连接程序LINK把OBJ文件转换为可执行的EXE文件。,Clink ex_movs Microsoft ( R ) Macro Assembler Version 5.00 Copyritht ( C ) Microsoft Corp 1981-1985, 1987 , All rights reserved. Run File EX_MOVS.EXE : List File NUL. MAP :

14、ex_movs Libraries. LIB: LINK:Warning L4021:no stack segment,如果一个程序是由多个模块组成时,也要通过连接程序LINK把它们连接在一起,操作方法及机器回答如下:,河南师范大学计算机与信息技术学院,26,2020/8/6,4. 用LINK程序产生EXE文件,LINK程序有两个输入文件OBJ和LIB。,LINK程序有两个输出文件EXE和MAP。,OBJ是需要连接的目标文件; LIB是程序中要用到的库文件,如无需要,则直接敲回车。,EXE是最后得到的可执行文件;直接敲回车。 MAP是连接程序的列表文件,又称为连接映像(link map),它给

15、处每个段在存储器中的分配情况。,例4.30的连接映像EX_MOVS.MAP文件,河南师范大学计算机与信息技术学院,27,2020/8/6,5. 程序的执行,在建立了EXE文件后,就可以直接从DOS执行程序,如下所示:,如果用户程序中,有在终端显示结果的语句,则程序运行结束,可在终端看到运行结果。,程序运行结束并返回DOS。,EX_MOVS程序没有显示结果的语句,则可通过调试程序DEBUG的D命令来检查附加段是否已得到了从源缓冲区传来的40个字母a。,Cex_movs C,河南师范大学计算机与信息技术学院,28,2020/8/6,4.2 参数、变量、标号及相关伪操作,河南师范大学计算机与信息技术

16、学院,29,2020/8/6,4.2.1 数值型参数,参数是指令的操作对象(在学习硬指令时被称为操作数),由一个或多个表达式组成,参数之间用逗号分隔。,参数根据指令不同可以没有,可以有1个、2个或多个。,汇编语言程序中,参数可以是常数、寄存器、标号、变量或由表达式组成。,指令参数有数值型,它的主要形式是常数和数值表达式。,硬指令的操作数有立即数;立即数就要用数值型参数表达。,河南师范大学计算机与信息技术学院,30,2020/8/6,4.2.1 数值型参数,河南师范大学计算机与信息技术学院,31,2020/8/6,1.常数,常数(常量)表示一个固定的数值。,它又分成多种形式:,十进制常数,表达式

17、赋值伪操作EQU,十六进制常数,二进制常数,字符串常数,符号常数,基数控制伪操作,河南师范大学计算机与信息技术学院,32,2020/8/6,(1)十进制常数,由0 9数字组成,以字母D或d结尾。,缺省情况下,后缀D或d可以省略。,汇编语言大小写不敏感,D和d通用。,例如:100、255D,河南师范大学计算机与信息技术学院,33,2020/8/6,(2)十六进制常数,由09、AF组成,以字母H或h结尾。,以字母AF开头的十六进制数,前面要用0表达,以避免与其他符号混淆。,汇编语言大小写不敏感, H和h 通用,例如:64H、0FFh、0B800H,河南师范大学计算机与信息技术学院,34,2020/

18、8/6,(3)二进制常数,由0或1两个数字组成,以字母B或b结尾。,汇编语言大小写不敏感,B和b通用。,例如:01101100B,河南师范大学计算机与信息技术学院,35,2020/8/6,(4)八进制常数,由0 7数字组成,以字母Q或q结尾。,汇编语言大小写不敏感,Q和 q 通用。,例如:144Q,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数。,河南师范大学计算机与信息技术学院,36,2020/8/6,(5)基数控制伪操作,MASM提供基数控制.RADIX伪指令可以改变默认进制,其格式是: .RADIX n,其中,n用来表示基数值(用十进制数表示)。,例如: MOVBX , 0F

19、FH.RADIX16 与 MOV BX , 178MOVBX , 0FFH MOVBX , 178D 是等价的。,.RADIX 16把基数定位十六进制后,十进制数后面都应跟字母D。 如果某个十六进制数的末字符为D,则应在其后跟字母H,以免与十进制数发生混淆。,河南师范大学计算机与信息技术学院,37,2020/8/6,(6)字符串常数,用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值。,例如: d = 64H AB= 4142H Hello, Everybody !,河南师范大学计算机与信息技术学院,38,2020/8/6,(7)符号常数,利用一个标识符表达的一

20、个数值。,MASM提供等价机制,用于常量定义。,符号定义伪指令:,常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性。,等价EQU伪指令,等号=伪指令,河南师范大学计算机与信息技术学院,39,2020/8/6,(8)表达式赋值伪操作EQU,符号定义伪指令:用于常量定义,利用一个标识符表达的一个数值。,等价EQU伪指令:Expression_name EQU Expression,符号名 EQU 数值表达式 符号名 EQU ,其中符号名不允许重复定义。,等号=伪指令,符号名 = 数值表达式,符号名允许重复定义。,常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有

21、通用性。,二者区别,示例2,示例1,河南师范大学计算机与信息技术学院,40,2020/8/6,2. 数值型表达式,数值表达式一般是指由运算符连接的各种常数所构成的表达式。,MASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator)。,程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性。,汇编程序在汇编过程中计算表达式,最终得到一个数值。,河南师范大学计算机与信息技术学院,41,2020/8/6,运算符,算术运算符 + - * / MOD,逻辑运算符 AND OR XOR NOT,移位运算符 SHL SHR,关系运算符 EQ NE GT LT GE

22、LE,高低分离符 HIGH LOW HIGHWORD LOWWORD,河南师范大学计算机与信息技术学院,42,2020/8/6,(1)算术运算符,实现加、减、乘、除、取余的算术运算 mov ax , 3 * 4 + 5;等价于 mov ax,17,其中MOD也称为取模,它产生除法之后的余数,如 19 mod 7 = 5,加+和减-运算符还可以用于地址表达式。,示例1,除加、减外,其他运算符的参数必须是整数。,两个地址相乘、相除是无意义的; 两个不同段的地址相加也是无意义的。 经常使用的是地址数字量,它是有意义的。,示例2,河南师范大学计算机与信息技术学院,43,2020/8/6,(2)逻辑运算

23、符,实现按位相与、相或、异或、求反的逻辑运算。 or al , 03h AND 45h ; 等价于 or al , 01h,示例,河南师范大学计算机与信息技术学院,44,2020/8/6,(3)移位运算符,实现对数值的左移、右移的逻辑操作;移入低位或高位的是0。,格式为: 数值表达式 SHL/SHR 移位次数,若移位次数大于15,则结果为0。,例如: mov al , 0101b SHL (2*2) ;等价于 mov al,01010000b,河南师范大学计算机与信息技术学院,45,2020/8/6,(4)关系运算符,用于比较和测试符号数值。,关系运算符的两个操作数必须是数字,或是同一段内的两

24、个存储器地址。,MASM用0FFFFH(补码 -1)表示条件为真。,MASM用0000H表示条件为假。,示例,河南师范大学计算机与信息技术学院,46,2020/8/6,(5)高低分离符,取数值的高半部分或低半部分。,HIGH、LOW字节分离符:从一个字数值或符号常量中得到高、低字节。,HIGHWORD、LOWWORD字分离符:从MASM 6.0引入的,取一个符号常量(不能是其他常数)的高字或低字部分。,示例,河南师范大学计算机与信息技术学院,47,2020/8/6,3.运算符的优先级,1() LENGTH SIZE WIDTH MASK 2PTR OFFSET SEG TPYE THIS :

25、3HIGE LOW 4* / MOD SHL SHR 5+ - 6EQ NE GT LT GE LE 7NOT 8AND 9OR XOR 10SHORT,建议采用圆括号“()” 显式表达,它可以极大 地提高程序的可阅读性。,河南师范大学计算机与信息技术学院,48,2020/8/6,4.地址型参数,汇编语言程序中,指令参数还有地址型,它的主要形式是标号和名字(变量名、段名、过程名等)。,硬指令的操作数有存储单元;存储单元就应该用地址型参数(存储器操作数)表达。,河南师范大学计算机与信息技术学院,49,2020/8/6,4.2.2 数据定义及存储器分配伪操作,该类伪操作又称变量定义伪指令。,变量定

26、义(Define)伪指令为变量申请固定长度的存储空间,并可同时将相应的存储单元初始化。 变量名 伪指令助记符 初值表,格式: Variable Mnemonic Operand , , Operand ;Commnet,河南师范大学计算机与信息技术学院,50,2020/8/6,变量名(variable),变量名为用户自定义标识符,表示初值表首元素的逻辑地址;用这个符号表示地址,常称为符号地址。,变量名可以没有。这种情况,汇编程序将直接为初值表分配空间,无符号地址。,设置变量名是为了方便存取它指示的存储单元。,河南师范大学计算机与信息技术学院,51,2020/8/6,初值表,初值表是用逗号分隔的

27、参数。,主要由数值常数、表达式或?、DUP组成,?表示初值不确定,即未赋初值; DUP表示重复初值。,DUP的格式为:,重复次数 DUP(重复参数) Repeat_count DUP (operand , , opreand),其中repeat_count可以是一个表达式,它的值应该是一个正整数,用来指定括号中的操作数的重复次数。,河南师范大学计算机与信息技术学院,52,2020/8/6,变量定义伪指令助记符(Mnemonic),变量定义伪指令根据申请的主存空间单位分类,说明所定义的数据类型。,DB定义字节伪指令 DW定义字伪指令 DD定义双字伪指令 DF定义3字伪指令 DQ定义4字伪指令 D

28、T定义10字节伪指令,这些伪操作可以把其后跟着的数据存入指定的存储单元,形成初始化数据;或者只分配存储空间而并不存入确定的数值,形成未初始化数据。,可存储由16位段地址及32位偏移地址组成的远地址指针。,可存储地址,形成压缩BCD码,河南师范大学计算机与信息技术学院,53,2020/8/6,1. 定义字节单元伪指令DB,DB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值。,初值表中每个数据一定是字节量(Byte),存放一个8位数据:,可以是0255的无符号数 或是128127带符号数 也可以是字符串常数,示例1,示例2,河南师范大学计算机与信息技术学院,54,2020/8/6,2

29、. 定义字单元伪指令DW,DW伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值。,初值表中每个数据一定是字量(Word),一个字单元可用于存放任何16位数据:,一个段地址 一个偏移地址 两个字符 065535之间的无符号数 3276832767之间的带符号数,河南师范大学计算机与信息技术学院,55,2020/8/6,3. 定义双字单元伪指令DD,DD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值。,初值表中每个数据是一个32位的双字量(Double Word):,可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和16位的偏移地址(低位字)的远指针

30、varddDD 0,?,12345678h farpointDD 00400078h,示例1,示例2,示例3,示例4,河南师范大学计算机与信息技术学院,56,2020/8/6,4. 其他数据单元定义伪指令,定义3字伪指令DF用于为一个或多个6字节变量分配空间及初始化。 6字节常用在32位CPU中表示一个48位远指针(16位段选择器:32位偏移地址),定义4字伪指令DQ用于为一个或多个8字节变量分配空间及初始化。 8字节变量可以表达一个64位整数,定义10字节伪指令DT用于为一个或多个10字节变量分配空间及初始化。 10字节变量可以表达扩展精度浮点数,示例,河南师范大学计算机与信息技术学院,57

31、,2020/8/6,5.变量定义伪指令使用说明,操作数中的变量或标号可以是表达式,汇编后,存储器中应该存入表达式的值。,DB、DW、DD、DF、DQ、DT等伪操作在MASM6中可用BYTE、WORD、DWORD、FWORD、QWORD、TBYTE来取代,其含义是等同的。,河南师范大学计算机与信息技术学院,58,2020/8/6,4.2.3 地址计数器与对准伪操作,河南师范大学计算机与信息技术学院,59,2020/8/6,1. 地址计数器$,地址计数器(location counter)用来保存当前正在汇编的指令的偏移地址。,当开始汇编或在每一段开始时,把地址计数器初始化为零。,汇编过程中,每处

32、理一条指令,地址计数器就增加一个值,此值为该指令所需要的字节数。,地址计数器的值可用符号“$”表示。,汇编语言允许用户直接用$来引用地址计数器的值。,示例,河南师范大学计算机与信息技术学院,60,2020/8/6,2. ORG伪操作,定位伪指令控制数据的偏移地址。,ORG 参数或ORG constant expression,ORG伪指令是将当前偏移地址指针指向参数表达的偏移地址。,ORG 100h ;从100h处安排数据或程序 ORG $+10 ;使偏移地址加10,即跳过10个字节空间,如常数表达式的值为n,则ORG伪操作可以使下一个字节的地址成为常数表达式的值n 。,常数表达式也可以表示从

33、当前已定义过的符号开始的位移量,或表示从当前地址计数器值$开始的位移量。,示例1,示例2,河南师范大学计算机与信息技术学院,61,2020/8/6,3. EVEN伪操作,EVEN;从偶地址开始,EVEN伪指令使下一个变量或指令开始于偶数字节地址。,EVEN伪操作可以保证字数组从偶数地址开始。,例如: DATA_SEGSEGMENT EVEN WORD_ARRAYDW 100 DUP(?) DATA_SEGENDS,河南师范大学计算机与信息技术学院,62,2020/8/6,4. ALIGN伪操作,ALIGN n;从n的整数倍地址开始,ALIGN伪操作是将当前偏移地址指针指向n(n是2的乘方)的整

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

35、/6,4.2.4 变量和标号的属性,变量的类型属性(type attribute):用来表示该语句中的每一个数据项的长度(以字节为单位表示)。,因此,DB/DW/DD/DF/DQ/DT伪操作的类型属性分别为1、2、4、6、8、10。,变量表达式的属性和变量是相同的。汇编程序可以用这种隐含的类型属性来确定某些指令是字指令还是字节指令。,示例1,示例2,河南师范大学计算机与信息技术学院,65,2020/8/6,4.2.4 变量和标号的属性,河南师范大学计算机与信息技术学院,66,2020/8/6,1. 地址操作符,取得名字或标号的段地址和偏移地址两个属性。, 将括起的表达式作为存储器地址 $当前偏

36、移地址 :采用指定的段地址寄存器 OFFSET 名字/标号 ;返回名字或标号的偏移地址 SEG 名字/标号 ;返回名字或标号的段地址,示例1,示例2,河南师范大学计算机与信息技术学院,67,2020/8/6,2. 类型操作符,类型操作符对名字或标号的类型属性进行有关设置。,类型名 PTR 名字/标号,THIS 类型名,SHORT 标号,TYPE 名字/标号,SIZEOF 变量名,LENGTHOF 变量名,河南师范大学计算机与信息技术学院,68,2020/8/6,(1)类型名 PTR 名字/标号,PTR操作符使名字或标号具有指定的类型。,类型名可以是 BYTE/WORD/DWORD/FWORD/

37、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,2020/8/6,(2)THIS 类型名,利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型。,LABEL伪指令的功能等同于“EQU THIS”。,示例1,示例2,河南师范大学计算机与信息技术学院,70,2020/8/6,

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

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

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

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

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

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

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

45、种:,.8086选择8086指令系统 .286选择80286指令系统 .286 P选择保护方式下的80286指令系统 .386选择80386指令系统 .386 P选择保护方式下的80386指令系统 .486选择80486指令系统 .486 P选择保护方式下的80486指令系统 .586选择Pentium指令系统 .586 P选择保护方式下的Pentium指令系统,指包括特权指令在内的指令系统,河南师范大学计算机与信息技术学院,84,2020/8/6,4.3.3 段定义伪操作,河南师范大学计算机与信息技术学院,85,2020/8/6,1. 完整段定义伪操作,段名segment 定位 组合 段字

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

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

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

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

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

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

52、辑段,即明确段和段寄存器的关系。,河南师范大学计算机与信息技术学院,92,2020/8/6,指定段寄存器伪指令ASSUME,ASSUME伪指令并不为段寄存器设定初值,连接程序LINK将正确设置CS : IP和SS : SP。,由于数据段通常都需要,所以在样板源程序中,首先为DS赋值;如果使用附加段,还要赋值ES。,ASSUME NOTHING则可取消前面由ASSUME所指定的段寄存器。,完整段定义举例说明例4.1。,河南师范大学计算机与信息技术学院,93,2020/8/6,2. 存储模型与简化段定义伪操作,河南师范大学计算机与信息技术学院,94,2020/8/6,(1)MODEL伪操作,.MO

53、DEL 存储模式,模式选项,使用简化段定义,必须有存储模式伪指令。,.model语句必须位于所有段定义语句之前。用来说明在存储器中是如何安放各个段的。,存储模式决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性。,MASM有7种不同的存储模式:, TINY SMALL MEDIUM COMPACT LARGE HUGE FLAT,河南师范大学计算机与信息技术学院,95,2020/8/6,Tiny,用于创建COM类型程序,COM程序必须从0100H的存储单元开始。,这种模型一般用于小程序。,微型模式是MASM 6.0才引入的,用微型模式编写汇编语言程序时,所有的段地址寄存器都被

54、设置为同一值。,这意味着代码段、数据段、堆栈段都在同一个段内,不大于64KB;访问操作数或指令都只需要使用16位偏移地址。,河南师范大学计算机与信息技术学院,96,2020/8/6,Small,在小型模式下,一个程序至多只能有一个代码段和一个数据段,每段不大于64KB。,一般的程序(例如本书的绝大多数程序示例和习题)都可用这种模式。,这里的数据段是指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不可超过64KB;因此小模式下程序的最大长度为128KB。,访问操作数或指令都只需要使用16位偏移地址;这意味着诸如指令转移、程序调用以及数据访问等都是近属性(NEAR),即小型模式下的调用

55、类型和数据指针缺省分别为近调用和近指针。,河南师范大学计算机与信息技术学院,97,2020/8/6,Medium,适合于数据量小但代码量大的程序。,中型模式的代码段可以超过64KB,有多个;但数据段只能有一个不大于64KB的段。,中型模式是与紧凑模式互补的模式。,这种模式下数据是近访问;但代码则是远访问,即调用类型缺省是远(FAR)调用,因为要利用段地址区别多个代码段。,河南师范大学计算机与信息技术学院,98,2020/8/6,Compact,紧凑模式下,代码段被限制在一个不大于64KB的段内;而数据段则可以有多个,超过64KB。,适合于数据量大但代码量小的程序。,这种模式下的代码是近访问,即

56、调用类型缺省仍为近调用;而数据则缺省为远(FAR)访问,因为必须用段地址来区别多个数据段。,河南师范大学计算机与信息技术学院,99,2020/8/6,Large,大型模式允许的代码段和数据段都有多个,都可以超过64KB;但全部的静态数据(不能改变的数据)仍限制在64K字节内。,较大型程序通常采用的存储模式。,大型模式下的数据和代码都可以远访问。,河南师范大学计算机与信息技术学院,100,2020/8/6,Huge,HUGE(巨型模式)与大型模式基本相同,只是静态数据不再被限制在64K字节之内。,河南师范大学计算机与信息技术学院,101,2020/8/6,Flat,平展模式用于创建一个32位的程

57、序,它只能运行在32位x86 CPU上。,DOS下不能使用FLAT模式,而编写32位Windows 9.x或Windows-NT的程序时,必须采用FLAT模式。,DOS下编程可选择前六种模式,一般可以选用SMALL模式。,MASM5版本不支持这种模型,但MASM6可以支持。,TINY模式产生COM程序,其他模式产生EXE程序,FLAT模 式只能用于32位程序。,河南师范大学计算机与信息技术学院,102,2020/8/6,Model options,高级语言接口 操作系统 堆栈距离,Model options允许用户指定三种选项:,高级语言接口:该汇编程序作为某一高级语言程序的过程而为该高级语言

58、程序调用时,应该用C,BASIC,FORTRAN,PASCAL等来说明。,操作系统:说明程序运行于哪个操作系统之下,可用OS_DOS或OS_OS2来说明,默认项是OS_DOS。,河南师范大学计算机与信息技术学院,103,2020/8/6,Model options,堆栈距离:可用NEARSTACK 或FARSTACK来说明。,NEARSTACK是指把堆栈段和数据段组合到一个DGROUP段中,DS和SS均指向DGROUP段; FARSTACK是指堆栈段和数据段并不合并。,当存储模型为TINY、SMALL、MEDIUM和FLAT时,默认项是NEARSTACK;当存储模型为COMPACT、LARGE

59、和HUGE时,默认项是FARSTACK。,例如: . MODEL SMALL , C . MODEL LARGE , PASCAL , OS_DOS , FARSTACK,河南师范大学计算机与信息技术学院,104,2020/8/6,(2)简化段定义伪操作,Code代码段 Initialized data初始化数据段 Uninitialized data未初始化数据段 Far initialized data远初始化数据段 Far uninitialized data远未初始化数据段 Constants常数段 Stack堆栈段,汇编程序给出的标准段有下列几种:,这种分段方法把数据段分得更细,可便

60、于与高级语言的兼容。在为高级语言编写某一个汇编过程时,可采用这种标准段模式。,河南师范大学计算机与信息技术学院,105,2020/8/6,(2)简化段定义伪操作,若编写一个独立的汇编语言程序,不需要细分。一般采用下述三个标准段即可。,简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段。,.CODE .DATA .STACK,采用简化段定义伪指令前,需有.model语句。,使用简化段定义,各段名称和其他用户所需的信息可以使用MASM预定义符号,例如:data表示由.data等定义的数据段的段名。,河南师范大学计算机与信息技术学院,106,2020/8/6,(2)简化段定义伪操作,Co

61、de name 对于一个代码段的模型,段名为可选项; 对于多个代码段的模型,则应为每个代码段指定段名。,DATA,对于以上标准段,可有以下简化段伪操作:,DATA ?未初始化的数据段,FARDATA name 可指定段名。如不指定,则将以FAR_DATAM命名。,FARDATA ? name 可指定段名。如不指定,则将以FAR_DATAM命名。,CONST,STACK size 可指定堆栈段大小。如不指定,则默认值为1KB。,河南师范大学计算机与信息技术学院,107,2020/8/6,代码段定义伪指令,.CODE 段名,代码段伪指令.code创建一个代码段,它的参数指定该代码段的段名。,如果没

62、有给出段名,则采用默认段名:,在TINY、SMALL、COMPACT和FLAT模式下,默认的代码段名是:_TEXT。,在MEDIUM、LARGE和HUGE模式下,默认的代码段名是:模块名_TEXT。,河南师范大学计算机与信息技术学院,108,2020/8/6,数据段定义伪指令,.DATA,数据段伪指令.data创建一个数据段,段名是:_DATA。它用于定义具有初值的变量,当然也允许定义无初值的变量。,无初值变量可以安排在另一个段中,它用.data?伪指令创建,数据段名是:_BSS。,. const伪指令用于建立只读的常量数据段(段名:CONST)。,河南师范大学计算机与信息技术学院,109,2

63、020/8/6,堆栈段定义伪指令,.STACK 大小,堆栈段伪指令.STACK创建一个堆栈段,段名是:stack。,它的参数指定堆栈段所占存储区的字节数,默认是1KB(= 1024 = 400h字节)。,河南师范大学计算机与信息技术学院,110,2020/8/6,(3)与简化段定义有关的预定义符号,如在完整段定义下,在程序一开始,需要用段名装入相应寄存器,如例4.1中的相应语句。,若用简化段定义,则数据段只用.DATA来定义,而并未给出段名,此时可用 mov ax ,data mov ds , ax,预定义符号data给出了段名,河南师范大学计算机与信息技术学院,111,2020/8/6,(4

64、)用MODEL定义存储模型时的段默认属性,表4.1给出了使用MODEL伪操作时的段默认情况。,模型列给出了可定义的7种模型;,伪操作列给出了对应每一种模型可定义7种段的伪操作;,名字列给出了各段所用段名;,定位列给出了段的起始地址边界的类型;,组合列给出了段的组合类型;,类列给出了各段所属类;,组列给出各种模型下所建立的数组。,河南师范大学计算机与信息技术学院,112,2020/8/6,(5)简化段定义举例,例4.2,例4.3,例4.4,河南师范大学计算机与信息技术学院,113,2020/8/6,3. 段组定义伪操作,汇编程序自动地把各数据段组成一个64KB段组DGROUP,以便程序在访问各数

65、据段时使用一个数据段寄存器DS。,格式:grpname DGROUP segname, segname 其中,grpname为段组名,segname则为段名。,DGROUP伪操作允许用户自行指定段组。,定义段组后,段组内各段就统一为一个段地址,各段定义的变量和标号的偏移地址就相对于段组基地址计算。,offset操作符取变量和标号相对于段组的偏移地址,如果没有段组则取得相对于段的偏移地址。,offset后可以跟段组中的某个段名,表示该段最后一个字节后面字节相对于段组的偏移地址。,河南师范大学计算机与信息技术学院,114,2020/8/6,4. 段顺序伪操作,.SEG;按照源程序的各段顺序 .DOSSEG;按照微软使用的标准DOS规定 .ALPHA;按照段名的字母顺序,段顺序伪指令确定各逻辑段在主存的前后位置。,完整段定义格式中,默认按照源程序各段的书写顺序安排(即.seg)。,采用.model伪指令的简化段定义格式,则是规定的标准DOS程序顺序( 即.dosseg ):,代码段 数据段 堆栈段 主存地址低端 高端,河南师范大学计算机与信息技术学院,115,2020/8/6,4.3.4 程序开始和结束伪操作,程序开始处的伪操作 NAME伪操作 TI

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!