微机原理第5章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注意: 注意:80486在实模式下定义的逻辑段最大长度不允许超过 在实模式下定义的逻辑段最大长度不允许超过 64K ,一般采用 位寻址方式。 一般采用16位寻址方式。
【小结】 小结】 1. 段定义语句有 个属性参数 每一个参数都有多种选择。 段定义语句有4个属性参数 每一个参数都有多种选择。 个属性参数,每一个参数都有多种选择 2. 模块化程序中才有必要考虑各模块之间同名段的定位 方式和链接方式,对于单一模块的程序不需考虑这些问题。 方式和链接方式,对于单一模块的程序不需考虑这些问题。 3. 单一模块的程序,如果有堆栈段的话,堆栈段的链接 单一模块的程序,如果有堆栈段的话, 属性应为 STACK(因为只有 (因为只有STACK属性才表示该段是堆栈 属性才表示该段是堆栈 ),分类名应为用 分类名应为用’ 段),分类名应为用’STACK’,且不能省略。其它的逻辑 ,且不能省略。 个属性参数都选用缺省方式。 段,前3个属性参数都选用缺省方式。 个属性参数都选用缺省方式 4. 不同模块中,链接方式相同的同名段,如果有‘分类 不同模块中,链接方式相同的同名段,如果有‘ 名’的话,‘分类名’必须相同。 的话, 分类名’必须相同。 5. DOS环境下运行的程序选用 环境下运行的程序选用USE16做段长度。 做段长度。 环境下运行的程序选用 做段长度
;方式定义 ;定义数据段
CS
;定义代码段 ;说明段约定 ;BEG为启动地址 为启动地址
MESG
‘H’ ‘E’ ‘L’ ‘L’ ‘O’ 0D 0A ‘$’
DS
;返回DOS 返回 ;汇编结束
1. 方式选择伪指令
功能:通知汇编程序,当前的源程序指令是哪一种 指令, 功能:通知汇编程序,当前的源程序指令是哪一种CPU指令,经过汇 指令 编链接之后生成的目标程序在哪一种CPU机型上运行,不属于选定 机型上运行, 编链接之后生成的目标程序在哪一种 机型上运行 不属于选定CPU 的指令均为非法指令;为了使汇编程序能够识别, 的指令均为非法指令;为了使汇编程序能够识别,在高版本的汇编程序 对应于每一种CPU的指令系统,都有一个目标指令的集合。 的指令系统, 中,对应于每一种 的指令系统 都有一个目标指令的集合。 指令以句号开头, 格式和功能如下: 指令以句号开头 格式和功能如下: 8086 ; 只汇编 只汇编8086、8088指令 、 指令 286或 286C ; 只汇编 只汇编8086、8088及80286实模式指令 或 、 及 实模式指令 286P ; 只汇编8086、8088及80286全部指令 只汇编 、 及 全部指令 386或 386C ; 同286,且汇编 且汇编80386实模式指令 或 且汇编 实模式指令 386P ; 同286P,且汇编 且汇编80386全部指令 且汇编 全部指令 486或 486C ; 同386,且汇编 且汇编80486实模式指令 或 且汇编 实模式指令 486P ; 同386P,且汇编 且汇编80486全部指令 且汇编 全部指令 通常,方式选择伪指令放在程序的头部,做为源程序的第一条语句。 通常,方式选择伪指令放在程序的头部,做为源程序的第一条语句。 不设置方式选择伪指令与设置8086是等价的。 是等价的。 不设置方式选择伪指令与设置 是等价的
3). ‘分类名’ 分类名’ 分类名
表示逻辑段的类别,由用户定义,是长度不超过 个字符的字符串 个字符的字符串, 表示逻辑段的类别,由用户定义,是长度不超过40个字符的字符串, 必须用单引号括起来,可有可无。 必须用单引号括起来,可有可无。链接程序把不同模块中分类名相同的同 名段组织成一类,存放在邻近的存储区中。 名段组织成一类,存放在邻近的存储区中。 习惯上,数据段分类名用‘ 习惯上,数据段分类名用‘DATA’,代码段分类名用‘CODE’,堆栈 ,代码段分类名用‘ , 段分类名用‘ 。 段分类名用‘STACK’。
第5章 宏汇编语言 章
5.1 宏汇编语言的开发过程 5.2 宏汇编语言基本语句
5.1 宏汇编语言的开发过程
wenku.baidu.com
调链接程序 如:TLINK.EXE 调编辑程序 如:EDIT.EXE QEDIT.EXE 汇编 .OBJ文件 文件 汇编 链接 编辑 .ASM文件 文件 可执行文件.EXE 可执行文件 源程序 库文件 .COM 调汇编程序 如:TASM.EXE
5.2 宏汇编语言基本语句(P95) 宏汇编语言基本语句( 5.2.1 源程序的结构
一个完整的源程序在结构上必须做到: 一个完整的源程序在结构上必须做到: ① 用方式选择伪指令说明执行该程序的微处理器类型; 用方式选择伪指令说明执行该程序的微处理器类型; 用段定义语句定义每一个逻辑段; ② 用段定义语句定义每一个逻辑段; 用过程定义语句定义每一个子程序; ③ 用过程定义语句定义每一个子程序; 语句说明段约定; ④ 用ASSUME语句说明段约定; 语句说明段约定 用汇编结束语句说明源程序结束; ⑤ 用汇编结束语句说明源程序结束; 程序在完成预定功能之后,应能安全返回DOS。 ⑥ 程序在完成预定功能之后,应能安全返回 。
表达式:逻辑段在定位时, ⑤ AT 表达式:逻辑段在定位时,其段基址等于表达式给出 的值。 的值。 AT属性常和 ORG伪指令配合,如: 伪指令配合, 属性常和 伪指令配合
DATA SEGMENT AT 0040H ORG 0017H KEYFLAG DB ? DATA ENDS
定义键标志单元( 定义键标志单元(KEYFLAG)的物理地址为 )的物理地址为00417H,以 , 便代码段中可以使用变量名KEYFLAG访问这个单元。 访问这个单元。 便代码段中可以使用变量名 访问这个单元 AT参数不能使用在代码段。 参数不能使用在代码段。 参数不能使用在代码段 缺省:表明该段是一个独立的逻辑段, ⑥ 缺省:表明该段是一个独立的逻辑段,链接程序对于不同 模块中,链接参数缺省的同名段,不进行组合。 模块中,链接参数缺省的同名段,不进行组合。 注意:模块化程序设计中才用到链接参数! 注意:模块化程序设计中才用到链接参数!
属性的逻辑段是堆栈段, ④ STACK:具有 :具有STACK属性的逻辑段是堆栈段,链接程 属性的逻辑段是堆栈段 序把不同模块中具有STACK属性的同名段链接成一个大的堆 属性的同名段链接成一个大的堆 序把不同模块中具有 栈段, 栈段,链接后的堆栈空间是链接前各模块预留的堆栈空间之 和。 程序装入后, 自动给SS寄存器赋值 程序装入后,DOS自动给 寄存器赋值,使之等于堆栈段 自动给 寄存器赋值, 段基址;自动给 赋值 使之等于堆栈空间的字节数; 赋值, 段基址;自动给SP赋值,使之等于堆栈空间的字节数;使 SS:SP自动指向栈顶。 自动指向栈顶。 自动指向栈顶 EXE文件的汇编源程序,必须有堆栈段,否则链接时发出 文件的汇编源程序,必须有堆栈段, 文件的汇编源程序 警告信息: 警告信息: Warning no stack segment 这行信息仅仅是提醒用户注意,并不表示源程序有什么错误。 这行信息仅仅是提醒用户注意,并不表示源程序有什么错误。
4). 段长度
这一参数是80386、80486汇编语言新增的段参数,只有高版本的汇编器 这一参数是 、 汇编语言新增的段参数, 汇编语言新增的段参数 才能识别,它有两种描述方式可供选择: 才能识别,它有两种描述方式可供选择: ① USE16:表示该逻辑段长度最大允许为 :表示该逻辑段长度最大允许为64K,单元的有效地址为 位 ,单元的有效地址为16位 访问该逻辑段应采用16位寻址方式 位寻址方式。 ,访问该逻辑段应采用 位寻址方式。 ② USE32:表示该逻辑段长度可以超过 :表示该逻辑段长度可以超过64K,单元的有效地址为 位, ,单元的有效地址为32位 访问该逻辑段采用32位寻址方式。 访问该逻辑段采用 位寻址方式。 位寻址方式
定位参数通知链接程序逻辑段的目标代码在存储器中如何存放。 定位参数通知链接程序逻辑段的目标代码在存储器中如何存放。 字节地址: ① BYTE字节地址:表明该逻辑段的目标代码可以从任意地址开始依次 字节地址 存放; 存放; 字地址: ② WORD字地址:表示该逻辑段的目标代码从偶地址开始依次存放; 字地址 表示该逻辑段的目标代码从偶地址开始依次存放; ③ PARA(或者缺省)节地址:表示该逻辑段的目标代码从一个能被 (或者缺省)节地址:表示该逻辑段的目标代码从一个能被16 整除的地址开始依次存放; 整除的地址开始依次存放; 页地址: ④ PAGE页地址:表示该逻辑段的目标代码从一个能被 页地址 表示该逻辑段的目标代码从一个能被256整除的地址开 整除的地址开 始依次存放。 始依次存放。
定位参数,链接参数, 分类名’ 为段定义语句的 个属 定位参数,链接参数,‘分类名’:为段定义语句的3个属 性参数,可以选用1~ 个 也可以全部省略。 性参数,可以选用 ~3个,也可以全部省略。 属性参数的功能:为源程序的汇编、链接提供必要的信息。 属性参数的功能:为源程序的汇编、链接提供必要的信息。 1). 定位参数
3. 段约定语句 格式: 段寄存器:段名 段名, 段寄存器:段名 格式:ASSUME 段寄存器 段名 …… , 段寄存器 段名 功能: 语句通知汇编程序, 功能:ASSUME语句通知汇编程序,寻址逻辑段使用哪一 语句通知汇编程序 个段寄存器。 个段寄存器。 说明: 说明: 语句是非执行语句, 放在代码段之中, ① ASSUME语句是非执行语句,要求放在代码段之中,执 语句是非执行语句 要求放在代码段之中 行寻址操作之前。习惯上, 行寻址操作之前。习惯上,把ASSUME语句作为代码段的第 语句作为代码段的第 一条语句。 一条语句。 语句, ② ASSUME语句,仅仅是约定了对某个逻辑段进行寻址操 语句 仅仅是约定了对某个逻辑段进行寻址操 作时使用哪一个段寄存器, 作时使用哪一个段寄存器,而段寄存器的初值还必须在程序 中用指令设置。 中用指令设置。
.486 DATA SEGMENT USE16 MESG DB ‘HELLO’, 0DH, 0AH, ’$’ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE, DS:DATA BEG: MOV AX, DATA MOV DS, AX MOV CX, 10 LAST: MOV AH, 9 MOV DX, OFFSET MESG INT 21H LOOP LAST MOV AH, 4CH INT 21H CODE ENDS END BEG
2). 链接参数 链接又称组合, 链接又称组合,链接参数通知链接程序如何将不同模块中 的同名逻辑段组合成一个段: 的同名逻辑段组合成一个段: ① PUBLIC:通知链接程序,把不同模块中具有 :通知链接程序,把不同模块中具有PUBLIC 属性的同名段,在满足定位方式前提下, 属性的同名段,在满足定位方式前提下,按照指定的链接顺 序进行链接,组成一个逻辑段; 序进行链接,组成一个逻辑段; 属性和PUBLIC属性是 ② MEMORY:实验证明 :实验证明MEMORY属性和 属性和 属性是 等价的; 等价的; :通知链接程序,把不同模块中, ③ COMMON:通知链接程序,把不同模块中,具有 COMMON属性的同名段,根据指定的链接顺序,按照“覆 属性的同名段, 属性的同名段 根据指定的链接顺序,按照“ 盖”方式组合成一个逻辑段。组合之后的逻辑段体积,等于 方式组合成一个逻辑段。组合之后的逻辑段体积, 链接之前具有COMMON属性同名段中最大的段体; 属性同名段中最大的段体; 链接之前具有 属性同名段中最大的段体
2. 段定义语句 功能: 功能: 是逻辑段的定界语句, 是逻辑段的定界语句,源程序中每一个逻辑段都必须用段定 义语句定界。 义语句定界。 段定义语句格式如下: 段定义语句格式如下: 分类名’ 段名 SEGMENT 定位参数 链接参数 ‘分类名’ 段长度 段体 段名 ENDS
段名:命名规则和变量名及标号名一样,它不能代表段体的性质, 段名:命名规则和变量名及标号名一样,它不能代表段体的性质,但为 了阅读方便,习惯上总是根据段体的性质起一个适当的段名。 了阅读方便,习惯上总是根据段体的性质起一个适当的段名。 通常用DATA做为数据段的段名,用STACK做为堆栈段的段名, 做为数据段的段名, 做为堆栈段的段名, 通常用 做为数据段的段名 做为堆栈段的段名 CODE做为代码段的段名。 做为代码段的段名。 做为代码段的段名 SEGMENT/ENDS:是一对段定义语句,一个逻辑段从 :是一对段定义语句,一个逻辑段从SEGMENT语句 语句 开始, 语句结束。 开始,到ENDS语句结束。 语句结束
相关文档
最新文档