南邮微机原理第5章_第1页
南邮微机原理第5章_第2页
南邮微机原理第5章_第3页
南邮微机原理第5章_第4页
南邮微机原理第5章_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5 5章章 宏汇编语言宏汇编语言5.1 5.1 宏汇编语言的开发过程宏汇编语言的开发过程5.2 5.2 宏汇编语言基本语句宏汇编语言基本语句编辑程序编辑程序. ASM 文件文件汇编程序汇编程序. OBJ 文件文件连接程序连接程序. EXE 文件文件Edit 等等TMASMTLINK5.1 5.1 宏汇编语言的开发过程宏汇编语言的开发过程5.2.1 源程序的结构源程序的结构 一个完整的源程序在结构上必须做到一个完整的源程序在结构上必须做到: : 用方式选择伪指令说明执行该程序的微处理用方式选择伪指令说明执行该程序的微处理 器类型;器类型; 用段定义语句定义每一个逻辑段;用段定义语句定义每一个

2、逻辑段; 用过程定义语句定义每一个子程序;用过程定义语句定义每一个子程序; 用用ASSUMEASSUME语句说明段约定;语句说明段约定; 用汇编结束语句说明源程序结束;用汇编结束语句说明源程序结束; 程序在完成预定功能之后程序在完成预定功能之后, ,应能安全返回应能安全返回DOSDOS。5.2 5.2 宏汇编语言基本语句宏汇编语言基本语句 .486.486 ;方式定义;方式定义 DATA SEGMENT USE16DATA SEGMENT USE16 ;定义数据段;定义数据段 MESG DB HELLO,0DH,0AH,$MESG DB HELLO,0DH,0AH,$ DATA ENDSDAT

3、A ENDS CODE SEGMENT USE16 CODE SEGMENT USE16 ;定义代码段;定义代码段 ASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATA ;说明段约定;说明段约定 BEG:BEG: MOV AX,DATA MOV AX,DATA ;BEGBEG为启动地址为启动地址 MOV DS,AXMOV DS,AX MOV CX,10 MOV CX,10 LAST: MOV AH,9 LAST: MOV AH,9 MOV DX,OFFSET MESG MOV DX,OFFSET MESG INT 21H INT 21H LOOP LAST

4、LOOP LAST MOV AH,4CH MOV AH,4CH INT 21H INT 21H ;返回;返回DOSDOS CODE ENDSCODE ENDS END BEGEND BEG ;汇编结束;汇编结束HELLO0D0A$MESGDSCS1. 方式选择伪指令方式选择伪指令2. 段定义语句段定义语句3. 段约定语句段约定语句4. 过程定义语句过程定义语句5. 汇编结束语句汇编结束语句6.返回返回DOS语句语句 这类语句是与程序结构密切相关的基本语句这类语句是与程序结构密切相关的基本语句, ,用来说明用来说明MPUMPU类型、段结构与寻址方式的段约定、目标块的定位和类型、段结构与寻址方式的

5、段约定、目标块的定位和源程序结束源程序结束。 功能:功能: 通知汇编程序通知汇编程序, ,当前的源程序指令是哪一种当前的源程序指令是哪一种CPUCPU指令指令, ,经过汇经过汇编链接之后生成的目标程序在哪一种编链接之后生成的目标程序在哪一种CPUCPU机型上运行。机型上运行。 不属于选定不属于选定CPUCPU的指令均为非法指令。的指令均为非法指令。8048680486指令集是在指令集是在80868086、80888088、8028680286、8038680386基础上逐步发展起来的基础上逐步发展起来的, ,很显然很显然,80486,80486的的某些指令在早期的某些指令在早期的80X8680

