收藏 分享(赏)

宏汇编语言.ppt

上传人:ysd1539 文档编号:7271384 上传时间:2019-05-12 格式:PPT 页数:29 大小:469KB
下载 相关 举报
宏汇编语言.ppt_第1页
第1页 / 共29页
宏汇编语言.ppt_第2页
第2页 / 共29页
宏汇编语言.ppt_第3页
第3页 / 共29页
宏汇编语言.ppt_第4页
第4页 / 共29页
宏汇编语言.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、,汇编语言程序设计 第五章 宏汇编语言,第五章 宏汇编语言,5.1 宏汇编语言基本语句,一个完整的源程序在结构上必须做到:用方式选择伪指令说明执行该程序的微处理器类型;用段定义语句定义每一个逻辑段;用过程定义语句定义每一个子程序;用ASSUME语句说明段约定;用汇编结束语句说明源程序结束;程序在完成预定功能之后,应能安全返回DOS。,5.1 宏汇编语言基本语句,.486 ;方式定义 DATA SEGMENT USE16 ;定义数据段 MESG DB HELLO,0DH,0AH,$ DATA ENDS CODE SEGMENT USE16 ;定义代码段 ASSUME CS:CODE,DS:DAT

2、A ;说明段约定 BEG: MOV AX,DATA ;BEG为启动地址MOV DS,AXMOV CX,10 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CH INT 21H ;返回DOS CODE ENDSEND BEG ;汇编结束,方式选择伪指令的格式和功能,上述程序段中包括了:1. 方式选择伪指令;2. 段定义语句;3. 段约定语句;4. 过程定义语句;5. 汇编结束语句;6. 返回DOS语句。这类语句是与程序结构密切相关的基本语句,用来说明MPU类型、段结构与寻址方式的段约定、目标块的定位和源程序结束。,宏汇编程序的构成

3、,通常,方式选择伪指令放在程序的头部,作为源程序的第一条语句。不设置方式选择伪指令与设置 .8086 是等价的。,1、方式选择伪指令,功能:80586指令集是在 8086、8088、80286、80386、80486基础上发展起来的,指令集向前兼容,但后续CPU的指令集往往包含早期CPU没有的指令。在使用高版本汇编程序时,必须通知汇编程序,当前的源程序指令是哪一种CPU指令,经过汇编链接之后生成的目标程序在哪一种CPU机型上运行。,1、方式选择伪指令,方式选择伪指令的格式和功能:,.8086 ; 只汇编8086、8088指令; .286或 .286C ; 只汇编8086、8088及80286实

4、模式指令; .286P ; 只汇编8086、8088及80286全部指令 ; .386或 .386C ; 同.286,且汇编80386实模式指令; .386P ; 同.286P,且汇编80386全部指令; .486或 .486C ; 同.386,且汇编80486实模式指令; .486P ; 同.386P,且汇编80486全部指令 ; .586或 .586C ; 同.486,且汇编80586实模式指令; .586P ; 同.486P,且汇编80586全部指令。,功能:段定义语句是逻辑段的定界语句,源程序中每一个逻辑段都必须用段定义语句定界。 格式:段名 SEGMENT 定位参数 链接参数 分类名

5、 段长度段体段名 ENDS,2、段定义语句,SEGMENT / ENDS是一对段定义语句,一个逻辑段从 SEGMENT 语句开始,到ENDS 语句结束。 段名 命名规则和变量名及标号名一样,段名并不能直接表示段体的性质,但为了阅读方便,习惯上总是根据段体的性质起一个适当的段名。通常用DATA做为数据段的段名,用STACK做为堆栈段的段名,用CODE做为代码段的段名。,2、段定义语句,定位参数,链接参数,分类名为段定义语句的3个属性参数,可以选用13个,也可以全部省略。属性参数的功能:为源程序的汇编、链接提供必要的信息。在大型程序开发中,常采用模块化方法。每个模块都有自己的数据段、代码段等。各个

