第四章汇编语言程序格式.ppt
《第四章汇编语言程序格式.ppt》由会员分享,可在线阅读,更多相关《第四章汇编语言程序格式.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 汇编语言程序格式汇编程序功能伪操作汇编语言程序格式汇编语言程序的上机过程4.1汇编程序功能 EDIT MASM LINK 图4.1汇编语言程序的建立及汇编过程源文件源文件.asm编编辑辑程程序序连连接接程程序序汇汇编编程程序序目标文目标文件件.obj可执可执行文件行文件.exe一、汇编语言源程序和汇编程序汇编程序汇编程序的作用的作用就是把源程序文件(就是把源程序文件(ASMASM文件)转换成用文件)转换成用二进制代码表示的目标程序文件(二进制代码表示的目标程序文件(OBJOBJ文件)。文件)。汇编程序汇编程序的主要功能有的主要功能有:检查源程序。检查源程序。测出源程序语法错误,并给出错
2、误。测出源程序语法错误,并给出错误。产生目标程序,并可给出列表文件产生目标程序,并可给出列表文件 展开宏指令。展开宏指令。1 1、汇编语言源程序汇编语言源程序汇编语言源程序是用汇编语言编写的程序,简称汇编语言程序。汇汇编语言源程序是用汇编语言编写的程序,简称汇编语言程序。汇 编语言程序通过编辑程序在计算机中建立汇编语言源程序文件编语言程序通过编辑程序在计算机中建立汇编语言源程序文件 (ASMASM文件)。文件)。2 2、汇编程序汇编程序将汇编语言源程序编译成目标程序的加工程序称为汇编程序。这一将汇编语言源程序编译成目标程序的加工程序称为汇编程序。这一 加工过程称为汇编。加工过程称为汇编。二、为
3、运行汇编语言程序 要在磁盘上建立如下文件:1 1、EDIT.EXE EDIT.EXE(编辑程序)(编辑程序)2 2、MASM.EXE MASM.EXE(汇编程序)(汇编程序)3 3、LINK.EXE LINK.EXE(连接程序)(连接程序)4 4、DEBUG.COMDEBUG.COM(调试程序)(调试程序)5 5、EXE2BIN.EXEEXE2BIN.EXE (将(将EXEEXE文件转换成文件转换成COMCOM文件)文件)可选可选伪指令属于汇编控制命令,它所指示的操作是由汇编程序在汇编源程序时完成的,在汇编时,它不产生目标代码,在将源程序汇编成目标程序后,它就不复存在了。4.2伪指令 伪指令又
4、称为伪操作,伪指令是汇编语言程序设计的一个重要部 分,由于汇编程序在汇编过程中无法区分源程序中的分段情况,哪 些是数据,哪些是指令,也无法识别数据的类型,以及源程序在哪 结束,因此,80X86宏汇编语言提供了多种伪指令,它主要告诉汇编 程序如何正确地将汇编源程序汇编成目标程序。伪指令语句功能:指示汇编程序在汇编源程序时完成某些工作,比 如完成数据定义、分配存储区、指示程序结束等。一条伪指令语句也由四个字段组成,其一般格式如下:一条伪指令语句也由四个字段组成,其一般格式如下:符号名符号名 伪指令符操作数伪指令符操作数;注释;注释 4.2伪指令一、段结构伪指令 编制一个80X86汇编语言源程序,段
5、是基础,这有两方 面含义:一是必须按段来构造程序,二是在程序执行 时,要凭借四个段寄存器对各个段的存储单元进行访 问。段结构伪指令主要有两条语句,即段定义伪指令 和段寻址伪指令。4.2伪指令(一)、段定义伪指令1、段定义伪指令的格式段名段名 SEGMENTSEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段体段体段名段名 ENDSENDS2、段定义伪指令的功能指定逻辑段的名字、范围、段的起始边界、段与段之间的连接关系。段定义伪指令中的SEGMENT和ENDS用于定义一个逻辑段,使用时必须成对出现,分别表示段的起始和结束。4.2伪指令(二)、段寻址伪指令1、段寻址伪指令的格式ASSU
6、MEASSUME 段寄存器:段名段寄存器:段名 【,段寄存器:段名段寄存器:段名】2、段寻址伪指令的功能主要用于指示汇编程序哪些段是当前段以及这些段与段寄存器之间的对应关系。例:ASSUME CS:CODE,DS:DATA,SS:STACKASSUME CS:CODE,DS:DATA,SS:STACKCODEDATASTACKCSDSSS对段寻址伪指令的几点说明:段寄存器名可为CS、DS、SS、ES四者之一。段名是指用SEGMENT/ENDS语句已定义的段名,也可以是表达式“SEG 变量或标号”,或者是关键字NOTHING;(使用NOTHING时,来取消段寄存器与段之间的对应关系)。ASSUM
7、E伪指令设置在代码段内,第一个ASSUME语句一般放在段定义语句之后,是说明性语句。在一个代码段中,如果没有另外的ASSUME伪指令重新设置,原有ASSUME语句的设置一直有效。不在当前段中的变量和数据存储单元均是不可访问的,否则,会在汇编时产生错误或运行时造成混乱,产生逻辑上的错误,得出错误结果。ASSUME伪指令不产生任何目标代码,它仅仅是告诉汇编程序,哪些段是当前段,而且它们分别由哪个段寄存器指向。汇编程序不能检查在程序运行期间段寄存器内容是否与上述ASSUME语句的设置一致。如果在程序中间用ASSUME语句重建了DS或ES与某段的关系时,就一定要紧跟着将这个新段首地址送入DS或ES中,
8、否则,会因段寄存器的内容未更改而使得后面数据的读写仍在原来的数据段中进行,这样的错误,系统是检查不出来的,即出现逻辑错误。定位类型定位类型说明段的起始地址应有怎样的边界,它们可以是:PARA:指定段的起始地址必须从小段边界开始,即 段起始地址的最低的十六进制数必须为0。这 样偏移地址可以从0开始。(默认)BYTE:该段可以从任何地址开始。这样起始偏移地 址可能不为0。WORD:该段必须从字的边界开始,即段起始地址必 须为偶数。DWORD:该段必须从双字的边界开始,即段起始地址 的最低的十六进制数必须为4的倍数。PAGE:该段必须从页的边界开始,即段起始地址的最低的两 位十六进制数必须为0。(能
9、被256整除)组合类型组合类型说明程序连接时的段合并方法,它们可以是:PRIVATE:该段为私有段,在连接时将不与其他模块中的同名分段合并。(默认)PUBLIC:该段连接时可以把不同模块中的同名段相连接而形成一个段,其连接次序由连接命令指定。每一分段都从小段的边界开始,因此各模块的原有段之间可能存在小于16个字节的空隙。(MEMORY与PUBLIC同义)COMMON:该段连接时可以把不同模块中的同名段重叠而形成一个段,由 于各同名段有相同的起始地址,所以会产生覆盖。COMMON的连 接长度时各分段中的最大长度。重叠部分的内容取决于排列在 最后一段的内容。STACK:把不同模块中的同名段组合而形
10、成一个堆栈段。该段的长度为 原有段的总和,各原有段之间无PUBLIC所连接段中的间隙,而 且栈顶可自动指向连接后形成的大堆栈段的栈顶。AT expression:使段地址是表达式所计算出来的16位值。但它不能用来 指定代码段。类别在引号中给出连接时组成段的类型名。类别说明并不能把相同类别的段合并起来,但在连接后形成的装入模块中,可以把它们的位置靠在一起。(LINK MUSIC+GROUNDLINK MUSIC+GROUNDLINK MUSIC+GROUNDLINK MUSIC+GROUND)例:STACK1 SEGMENT PARA STACK STACK DB 80 DUP (0)STACK
11、1 ENDSTITLE伪指令可指定每一页上打印的标题。同时,若程序中没有NAME伪指令,则汇编程序将用text 中的前6个字符作为模块名。text最多可有60个字符。若程序中既无NAME又无TITLE伪指令,则将用源程序名作为模块名。所以NAME及TITLE伪指令并不是必要的,但一般常使用TITLE,以便在列表文件中能打印出标题来。4.2伪指令二、源程序开始和结束伪指令源程序开始和结束伪指令(一)源程序开始伪指令 在源程序开始处可以用NAME或TITLE为模块取名字。TITLE伪指令 如果程序中没有NAME伪指令,则也可使用TITLE伪指令。格式:TITLE text NAME伪指令 格式:N
12、AME 模块名 汇编程序将以给出的“模块名”作为模块的名字。其中,地址表达式为可选项,若选用地址表达式,则表示此程序是 主程序,它可以单独执行,其地址表达式为该程序的启动地址,即 程序开始运行的第一条指令的地址,例如,“ENDSTART”,此 START是第一条指令的标号;若不选用表达式,则说明此程序为一 子程序,不能单独运行,只能被其它程序调用。4.2伪指令二、源程序开始和结束伪指令源程序开始和结束伪指令(二)源程序结束伪指令 格式:END 地址表达式 功能:该语句为源程序的最后一个语句,用以标志整个程序的结 束,即告诉汇编程序汇编工作到此结束。4.2伪指令1 1、常用的数据定义伪指令有、常
13、用的数据定义伪指令有DBDB、DWDW、DDDD、DQDQ、DTDT。格式:格式:变量变量 数据定义伪指令数据定义伪指令 表达式表达式 ,表达式,表达式,功能:定义数据存储区,类型由数据定义伪指令确定,初值功能:定义数据存储区,类型由数据定义伪指令确定,初值 由表达式给定。由表达式给定。三、数据定义伪指令例:DATA SEGMENT DATA1 DB 12H,34H,56H,78H,9AH DATA2 DW 1234H,5678H DATA3 DD 12345678H DATA ENDS12H34H56H78H9AH34H12H78H56H78H56H34H12HDATA1DATA2DATA3
14、2 2、符号定义伪指令、符号定义伪指令 符号定义伪指令用于为程序中多次出现的同一个常量或表达式定符号定义伪指令用于为程序中多次出现的同一个常量或表达式定 义为一个标识符,以便在源程序中以标识符来代替对应的常量或义为一个标识符,以便在源程序中以标识符来代替对应的常量或 表达式。符号定义伪指令有以下两种。表达式。符号定义伪指令有以下两种。(1)(1)等价伪指令等价伪指令EQUEQU 格式:符号名格式:符号名 EQU EQU 表达式表达式 功能:为常量或表达式及其它各种符号定义一个等价的符号名功能:为常量或表达式及其它各种符号定义一个等价的符号名 ,但它不申请分配存储单元。但它不申请分配存储单元。三
15、、数据定义伪指令说明:说明:表达式可以是常量或数值表达式;地址表达式;变量、标号或表达式可以是常量或数值表达式;地址表达式;变量、标号或 指令助记符指令助记符.符号名符号名不占存储单元不占存储单元,没有段、偏移和类型,没有段、偏移和类型3 3种属性种属性.在同一源程序中,使用在同一源程序中,使用EQUEQU定义的符号不能与本程序中的其它定义的符号不能与本程序中的其它 符号名同名;另外,同一符号符号名同名;另外,同一符号不能不能用用EQUEQU伪指令伪指令重新重新定义。定义。EQUEQU伪指令主要有以下伪指令主要有以下3 3方面应用:方面应用:定义符号常量。用符号名表示常量、数值表达式。定义符号
16、常量。用符号名表示常量、数值表达式。EQUEQU与属性运算符与属性运算符PTRPTR或或THISTHIS连用,可以给变量或标号定义新的类型连用,可以给变量或标号定义新的类型 属性并重新命名。但其段属性和偏移属性不变。属性并重新命名。但其段属性和偏移属性不变。利用利用EQUEQU可以用一个符号名替代一个复杂的地址表达式和其它一些符可以用一个符号名替代一个复杂的地址表达式和其它一些符 号,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。号,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。三、数据定义伪指令(2 2)等号伪指令等号伪指令 格式:符号名格式:符号名 =表达式表达式 功能
17、:该语句的功能与功能:该语句的功能与EQUEQU语句类似,不同的是等号伪指令能对所语句类似,不同的是等号伪指令能对所 定义的符号名定义的符号名多次重新多次重新定义,且以定义,且以最后一次最后一次定义的值为准。定义的值为准。汇编程序在汇编源程序时,每遇到一新段,就为该段设置一个初汇编程序在汇编源程序时,每遇到一新段,就为该段设置一个初值为值为0 0的的汇编地址计数器汇编地址计数器,汇编程序使用汇编地址计数器记载正,汇编程序使用汇编地址计数器记载正在汇编的数据或指令的目标代码在当前段内的偏移地址。在汇编的数据或指令的目标代码在当前段内的偏移地址。4.2伪指令 当前当前汇编地址计数器汇编地址计数器的
18、的值值可用符号可用符号$表示,表示,用户可在程序中直接使用用户可在程序中直接使用$,表示引用当,表示引用当 前汇编地址计数器的值。例如:前汇编地址计数器的值。例如:ARRAY DW 4000HARRAY DW 4000H,5000H5000H,6000H6000H COUNT EQU COUNT EQU ($-ARRAY$-ARRAY)/2 /2 00H40H00H50H00H60HARRAYARRAY+1ARRAY+2ARRAY+3ARRAY+4ARRAY+5ARRAY+6COUNT四、定位伪指令四、定位伪指令ORGORG与汇编地址计数器(与汇编地址计数器($)ORG伪指令伪指令 格式:格式
19、:ORG 数值表达式数值表达式 功能:将数值表达式的值赋给汇编地址计数器。功能:将数值表达式的值赋给汇编地址计数器。汇编地址计数器的值可以用定位伪指令汇编地址计数器的值可以用定位伪指令ORGORG设置。设置。$4.3汇编语言程序格式(数据与运算符)汇编语言的指令语句和伪指令语句汇编语言的指令语句和伪指令语句操作数操作数一般为一般为常量、变量、标号、常量、变量、标号、表达式表达式。一、常量一、常量(1 1)数值常量数值常量 数值常量分为数值常量分为整数整数和和实数实数。例如:例如:11100011B 11100011B,45693 45693,0FF2AH 0FF2AH,356703Q35670
20、3Q 都是正确的整数形式都是正确的整数形式.又如:又如:543.567543.567,45.2345.23,1.2E21.2E2,45.4E945.4E9 都是正确的实数形式。都是正确的实数形式。常量是没有任何属性的纯数值,它的值在汇编期间已能完全确定,常量是没有任何属性的纯数值,它的值在汇编期间已能完全确定,且在程序运行中也不会发生变化。常量分为且在程序运行中也不会发生变化。常量分为数值常量、字符串常数值常量、字符串常量量和和符号常量符号常量,它主要用于指令语句中的立即数或伪指令语句中,它主要用于指令语句中的立即数或伪指令语句中给变量给变量赋初值赋初值等。等。(2 2)字符串常量字符串常量
21、字符串常量是用字符串常量是用单引号单引号括起来的括起来的一个字符一个字符或或多个字符多个字符。字符串。字符串 常量以单引号中各字符的常量以单引号中各字符的ASCIIASCII码形式存储在内存中,如码形式存储在内存中,如 A A,在内存中就是,在内存中就是41H41H,1212就是就是31H31H,32H32H。使用时可在。使用时可在 单引号内直接写字符序列,如单引号内直接写字符序列,如12AB12AB,也可写字符的,也可写字符的ASCIIASCII 码,码,ASCIIASCII码之间用逗号分隔(此时不需要用单引号),如码之间用逗号分隔(此时不需要用单引号),如 31H31H,32H32H,41
22、H41H,42H42H表示字符串表示字符串12AB12AB。(3 3)符号常量符号常量 符号常量是指用符号常量是指用EQUEQU伪指令或赋值语句伪指令或赋值语句“=”定义过的符号名,可定义过的符号名,可 作操作数项或在表达式中使用。作操作数项或在表达式中使用。一、常量一、常量二、变量二、变量在汇编语言中,变量是一个在汇编语言中,变量是一个数据存储单元数据存储单元的名称,即数据存放地址的名称,即数据存放地址的符号表示。它代表存放在某些存储单元的数据,这些数据在程序的符号表示。它代表存放在某些存储单元的数据,这些数据在程序运行期间运行期间随时可以改变随时可以改变。为方便访问变量,在程序中通过。为方
23、便访问变量,在程序中通过变量名变量名来来使用变量。使用变量。(1)变量的定义变量的定义 变量通常在数据段或附加段中使用数据定义伪指令来定义,定义变量就变量通常在数据段或附加段中使用数据定义伪指令来定义,定义变量就 是给数据分配存储单元,有时为存储单元赋予一个变量名,并可同时为是给数据分配存储单元,有时为存储单元赋予一个变量名,并可同时为 这些存储单元预置初值。这些存储单元预置初值。数据定义伪指令的格式为:数据定义伪指令的格式为:变量名变量名 DB(DWDB(DW、DDDD、DQDQ、DT)DT)表达式表达式1 1,表达式,表达式2 2,其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的
24、地址;其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址;DBDB、DWDW、DDDD、DQDQ和和DTDT是伪指令符,具体一条数据定义伪指令取是伪指令符,具体一条数据定义伪指令取5 5种之一。种之一。DBDB定义的是字节类型的变量,每个表达式被分配定义的是字节类型的变量,每个表达式被分配1 1个字节单元。个字节单元。DWDW定义的是字类型的变量,每一个表达式被分配定义的是字类型的变量,每一个表达式被分配1 1个字单元(个字单元(2 2个字节)。个字节)。DDDD定义的是双字类型的变量,每一个表达式被分配定义的是双字类型的变量,每一个表达式被分配2 2个字单元(个字单元(4 4个字
25、节)。个字节)。DQDQ定义的是四字类型的变量,每一个表达式被分配定义的是四字类型的变量,每一个表达式被分配4 4个字单元(个字单元(8 8个字节)。个字节)。DTDT定义的是十字节类型的变量,每一个表达式被分配定义的是十字节类型的变量,每一个表达式被分配1010个字节单元。个字节单元。表达式表达式1 1,表达式,表达式2 2是给变量或指定的存储单元赋予是给变量或指定的存储单元赋予初值初值,它们有以下几种形式:,它们有以下几种形式:(a a)数值表达式)数值表达式 数据定义伪指令可以为一个或连续的存储单元设置数值初值。数据定义伪指令可以为一个或连续的存储单元设置数值初值。(b b)字符串表达式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 汇编语言程序格式 第四 汇编语言 程序 格式
限制150内