6、X86系列是没有的系列是没有的, ,为了使汇编程序能够识为了使汇编程序能够识别别, ,在高版本的汇编程序中在高版本的汇编程序中, ,对应于每一种对应于每一种CPUCPU的指令系统的指令系统, ,都有都有一个目标指令的集合。一个目标指令的集合。指令以句号开头指令以句号开头, , 格式和功能如下格式和功能如下: : 8086 ;只汇编只汇编8086、8088指令。指令。 286或或 286C ;只汇编只汇编8086、8088及及80286实模式指令实模式指令 286P ;只汇编只汇编8086、8088及及80286全部指令全部指令 386或或 386C ;同同286,且汇编且汇编80386实模式指

7、令实模式指令 386P ;同同286P,且汇编且汇编80386全部指令全部指令 486或或 486C ;同同386,且汇编且汇编80486实模式指令实模式指令 486P ;同同386P,且汇编且汇编80486全部指令全部指令 通常通常,方式选择伪指令放在程序的头部方式选择伪指令放在程序的头部,做为源程序的第一条做为源程序的第一条语句。不设置方式选择伪指令与设置语句。不设置方式选择伪指令与设置8086是等价的。是等价的。 功能:功能: 是逻辑段的定界语句是逻辑段的定界语句, ,源程序中每一个逻辑段都必须用段定义语句定界。源程序中每一个逻辑段都必须用段定义语句定界。 段定义语句格式如下段定义语句格

8、式如下: : 段名段名 SEGMENT 段体段体 段名段名 ENDS 是一对段定义语句是一对段定义语句, ,一个逻辑段从一个逻辑段从SEGMENTSEGMENT语句开始语句开始, ,到到ENDSENDS语句结束。语句结束。 命名规则和变量名及标号名一样命名规则和变量名及标号名一样, ,它不能代表段体的性质它不能代表段体的性质, ,但为但为了阅读方便了阅读方便, ,习惯上总是根据段体的性质起一个适当的段名。通常用习惯上总是根据段体的性质起一个适当的段名。通常用DATADATA做为数据段的段名做为数据段的段名, ,用用STACKSTACK做为堆栈段的段名做为堆栈段的段名, ,CODECODE为代码

9、段的段名。为代码段的段名。 为段定义语句的为段定义语句的3 3个属性参数个属性参数, ,可以选用可以选用1 13 3个个, ,也可以全部省略。也可以全部省略。属性参数的功能:属性参数的功能: 为源程序的汇编、链接提供必要的信息。为源程序的汇编、链接提供必要的信息。(1) (1) 定位参数通知链接程序定位参数通知链接程序, ,逻辑段的目标代码在存储器中如何存放。逻辑段的目标代码在存储器中如何存放。 字节地址字节地址: :表明该逻辑段的目标代码可以从任意地址开始依次存放表明该逻辑段的目标代码可以从任意地址开始依次存放; ; 字地址字地址: :表示该逻辑段的目标代码表示该逻辑段的目标代码, ,从偶地

10、址开始依次存放从偶地址开始依次存放; ; 节地址节地址: :表示该逻辑段的目标代码表示该逻辑段的目标代码, ,从一个能被从一个能被1616整除整除的地址开始依次存放的地址开始依次存放; ; 页地址页地址: :表示该逻辑段的目标代码表示该逻辑段的目标代码, ,从一个能被从一个能被256256整除的地址开整除的地址开始依次存放。始依次存放。 链接程序对于不同模块中的同名段进行链接时链接程序对于不同模块中的同名段进行链接时, ,对于有对于有BYTEBYTE属性的段属性的段, ,总总是紧接着前一段存放是紧接着前一段存放, ,不留空闲单元。对于有不留空闲单元。对于有WORDWORD属性的段属性的段, ,

11、也是紧接前一也是紧接前一段存放段存放, ,最多留出一个空闲单元。最多留出一个空闲单元。 (2) 链接又称组合链接又称组合,链接参数通知链接程序如何将不同模块中的同名逻辑段组合链接参数通知链接程序如何将不同模块中的同名逻辑段组合成一个段成一个段 PUBLIC:通知链接程序:通知链接程序,把不同模块中具有把不同模块中具有PUBLIC属性的同名段属性的同名段,在在满足定位方式前提下满足定位方式前提下,按照指定的链接顺序进行链接按照指定的链接顺序进行链接,组成一个逻辑段组成一个逻辑段; MEMORY:实验证明:实验证明 MEMORY属性和属性和 PUBLIC属性是等价的属性是等价的; COMMON:通

