第3章汇编语言程序格式教学文稿

上传人:yuzo****123 文档编号:137785168 上传时间:2020-07-11 格式:PPT 页数:64 大小:408.50KB
返回 下载 相关 举报
第3章汇编语言程序格式教学文稿_第1页
第1页 / 共64页
第3章汇编语言程序格式教学文稿_第2页
第2页 / 共64页
第3章汇编语言程序格式教学文稿_第3页
第3页 / 共64页
第3章汇编语言程序格式教学文稿_第4页
第4页 / 共64页
第3章汇编语言程序格式教学文稿_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《第3章汇编语言程序格式教学文稿》由会员分享,可在线阅读,更多相关《第3章汇编语言程序格式教学文稿(64页珍藏版)》请在金锄头文库上搜索。

1、0,第3章 汇编语言程序格式,3.1 汇编程序功能 3.2 伪操作 3.3 汇编语言程序格式 3.4 汇编语言程序的上机过程,1,3.1 汇编程序功能,计算机是通过执行指令序列来解决问题的。计算机的指令系统就是指该计算机能够执行的全部指令的集合。 指令的一般格式: 标号: 操作符 OPD, OPS ;注释 算术运算和位操作类指令的部分单操作数指令的格式: 标号: 操作符 OPD ;注释,2,汇编语言程序的建立及开发过程,编辑,文本编辑器,如 EDIT.COM,源程序:文件名.asm,汇编,汇编程序,如 MASM.EXE,目标模块:文件名.obj,连接,连接程序,如 LINK.EXE,可执行文件

2、:文件名.exe,错误,3,汇编程序的主要功能,检查源程序 测出源程序中的语法错误,并给出出错信息 产生源程序的目标程序,并可给出列表文件(同时列出汇编语言和机器语言的文件,称为LST文件) 展开宏指令,5,汇编语言语句实例 MOV CX,0;传送指令,具有2个操作数 DELAY:NOP ;空操作指令,没有操作数,带有标号 LOOP DELAY ;循环指令,标号DELAY说明转移位置 BUFFERDB 1,2,3,4,5,6,7 ;数据定义伪指令,在主存中开辟7个连续的字节单元,初值依次为17,BUFFER表示首地址,6,3.2.1 段定义伪操作,1.完整的段定义伪操作 存储器的物理地址是由段

3、地址和偏移地址组合而成的,汇编程序在把源程序转换为目标程序时,必须确定标号和变量的偏移地址,并且需要把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起,形成一个可执行程序。为此需要用段定义伪操作,格式如下: 段名 SEGMENT 定位 组合 使用 类别 . ;对数据段,附加段和堆栈段,一般是存储单元的定 . ;义,分配等伪操作,对代码段则是指令及伪操作 段名 ENDS,7,完整段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束 段定义指令后的4个关键字用于确定段的各种属性,堆栈段要采用stack组

4、合类型,代码段应具有code类别,其他为可选属性参数 如果不指定,则采用默认参数;但如果指定,注意要按照上列次序。,8,(1)定位类型:指定逻辑段在主存储器中的边界,可为: BYTE 该段可以从任何地址开始,这样偏移地址可能不是0 WORD 该段必须从字的边界开始,即段起始地址必须为偶数 DWORD 该段必须从双字的边界开始,即段起始地址的最低两个十六进制数位必须为4的倍数 PARA 该段的起始地址必须从小段边界开始,即段起始地址的最低16进制数必须为0,9,PAGE 该段必须从页的边界开始,即段的起始地址的最低两个十六进制数位必须为0 简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈

5、段默认采用PARA定位 完整段定义伪指令的默认定位属性是PARA,其低4位已经是0,所以默认情况下数据段的偏移地址从0开始,10,(2)组合类型说明程序连接时的段合并方法,即指定多个逻辑段之间的关系,可为: PRIVATE 本段为私有段,与其他段没有逻辑关系,在连接时不与其他段合并,每段都有自己的段地址。这是完整段定义伪指令默认的段组合方式 PUBLIC连接程序把本段与所有同名同类型的其他段相邻地连接在一起,然后为所有这些段指定一个共同的段地址,也就是合成一个物理段。这是简化段定义伪指令默认的段组合 STACK本段是堆栈的一部分,连接程序将所有STACK段按照与PUBLIC段的同样方式进行合并