6、模块独立编辑、汇编,最后链接起来成为一个完整功能的执行文件。定位参数、链接参数是用于说明模块如何定位,彼此之间如何链接等。,2、段定义语句,(1) 定位参数定位参数通知链接程序,逻辑段的目标代码在存储器中如何存放。 BYTE字节地址:表明该逻辑段的目标代码可以从任意地址开始依次存放(因为存储器是以字节为基本单位组织的); WORD字地址:表示该逻辑段的目标代码,从偶地址开始依次存放; PARA(或者缺省)节地址:表示该逻辑段的目标代码,从一个能被16整除的地址开始依次存放; PAGE页地址:表示该逻辑段的目标代码,从一个能被256整除的地址开始依次存放。,2、段定义语句,(2) 链接参数链接又

7、称组合,链接参数通知链接程序如何将不同模块中的同名逻辑段组合成一个段。 PUBLIC MEMORY COMMON STACK AT表达式 缺省:表明该段是一个独立的逻辑段,链接程序对于不同模块中,链接参数缺省的同名段,不进行组合。,2、段定义语句,链接程序要求,最终生成EXE文件的汇编源程序,必须有堆栈段,否则链接时发出警告信息:Warning no stack segment但是这行信息仅仅是提醒用户注意,并不代表程序错误。,注意:模块化程序设计中才会用到链接参数。,2、段定义语句,注意:链接程序对于不同模块中的同名段进行链接时,对于有BYTE属性的段,总是紧接着前一段存放,不留空闲单元。对

8、于有WORD属性的段,也是紧接前一段存放,最多留出一个空闲单元。,(3) 段长度段长度是80386以后汇编语言新增加的段参数,只有高版本的汇编器才识别。 USE 16 :表示该逻辑段长度最大64KB,单元偏移地址16位,访问该逻辑段采用16位寻址方式。 USE 32 :表示该逻辑段长度可以超过64KB,单元偏移地址32位,访问该逻辑段采用32位寻址方式。运行实地址模式下的程序若访问高于64KB的单元(偏移地址大于FFFFH),必然引起系统异常中断,导致死机。,2、段定义语句,1、 段定义语句共有4个属性参数,在定义时每一个参数都有多种选择;2、 模块化程序中才有必要考虑各模块之间同名段的定位方

9、式和链接方式,对于单一模块的程序不需要考虑这些问题;3、 单一模块的程序,如果有堆栈段的话,堆栈段的链接属性应为STACK(因为只有STACK属性才表示该段是堆栈段),分类名应为STACK,且不能省略。其它的逻辑段,前3个属性参数都选用缺省方式;4、 不同模块中,链接方式相同的同名段,如果有分类名的话,分类名必须相同;5、 DOS环境下运行的程序选用USE16做段长度。,段定义语句小结,3、段约定语句格式: ASSUME 段寄存器:段名,段寄存器:段名功能: 使用ASSUME语句通知汇编程序,列表中的逻辑段使用哪一个段寄存器。,说明: ASSUME语句是非执行语句,要求放在代码段之中、执行寻址

10、操作之前。习惯上,把ASSUME语句作为代码段的第一条语句; ASSUME语句,仅仅是约定了对某个逻辑段进行寻址操作时使用哪一个段寄存器,并未真正对段寄存器赋值。段寄存器的初值必须在程序中用指令设置。,4、过程定义语句所谓“过程”,即“子程序”。子程序必须用过程定义语句定界,用RET作为返回指令。PROC开始,ENDP结束。格式:过程名 PROC 属性参数过程的实体RET过程名 ENDP,5、汇编结束语句格式1: END 程序的启动地址标号例如: END BEGIN功能:通知汇编程序,源程序到此结束,且说明用BEGIN作标号的指令是程序的启动指令(即第一条被执行的指令)。DOS装载可执行文件(

11、EXE文件)时,自动把标号BEGIN所在段的段基址赋给CS,把BEGIN所在单元的偏移量赋给IP,从而使CPU自动从BEGIN开始的那条指令依次执行程序。注意:在单一模块的源程序中,以及在模块化程序的主模块中必须用此格式作为源程序的最后一条语句。,5、汇编结束语句格式2: END 功能: 通知汇编程序,源程序到此结束。在模块化程序的子模块中,必须用此格式作为源程序的最后一条语句。,结束语句有三种:段结束(SEGMENT / ENDS)过程结束(PROC / ENDP)汇编结束(END),6、 返回DOS语句程序在完成预定任务之后,必须返回DOS。返回DOS最常用的方法是使用DOS系统4CH功能