12、知链接程序:通知链接程序,把不同模块中把不同模块中,具有具有 COMMON 属性的同名属性的同名段段,根据指定的链接顺序根据指定的链接顺序,按照按照 “覆盖覆盖” 方式组合成一个逻辑段。组合之后的方式组合成一个逻辑段。组合之后的逻辑段体积逻辑段体积,等于链接之前具有等于链接之前具有 COMMON 属性同名段中最大的段体属性同名段中最大的段体; STACK: 具有具有STACK属性的逻辑段是堆栈段属性的逻辑段是堆栈段,链接程序将把不同模块中链接程序将把不同模块中具有具有STACK属性的同名段链接成一个大的堆栈段。链接后的堆栈空间是链属性的同名段链接成一个大的堆栈段。链接后的堆栈空间是链接前各模块

13、预留的堆栈空间之和。接前各模块预留的堆栈空间之和。 程序装入后程序装入后,DOS自动给自动给SS寄存器赋值寄存器赋值,使之等于堆栈段段基址使之等于堆栈段段基址,自动给自动给SP赋赋值值,使之等于堆栈空间的字节数使之等于堆栈空间的字节数,使使 SS:SP自动指向栈顶。自动指向栈顶。 链接程序要求链接程序要求:EXE文件的汇编源程序文件的汇编源程序,必须有堆栈段必须有堆栈段,否则链接时发出警告否则链接时发出警告信息信息: Warning no stack segment这行信息仅仅是提醒用户注意这行信息仅仅是提醒用户注意,并不表示源程序有什么错误。并不表示源程序有什么错误。 AT 表达式表达式:

14、该属性表明该属性表明:逻辑段在定位时逻辑段在定位时,其段基址等于表达式给出的值。其段基址等于表达式给出的值。AT属性常和属性常和 ORG伪指令配合伪指令配合 如如: DATA SEGMENT AT 0040H ORG 0017H KEYFLAG DB ? DATA ENDS 定义键标志单元定义键标志单元(KEYFLAG)的物理地址为的物理地址为00417H,以便代码段中可以使用以便代码段中可以使用变量名变量名KEYFLAG访问这个单元。访问这个单元。 AT 参数不能使用在代码段。参数不能使用在代码段。 缺省缺省:表明该段是一个独立的逻辑段表明该段是一个独立的逻辑段,链接程序对于不同模块中链接程

15、序对于不同模块中,链接参数缺链接参数缺省的同名段省的同名段,不进行组合。不进行组合。模块化程序设计中才用到链接参数模块化程序设计中才用到链接参数 表示逻辑段的类别。表示逻辑段的类别。 由用户定义由用户定义,是长度不超过是长度不超过40个字符的字符串。个字符的字符串。 分类名必须用单引号括起来分类名必须用单引号括起来,分类名可有可无。分类名可有可无。 习惯上习惯上,数据段分类名用数据段分类名用DATA,代码段分类名用代码段分类名用CODE,堆栈段分类名用堆栈段分类名用 STACK。 链接程序把不同模块中分类名相同的同名段组织成一类链接程序把不同模块中分类名相同的同名段组织成一类,存放存放在邻近的

16、存储区中。在邻近的存储区中。 这一参数是这一参数是80386、80486汇编语言新增的段参数汇编语言新增的段参数,只有高版只有高版本的汇编器才能识别本的汇编器才能识别,它有两种描述方式可供选择它有两种描述方式可供选择: USE16:表示该逻辑段长度最大允许为表示该逻辑段长度最大允许为64K,单元的有效地单元的有效地址为址为16位位,访问该逻辑段应采用访问该逻辑段应采用16位寻址方式。位寻址方式。 USE32:表示该逻辑段长度可以超过表示该逻辑段长度可以超过64K,单元的有效地址单元的有效地址为为32位位,访问该逻辑段采用访问该逻辑段采用32位寻址方式。位寻址方式。注意:注意:80486在实模式