6、。这是堆栈段必须具有的段组合,11,(3)使用类型是支持32位段而设置的属性,用来说明使用16位寻址方式还是32位寻址方式 对于16位x86 CPU来说,它默认是16位段,即USE16 而对于汇编32位x86 CPU指令时,它默认采用32位段,即USE32;但可以使用USE16指定标准的16位段 编写运行于实地址方式(8086工作方式)的汇编语言程序,必须采用16位段,12,(4)类别在引号中给出连接时组成段组的类型名。当连接程序组织段时,并不能把相同类别的段合并起来,但可将所有的同类别段相邻分配 段类别可以是任意名称,但必须位于单引号中 大多数MASM程序使用 code、data和stack

7、来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续,13,此外,必须明确段与段寄存器的关系,可用ASSUME伪操作来实现。格式: ASSUME 段寄存器:段名 ,段寄存器名:段名, . 作用: 通知MASM用指定的段寄存器来寻址对应的逻辑段,即建立段寄存器与段的缺省关系 在明确了程序中各段与段寄存器之间的关系后,汇编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀。这是ASSUME伪指令的主要功能。,14,ASSUME伪指令并不为段寄存器设定初值,所以在代码段中还必须把段地址装入相应的段寄存器中。例如:定义数据段段名为DATA,则需使用MOV指令对DS段寄存器进行赋值。 MOV

8、 AX, DATA MOV DS, AX 如果程序中有堆栈段,也需要把地址装入SS中 代码段不需要这样做,代码段的这一操作是在程序初始化时完成的。,15,例:完整的段定义伪操作 data_1 segment data_1 ends data_2 segment data_2 ends code segment assume cs:code,ds:data_1,es:data_2 start: mov ax,data_1 mov ds,ax mov ax,data_2 mov es,ax code ends end start,16,2.存储模型与简化段定义伪操作 (1)MODEL伪操作 格式:

9、.MODEL memory_model,model options 用来表明存储模型,即用来说明在存储器中是如何安放各个段的 存储模型memory model决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性 MASM有7种不同的存储模式: TINY SMALL COMPACT MEDIUM LARGE HUGE FLAT,17,iny微型模型是MASM 6.0才引入的,用于创建COM类型程序。 用微型模型编写汇编语言程序时,所有的段地址寄存器都被设置为同一值,这意味着代码段、数据段、堆栈段都在同一个段内,不大于64KB;访问操作数或指令都只需要使用16位偏移地址。一般用于小

10、程序。 mall 小型模型是最常用的一种模型。在小型模型下,一个程序至多只能有一个代码段和一个数据段,每段不大于64KB。 这里的数据段指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不超过64KB;访问操作数或指令都只需要使用16位偏移地址;代码和数据都是近访问的,小模型下程序的最大长度为128KB,18,ompact 紧凑模型适合于数据量大但代码量小的程序。在该模型下,代码段被限制在一个不大于64KB的段内;而数据段则可以有多个,超过64KB。代码是近访问的,而数据则可为远访问的。 edium 中型模型是与紧凑模型互补的模型,适合于数据量小但代码量大的程序。中型模式的代码段可以

11、超过64KB,有多个;但数据段只能有一个不大于64KB的段。数据是近访问,而代码可远访问。 arge 大型模式允许的代码段和数据段都有多个,都可以超过64KB;但全部的静态数据(不能改变的数据)仍限制在64K字节内.数据和代码都可以远访问。,19,uge 巨型模型与大型模型基本相同,只是静态数据不再被限制在64K字节之内。 lat 平展模型用于创建一个32位的程序,它只能运行在32位x86 CPU上。DOS下不能使用FLAT模型,而编写32位Windows 9.x或Windows-NT的程序时,必须采用FLAT模型。 DOS下编程可选择前六种模型,一般可以选用SMALL模型,TINY模式产生C