12、调用,即连续执行以下3条(或2条)指令:MOV AH,4CHMOV AL,返回码 ; 不准备组织批处理文件,此条可省INT 21H采用此系统调用,将CPU控制权交回DOS操作系统。,.486 ; 方式定义 DATA SEGMENT USE16 ; 定义数据段MESG DB HELLO,0DH,0AH,$ DATA ENDS STACK SEGMENT PARA STACK STACK USE16 ; 定义堆栈段DB 100 DUP(?) STACK ENDS CODE SEGMENT USE16 ; 定义代码段ASSUME CS:CODE, DS:DATA, SS:STACK ; 说明段约定

13、BEG: MOV AX, DATA ; BEG为启动地址标号MOV DS, AXMOV CX, 10 LAST: MOV AH, 9MOV DX, OFFSET MESGINT 21HLOOP LASTMOV AH, 4CH INT 21H ; 返回DOS CODE ENDSEND BEG ; 汇编结束,应用举例,第五章 宏汇编语言,5.2 宏汇编语言开发过程,5.2 宏汇编语言的开发过程,编辑程序:按照要求使用编辑软件编写汇编程序源代码。可以使用你所熟悉的文本编辑软件,但源程序文本文件中不能有格式控制字符(可能不可见),除注释部分,不能使用中文。汇编程序:将.ASM的源程序代码翻译成初步的机

14、器码,能够发现程序中的语法错误。链接程序:根据参数,将汇编程序生成的机器码文件,链接成为真正的可执行文件。,.486 ; 方式定义 DATA SEGMENT USE16 ; 定义数据段MESG DB HELLO,0DH,0AH,$ DATA ENDSCODE SEGMENT USE16 ; 定义代码段ASSUME CS:CODE, DS:DATA ; 说明段约定 BEG: MOV AX, DATA ; BEG为启动地址MOV DS, AXMOV CX, 10 LAST: MOV AH, 9MOV DX, OFFSET MESGINT 21HLOOP LASTMOV AH, 4CH INT 21

15、H ; 返回DOS CODE ENDSEND BEG ; 汇编结束,应用举例,稍作修改:显示6行Hello world!.486 DATA SEGMENT USE16 ;定义数据段MESG DB Hello world!,0DH,0AH,$ DATA ENDS STACK SEGMENT PARA STACK STACK USE16 ;定义堆栈段DB 100 DUP(?) STACK ENDSCODE SEGMENT USE16 ;定义代码段ASSUME CS:CODE, DS:DATA, SS:STACK ;说明段约定 BEG: MOV AX, DATA ;BEG为启动地址标号MOV DS,

16、 AXMOV CX, 6 LAST: MOV AH, 9MOV DX, OFFSET MESGINT 21HLOOP LASTMOV AH,4CH INT 21H ;返回DOS CODE ENDSEND BEG ;源程序结束,应用举例,编译、连接及运行过程,稍作修改:显示6行Hello world!的同时增加显示特殊符号.486 DATA SEGMENT USE16 ;定义数据段MESG DB 3,20H,Hello world!,0DH,0AH,$ DATA ENDS STACK SEGMENT PARA STACK STACK USE16 ;定义堆栈段DB 100 DUP(?) STACK

17、 ENDSCODE SEGMENT USE16 ;定义代码段ASSUME CS:CODE,DS:DATA,SS:STACK ;说明段约定 BEG: MOV AX,DATA ;BEG为启动地址标号MOV DS,AXMOV CX,6 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CH INT 21H ;返回DOS CODE ENDSEND BEG ;源程序结束,应用举例,稍作修改:生成.COM文件显示6行Hello world!.486 CODE SEGMENT USE16 ;定义代码段ASSUME CS:CODE ;只需说明代码段约定 ORG 100H START: JMP BEGMESG DB 3,20h,Hello world!,0DH,0AH,$ BEG: MOV CX,6 ;不用初始化段寄存器,直接运行 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP LASTMOV AH,4CH INT 21H ;返回DOS CODE ENDSEND BEG ;源程序结束,应用举例,编译、连接及运行过程,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报