17、下定义的逻辑段最大长度不允许超过在实模式下定义的逻辑段最大长度不允许超过64K ,一般采用一般采用16位寻址方式。位寻址方式。TASM5默认段长度为默认段长度为USE16 1. 段定义语句有段定义语句有4个属性参数个属性参数,每一个参数都有多种选择。每一个参数都有多种选择。 2. 模块化程序中才有必要考虑各模块之间同名段的定位模块化程序中才有必要考虑各模块之间同名段的定位方式和链接方式。对于单一模块的程序不需考虑这些问题。方式和链接方式。对于单一模块的程序不需考虑这些问题。 3. 单一模块的程序单一模块的程序,如果有堆栈段的话如果有堆栈段的话,堆栈段的链接属堆栈段的链接属性应为性应为 STAC

18、K(因为只有因为只有STACK属性才表示该段是堆栈属性才表示该段是堆栈段段),分类名应为用分类名应为用STACK,且不能省略。其它的逻辑段,且不能省略。其它的逻辑段,前前3个属性参数都选用缺省方式。个属性参数都选用缺省方式。 4. 不同模块中不同模块中,链接方式相同的同名段链接方式相同的同名段,如果有如果有分类名分类名的话的话,分类名分类名必须相同。必须相同。 5. DOS环境下运行的程序选用环境下运行的程序选用USE16做段长度。做段长度。格式格式: ASSUME 段寄存器段寄存器:段名段名,段寄存器段寄存器:段名段名功能功能: ASSUME 语句通知汇编程序语句通知汇编程序,寻址逻辑段使用

19、哪一个寻址逻辑段使用哪一个 段寄存器。段寄存器。 ASSUME语句是非执行语句语句是非执行语句,要求放在代码段之中要求放在代码段之中,执行寻址操作之前。执行寻址操作之前。习惯上习惯上,把把ASSUME语句作为代码段的第一条语句。语句作为代码段的第一条语句。 ASSUME语句语句,仅仅是约定了对某个逻辑段进行寻址操作时使用哪一仅仅是约定了对某个逻辑段进行寻址操作时使用哪一个段寄存器个段寄存器,而段寄存器的初值还必须在程序中用指令设置。而段寄存器的初值还必须在程序中用指令设置。 “过程过程”即即“子程序子程序”。子程序必须用。子程序必须用RET作为返回指令作为返回指令,用用过程定义语句为子程序定界

20、。过程定义语句为子程序定界。 格式格式: 过程名过程名 PROC 属性参数属性参数 过程的实体过程的实体 RET 过程名过程名 ENDP 格式格式1: END 程序的启动地址标号程序的启动地址标号 例如例如 : END BEGIN 功能功能 : 通知汇编程序通知汇编程序,源程序到此结束源程序到此结束,用用BEGIN作标号的指作标号的指令是程序的启动指令。令是程序的启动指令。 DOS装载程序的可执行文件装载程序的可执行文件(EXE文件文件)时时,自动把标号自动把标号BEGIN所在段的段基址赋给所在段的段基址赋给CS,把把BEGIN所在单元的偏移量赋给所在单元的偏移量赋给IP。从而从而CPU自动从自动从BEGIN开始的那条指令依次执行程序。开始的那条指令依次执行程序。 注意注意 :在单一模块的源程序中在单一模块的源程序中,以及在模块化程序的主模块以及在模块化程序的主模块中必须用此格式作为源程序的最后一条语句。中必须用此格式作为源程序的最后一条语句。格式格式2: END功能功能 : 通知汇编程序通知汇编程序,源程序到此结束。在模块化程序的源程序到此结束。在模块化程序的子模块中子模

温馨提示

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

评论

0/150

提交评论