12、OM程序,其他模型产生EXE程序,FLAT模型只能用于32位程序。,20,Model options允许用户指定三种选项:高级语言接口、操作系统和堆栈距离。 高级语言接口选项是指该汇编语言程序作为某一种高级语言程序的过程而为该高级语言程序调用时,应该用等来说明。 操作系统选项是要说明程序运行于哪个操作系统之下,可用OS_DOS或OS_OS2来说明,默认是OS_DOS。 堆栈距离选项可用NEARSTACK或FARSTACK来说明,基中NEARSTACK是指堆栈段和数据段组合到一个DGROUP段中,而FARSTACK是指堆栈段和数据段并不合并。 例如:.MODEL SMALL,C .MODEL L

13、ARGE,OS_DOS,21,(2)简化的段定义伪操作 简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段。采用简化段定义伪指令前,需有.model语句。常用: .STACK 大小;堆栈段开始 .DATA;数据段开始 .CODE 段名;代码段开始 .STACK 大小 堆栈段伪指令.STACK创建一个堆栈段,段名是:stack,它的参数指定堆栈段所占存储区的字节数,默认是1KB(= 1024 = 400h字节),22,.DATA数据段伪指令.data创建一个数据段,段名是:_DATA。它用于定义具有初值的变量,当然也允许定义无初值的变量。 无初值变量可以安排在另一个段中,它用.dat

14、a?伪指令创建,数据段名是:_BSS。 .const伪指令用于建立只读的常量数据段(段名:CONST) .CODE 段名代码段伪指令.code创建一个代码段,它的参数指定该代码段的段名。如果没有给出段名,则采用默认段名: 在TINY、SMALL、COMPACT和FLAT模式下,默认的代码段名是:_TEXT; 在MEDIUM、LARGE和HUGE模式下,默认的代码段名是:模块名_TEXT。,23,(3)与简化段定义有关的预定义符号 使用简化段定义,各段名称和其他用户所需的信息可以使用MASM预定义符号,例如: data表示由.data等定义的数据段的段名。 (4)简化段定义举例 .MODEL S

15、MALL .STACK 100H .DATA .CODE START:MOV AX,DATA,MOV DS,AX MOV AX,4C00H INT 21H END START,24,3.段组定义伪操作 格式:组名 GROUP 段名,段名,. 把多个同类段合并为一个64KB物理段,并用一个组名统一存取它 定义段组后,段组内各段就统一为一个段地址,各段定义的变量和标号的偏移地址就相对于段组基地址计算 offset操作符取变量和标号相对于段组的偏移地址,如果没有段组则取得相对于段的偏移地址。offset后可以跟段组中的某个段名,表示该段最后一个字节后面字节相对于段组的偏移地址,25,3.2.2 程序

16、开始和结束伪操作,程序开始可用Name和ITLE作为模块的名字。 NAME的格式:NAME 模块名 汇编语言将以给出的”模块名”作为模块的名字。 TITLE的格式:TITLE 标题 TITLE伪操作可指定列表文件中的每一页上打印的标题 END表源程序结束的伪操作,格式为:END 标号 用来指示汇编程序MASM到此结束汇编过程。源程序的最后必须有一条END语句。可选的标号用于指定程序开始执行点,连接程序将据此设置CS : IP值,26,MASM6.0还增加了定义程序入口点和出口点的伪操作。用.STARTUP定义程序的初始入口点,并产生设置DS,SS和SP的代码。如果程序采用了.startup伪指令就不需要再用“end 标号”指明开始执行点,但还要有end伪指令 .EXIT用来产生退出程序并返回操作系统的代码,其格式: .EXIT 返回参数 可选参数是一个返回的数码,通常用0表示没有错误。例如.exit 0对应的代码是: MOV AX,4C00H

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号