汇编语言编程.pptx
《汇编语言编程.pptx》由会员分享,可在线阅读,更多相关《汇编语言编程.pptx(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3.2 伪指令语句伪指令语句 1、方式选择伪指令、方式选择伪指令 Intel系系列列微微处处理理器器不不断断发发展展换换代代并并保保持持向向上上兼兼容容,不不同同版版本本的的MSAM对对应应不不同同代代的的微微处处理理器器的的指指令令集集和和汇汇编编伪伪指指令令。因因此此方方式式选选择择伪伪指指令令既既是是选选择择微微处处理理机机,实质上也是选择相应的指令集。实质上也是选择相应的指令集。MASM宏汇编程序提供的方式选择伪指令如下:宏汇编程序提供的方式选择伪指令如下:.8086只汇编只汇编8086/8088的指令,此为默认方式的指令,此为默认方式.286或或.286C同同.8086并只汇编并只汇
2、编80286非特权(实模式)指令非特权(实模式)指令.286P同同.8086并汇编并汇编80286全部指令全部指令(包括保护方式包括保护方式).287用于汇编用于汇编80287协处理器指令协处理器指令.386或或.386C同同.286并汇编并汇编80386非特权(实模式)指令非特权(实模式)指令.386P同同.286P并汇编并汇编80386全部指令全部指令(包括保护方式包括保护方式).387用于汇编用于汇编80387协处理器指令协处理器指令.486或或.486C同同.386并汇编并汇编80486非特权(实模式)指令非特权(实模式)指令.486P同同.386P并汇编并汇编80486全部指令全部指
3、令(包括保护方式包括保护方式).586或或.586C用于汇编用于汇编Pentium微处理器非特权(实模式)指令微处理器非特权(实模式)指令.586P用于汇编用于汇编Pentium微处理器保护方式在内的所有指令微处理器保护方式在内的所有指令程序结构伪指令程序结构伪指令第1页/共77页 段定义伪指令用于将源程序划分成若干段,这些逻辑段按用途可分段定义伪指令用于将源程序划分成若干段,这些逻辑段按用途可分段定义伪指令用于将源程序划分成若干段,这些逻辑段按用途可分段定义伪指令用于将源程序划分成若干段,这些逻辑段按用途可分为代码段(用于存放程序)、数据段(用于存放数据)、堆栈段(用为代码段(用于存放程序)
4、、数据段(用于存放数据)、堆栈段(用为代码段(用于存放程序)、数据段(用于存放数据)、堆栈段(用为代码段(用于存放程序)、数据段(用于存放数据)、堆栈段(用于堆栈操作)和附加段(附加的数据段)。于堆栈操作)和附加段(附加的数据段)。于堆栈操作)和附加段(附加的数据段)。于堆栈操作)和附加段(附加的数据段)。需要说明的是,并不是所有的程序都必须包含这四个逻辑段,需要说明的是,并不是所有的程序都必须包含这四个逻辑段,需要说明的是,并不是所有的程序都必须包含这四个逻辑段,需要说明的是,并不是所有的程序都必须包含这四个逻辑段,有时只需要一个段或两个段。有时只需要一个段或两个段。有时只需要一个段或两个段
5、。有时只需要一个段或两个段。格式:段名格式:段名格式:段名格式:段名 SEGMENTSEGMENT定位类型组合类型定位类型组合类型定位类型组合类型定位类型组合类型 类别名类别名类别名类别名 段名段名段名段名 ENDSENDS 功能:把模块划分为若干个逻辑段。每个功能:把模块划分为若干个逻辑段。每个功能:把模块划分为若干个逻辑段。每个功能:把模块划分为若干个逻辑段。每个SEGMENT/ENDSSEGMENT/ENDS可定可定可定可定义一个逻辑段。义一个逻辑段。义一个逻辑段。义一个逻辑段。2、段定义伪指令段定义伪指令第2页/共77页例:例:STACKSEGMENTSTACKDW20DUP(?)ST
6、ACKENDS伪指令伪指令SEGMENT有有3个可选择的操作数:定位个可选择的操作数:定位方式,组合方式和类别名。方式,组合方式和类别名。第3页/共77页1)定位类型)定位类型定定位位类类型型规规定定段段的的起起始始地地址址要要求求,有有如如下下4种种方方式(式(默认方式为默认方式为PARA):):(1)PARA段段地地址址从从小小段段边边界界开开始始,段段起起始始单元单元20位地址的最低位地址的最低4位必须为位必须为0。(2)BYTE段段地地址址从从字字节节边边界界开开始始,该该段段可可从任意单元开始从任意单元开始。(3)WORD段段地地址址从从字字边边界界开开始始,段段起起始始单元单元20
7、位地址的最低位地址的最低1位必须为位必须为0。(4)PAGE段段地地址址从从页页边边界界开开始始,段段起起始始单单元元20位地址的最低位地址的最低8位必须为位必须为0。第4页/共77页PAGE:页边界:页边界XXXXXXXXXXXX00000000BPARA:节边界:节边界XXXXXXXXXXXXXXXX0000BWORD:字边界:字边界XXXXXXXXXXXXXXXXXXX0BBYTE:字节边界:字节边界XXXXXXXXXXXXXXXXXXXXB第5页/共77页2)组合类型)组合类型告告诉诉连连接接程程序序本本段段与与其其他他段段的的关关系系,有有5种种(默默认认NONE):(1)NONE连
8、连接接时时表表示示该该段段与与其其他他段段在在逻逻辑辑上上没没有关系,即各有各的段地址。有关系,即各有各的段地址。(2)PUBLIC连连接接时时表表示示该该段段可可与与其其他他模模块块中中的的同同名名段段在在满满足足定定位位类类型型前前提提下下,依依次次连连接接起起来来。连接的顺序由连接程序连接的顺序由连接程序LINK确定。确定。第6页/共77页(3)COMMON定义该段与其他模块中的同名段,定义该段与其他模块中的同名段,采用覆盖方式在存储器中定位,即它们具有相同采用覆盖方式在存储器中定位,即它们具有相同的段首地址。通常不同模块采用公用缓冲区时使的段首地址。通常不同模块采用公用缓冲区时使用这种
9、组合类型。用这种组合类型。COMMON的连接长度是各分的连接长度是各分段中的最大长度。段中的最大长度。(4)STACK表示该段是堆栈段,连接方式与表示该段是堆栈段,连接方式与PUBLIC段相同。段相同。(5)AT这种组合类型后面跟一个常数表达式,表这种组合类型后面跟一个常数表达式,表达式的值指定了段地址。达式的值指定了段地址。不能用于代码段不能用于代码段。第7页/共77页(6)MEMORY指定该段将分配在所有其他连接在指定该段将分配在所有其他连接在一起的段的前面一起的段的前面(在高地址上在高地址上),如果连接时有几个指定如果连接时有几个指定MEMORY的段,则遇的段,则遇到的第一段作为到的第一
10、段作为MEMORY段,其他则作为段,其他则作为COMMON段。段。第8页/共77页3)字长选择)字长选择用于定义段中使用的偏移地址和寄存器的字长用于定义段中使用的偏移地址和寄存器的字长USE16表表示示该该段段字字长长为为16位位,按按16位位方方式式寻寻址址,最大段长为最大段长为64K;USE32表表示示该该段段字字长长为为32位位,按按32位位方方式式寻寻址址,最大段长为最大段长为4GB。第9页/共77页4)类别名类别名连接时用于组成段组的名字连接时用于组成段组的名字。类类别别名名是是一一个个用用单单引引号号括括起起来来的的字字符符串串,进进行行连连接接处处理理时时,LINK程程序序把把类
11、类别别名名相相同同的的所所有有段段放在连续的存储区域内。放在连续的存储区域内。同同类类的的各各个个段段连连接接时时,先先出出现现的的在在前前,后后出出现的在后。现的在后。第10页/共77页3、段分配伪指令段分配伪指令格式:格式:ASSUME段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名,功能:该语句安排在功能:该语句安排在代码段代码段的开始,通知汇编程序,的开始,通知汇编程序,某个段是以哪一个段寄存器为它的段地址寄存器。某个段是以哪一个段寄存器为它的段地址寄存器。例例:ASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:ASTACK逻辑段逻辑段CODE、DATA、
12、EXTRA、ASTACK分别以分别以CS、DS、ES、SS为它们的段寄存器,这为它们的段寄存器,这4个逻辑段分别被定义个逻辑段分别被定义为代码段、数据段、附加数据段和堆栈段。为代码段、数据段、附加数据段和堆栈段。第11页/共77页ASSUME语语句句只只是是建建立立当当前前段段与与段段寄寄存存器器之之间间的的联联系系,但但不不能能把把各各段段的的段段地地址址装装入入相相应应的的段段寄寄存存器中,而是通过给段寄存器赋初值的方法来实现器中,而是通过给段寄存器赋初值的方法来实现。段寄存器不能用段寄存器不能用立即寻址方式立即寻址方式直接传送,必须借直接传送,必须借助于通用寄存器进行传递。助于通用寄存器
13、进行传递。对于堆栈段,不仅要将段地址置入对于堆栈段,不仅要将段地址置入SS段寄存器中,段寄存器中,而且还要而且还要将堆栈栈顶的偏移地址置入堆栈指针寄将堆栈栈顶的偏移地址置入堆栈指针寄存器存器SP中中。第12页/共77页DATASEGMENTAADB0DH,20HDATAENDSEXTRA SEGMENTBNDW3478HEXTRA ENDSASTACKSEGMENTSTACKDW256DUP(0)TOPLABELWORDASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:ASTACKSTART:MOVAX,DATA;初始化;初始化DSM
14、OVDS,AXMOVAX,EXTRA;初始化;初始化ESMOVES,AXMOVAX,ASTACK;初始化;初始化SSMOVSS,AXLEASP,TOP;初始化;初始化SPCODEENDSENDSTART第13页/共77页CS和和IP装装入入通通常常是是按按照照源源程程序序结结束束伪伪指指令令的的地地址址来完成的,格式是:来完成的,格式是:END起始地址起始地址起起始始地地址址是是一一个个标标号号或或表表达达式式,该该起起始始地地址址是是程程序装入内存后开始执行的起始点序装入内存后开始执行的起始点。第14页/共77页4、置汇编地址计数器伪指令、置汇编地址计数器伪指令符号符号$用来记录用来记录正在
15、被汇编程序翻译的语句的地址正在被汇编程序翻译的语句的地址。汇编过程中,每个新段都分配一个初值为汇编过程中,每个新段都分配一个初值为0的汇编的汇编地址计数器,然后再对该段中的语句汇编,且该地址计数器,然后再对该段中的语句汇编,且该计数器按语句目标代码的长度增值。计数器按语句目标代码的长度增值。因此,段内定义的所有标号和变量的偏移地址就因此,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。是当前汇编地址计数器的值。DATASEGMENTBUFDB1234ABCDCOUNTEQU$-BUFDATAENDSCOUNT的值就是的值就是BUF数据区所占的字节数。数据区所占的字节数。第15页/
16、共77页5、指定地址伪指令。、指定地址伪指令。格式:格式:ORG数值表达式数值表达式功功能能:将将汇汇编编地地址址计计数数器器设设置置成成数数值值表表达达式式的的值值。注意:该值为注意:该值为065535之间的之间的非负整数非负整数。DATASEGMENTORG10H;设置;设置$的值为的值为10HBUFDBABCD;变量;变量BUF的偏移地址为的偏移地址为10HDATAENDS设设置置ORG使使变变量量BUF的的首首偏偏移移地地址址为为10H,否否则则变变量量BUF的首偏移地址为的首偏移地址为0。第16页/共77页6、模块定义伪指令、模块定义伪指令 汇编语言可以把程序划分成许多模块,并对每个
17、模块独立地进行汇编语言可以把程序划分成许多模块,并对每个模块独立地进行汇编语言可以把程序划分成许多模块,并对每个模块独立地进行汇编语言可以把程序划分成许多模块,并对每个模块独立地进行汇编和调试。汇编和调试。汇编和调试。汇编和调试。1)1)模块开始伪指令模块开始伪指令模块开始伪指令模块开始伪指令格式:格式:格式:格式:NAMENAME模块名模块名模块名模块名功能:指明程序模块的开始,并指出模块名。功能:指明程序模块的开始,并指出模块名。功能:指明程序模块的开始,并指出模块名。功能:指明程序模块的开始,并指出模块名。模块名是自定义符,不能是系统保留字。若该项使用默认值,模块名是自定义符,不能是系统
18、保留字。若该项使用默认值,模块名是自定义符,不能是系统保留字。若该项使用默认值,模块名是自定义符,不能是系统保留字。若该项使用默认值,则取则取则取则取TITLETITLE语句中的页标题语句中的页标题语句中的页标题语句中的页标题6 6个字符;若没有个字符;若没有个字符;若没有个字符;若没有TITLETITLE语句,则取语句,则取语句,则取语句,则取源程序文件名为模块名。源程序文件名为模块名。源程序文件名为模块名。源程序文件名为模块名。第17页/共77页2 2)模块结束伪指令(源程序结束伪指令)模块结束伪指令(源程序结束伪指令)模块结束伪指令(源程序结束伪指令)模块结束伪指令(源程序结束伪指令)格
19、式:格式:格式:格式:ENDEND启动标号或过程名启动标号或过程名启动标号或过程名启动标号或过程名功能:功能:功能:功能:ENDEND表示一个模块的结束。通知汇编程序源程序到此表示一个模块的结束。通知汇编程序源程序到此表示一个模块的结束。通知汇编程序源程序到此表示一个模块的结束。通知汇编程序源程序到此结束,并给出执行程序的入口位置。结束,并给出执行程序的入口位置。结束,并给出执行程序的入口位置。结束,并给出执行程序的入口位置。ENDEND通常与模块开始伪指令通常与模块开始伪指令通常与模块开始伪指令通常与模块开始伪指令NAMENAME联合使用,当联合使用,当联合使用,当联合使用,当NAMENAM
20、E缺省缺省缺省缺省时,则时,则时,则时,则ENDEND只表示源程序的结束。只表示源程序的结束。只表示源程序的结束。只表示源程序的结束。汇编处理时,一个模块就是一汇编处理时,一个模块就是一汇编处理时,一个模块就是一汇编处理时,一个模块就是一个独立的汇编单位,汇编处理只个独立的汇编单位,汇编处理只个独立的汇编单位,汇编处理只个独立的汇编单位,汇编处理只进行到模块结束语句进行到模块结束语句进行到模块结束语句进行到模块结束语句ENDEND为止。为止。为止。为止。STARTSTART:MOVAXMOVAX,DATADATA ENDSTARTENDSTART注意注意注意注意第18页/共77页符号定义伪指令
21、符号定义伪指令1.赋值伪指令赋值伪指令EQU格式:格式:符号名符号名EQU表达式表达式功功能能:给给符符号号定定义义一一个个值值、别别的的符符号号名名、表表达达式式或或助助记记符符注注意意:经经EQU语语句句定定义义的的符符号号在在同同一一个个程程序序模模块块中中不不允允许重新定义许重新定义。CONSTEQU256;数赋以符号名数赋以符号名BETAEQUBX+SI;BX+SI赋以符号名赋以符号名ALPEQUCONST-6;CONST-6赋以符号名赋以符号名BUTEQUSEGMN;段地址赋以符号名段地址赋以符号名EMP EQUOFFSETMN;偏移地址赋以符号名偏移地址赋以符号名第19页/共77
22、页2.等号伪指令等号伪指令=格式:格式:符号名符号名=表达式表达式功功能能:给给符符号号定定义义一一个个值值、别别的的符符号号名名、表表达达式式或或助助记记符符注注意意:等等号号伪伪指指令令(=)与与EQU语语句句有有相相同同的的格格式式与与功功能能,区区别别仅仅在在于于用用等等号号语语句句定定义义的的符符号号允允许许重重新新定定义义,使用更灵活方便。使用更灵活方便。下列等号语句都是有效的:下列等号语句都是有效的:EMP=200HCOUNT=100EMP=AX第20页/共77页3.定义符号名伪指令定义符号名伪指令格式:格式:名称名称LABEL类型类型功能:用来给已定义的变量或标号重新定义它的类
23、型或距功能:用来给已定义的变量或标号重新定义它的类型或距离属性。离属性。例如,在定义堆栈段时,常用下面的格式:例如,在定义堆栈段时,常用下面的格式:ASTACKSEGMENTSTACKDW256DUP(?)(?)ATOPLABELWORDASTACKENDS定义定义256个字的堆栈,用个字的堆栈,用LABEL语句定义的语句定义的ATOP,是给堆,是给堆栈栈底取的名称,把它的类型定义为字。栈栈底取的名称,把它的类型定义为字。第21页/共77页数据定义语句有数据定义语句有5条,其格式相同,如下:条,其格式相同,如下:变量名变量名 DB 初值表达式初值表达式 变量名变量名 DW 初值表达式初值表达式
24、 变量名变量名 DD 初值表达式初值表达式 变量名变量名 DQ 初值表达式初值表达式 变量名变量名 DT 初值表达式初值表达式功能:功能:让汇编程序在内存中划出指定个数的存储单元,然后将这些让汇编程序在内存中划出指定个数的存储单元,然后将这些存储单元与变量名联系起来,并在存储单元中预置初值。存储单元与变量名联系起来,并在存储单元中预置初值。DB伪指令定义字节类型变量,其每个初值都占一个字节的伪指令定义字节类型变量,其每个初值都占一个字节的存储空间。存储空间。DW伪指令用来定义字类型变量,其每个初值都占一个字的伪指令用来定义字类型变量,其每个初值都占一个字的存储空间。存储空间。DD伪指令用来定义
25、双字类型变量,其每个初值都占二个字伪指令用来定义双字类型变量,其每个初值都占二个字的存储空间。的存储空间。数据定义伪指令数据定义伪指令第22页/共77页DQ伪指令用来定义四字类型变量,其每个初值都占四个字伪指令用来定义四字类型变量,其每个初值都占四个字的存储空间。的存储空间。DT伪指令用来定义十字节类型变量,其每个初值都占五个字伪指令用来定义十字节类型变量,其每个初值都占五个字的存储空间。的存储空间。第23页/共77页表达式是赋给变量的初始值,可以有一个,也可以有多个,常表达式是赋给变量的初始值,可以有一个,也可以有多个,常见的有以下几种:见的有以下几种:例例例例 BUFDB20H,30HBU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 编程
限制150内