汇编语言程序格式.ppt

上传人:本田雅阁 文档编号:2909486 上传时间:2019-06-04 格式:PPT 页数:31 大小:352.02KB
返回 下载 相关 举报
汇编语言程序格式.ppt_第1页
第1页 / 共31页
汇编语言程序格式.ppt_第2页
第2页 / 共31页
汇编语言程序格式.ppt_第3页
第3页 / 共31页
汇编语言程序格式.ppt_第4页
第4页 / 共31页
汇编语言程序格式.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《汇编语言程序格式.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序格式.ppt(31页珍藏版)》请在三一文库上搜索。

1、汇编语言程序格式,一、汇编语句类型和格式,1语句类型 硬指令语句(指令性语句) 是指能产生目标代码,CPU可以执行的,能完成特定功能的语句,它主要由CPU指令组成 伪指令语句(指示性语句) 是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编 宏指令语句 是一个指令序列,汇编时凡有宏指令语句的地方都将用相应的指令序列的目标代码插入,2语句的格式 (1)执行性语句 标号:硬指令助记符 操作数,操作数 ;注释 (2)说明性语句 名字 伪指令助记符 参数,参数 ;注释,二、完整段定义格式,8086按照逻辑段组织程序,具有代码段、数据段、附加段和堆栈段 一个汇编语言源程序可以包括若干个

2、代码段、数据段或堆栈段 段与段之间的顺序可以随意排列。 逻辑段用汇编语言源程序中的段定义伪指令来定义,二、完整段定义格式,完整段定义伪指令 指定段寄存器伪指令 段寄存器的装入 可执行程序的正常结束,1完整段定义伪指令(SEGMENT、ENDS) 作用:控制汇编程序和连接程序在内存中组织代码和数据的方式。 格式: 段名 SEGMENT 定位类型 组合类型 类别名 段名 ENDS 注意: SEGMENT和ENDS总是成对出现 中间省略部分称为段体。对代码段来说,则主要是程序代码;对其它段来说,一般用于变量、符号等的定义 方括号中的为可选项,当有可选项时各项顺序不能错,可选项之间用空格隔开,(1)

3、段名 段名是用户自定义的,但不要与指令助记符或伪指令重名 用来指示汇编程序为该段分配的存储区的首地址 段名有段地址和偏移地址两个属性 段开始和段结束的段名必须相同,(2) 定位类型 说明段的起始地址的边界要求,指示连接程序按定位类型提出的要求,安排各段在内存的相互衔接方式。它有5种可选择类型: BYTE:段的起始地址可以从任何地址开始。 段起始地址(20位): B WORD:段的起始地址必须以偶地址开始 段起始地址(20位): 0 B, DWORD:段的起始地址必须为4的倍数 段起始地址(20位): 0 0 B PARA:段的起始地址必须从小段边界开始 段起始地址(20位): 0 0 0 0

4、B PAGE:段的起始地址必须从页的边界开始 段起始地址(20位): 0 0 0 0 0 0 0 0 B 如未指定定位类型,则汇编程序默认为PARA。,(3) 组合类型 当程序有多个段时,组合类型用来说明段与段之间是怎样连接和定位的,共有6种组合类型: 不指定或称隐含方式:表示本段与其他模块中的同名段无连接关系,它将作为一个独立的段运行。 PUBLIC:本段与其他模块中说明为PUBLIC方式的同名段顺序连接,组成一个大的逻辑段,它们共用同一个段起始地址。 COMMON:本段与其他模块中说明为COMMON方式的同名段从同一地址开始重叠连接,段长是同名段中最长的段的长度。, STACK:表示该段是

5、堆栈段的一部分。把所有相同 类别名的具有STACK组合类型的段连接成一个连续段,该段长度为各原有段的总和。将连续段首地址送SS,段内最大偏移地址送SP(SP指向栈顶)。当定义了STACK属性后,在主程序中可省略对SS和SP的初始化。 MEMORY:与PUBLIC同义。,(4) 类别名 类别名必须用单引号括起来。连接时对不同模块、不同名的程序段只要类别名相同,则放在一个连续的物理空间,但每段之间是独立的,不进行组合。,2指定段寄存器伪指令(ASSUME) 作用:明确段和段寄存器之间的关系,即告诉汇编程序,在运行期间通过哪个段才能找到所要的指令和数据 格式:ASSUME 段寄存器名:段名,段寄存器

6、名:段名 例如:ASSUME CS:CODE,DS:DATA,SS:STACK,3段寄存器的装入 ASSUME伪指令只是指出各段和段寄存器之间的关系,但并未真正将段基地址装入相应的段寄存器中,所以在程序的代码段开始处就应该先进行段基址的装入 数据段DS、附加段ES和堆栈段SS的段基址由用户程序代码装入 代码段CS在加载程序后由系统自动装入,(1) DS、ES的装入 MOV AX,DATA ;数据段段基地址送AX寄存器 MOV DS,AX ;AX寄存器的内容送数据段寄存器DS 或 MOV AX,SEG X ;变量X所在数据段的段基址送AX寄存器 MOV DS,AX,(2) CS的装入 对CS和I

7、P的装入方法是利用END后的标号来完成的。如: START: END START 系统自动将START所在段的段地址送CS寄存器,将START所在段内的偏移地址送IP寄存器。,(3) SS的装入 方法1:由系统自动装填。要求在定义堆栈段时,必须把参数写全。这时,将程序装入内存,系统会自动地把堆栈段地址和堆栈指针置入SS和SP中,因而可以不在代码段中装入SS和SP的值。 STACK1 SEGMENT PARA STACK STACK DB 50H DUP(?) STACK1 ENDS,方法2:手动装填 STACK1 SEGMENT PARA DW 50H DUP(?) TOP LABEL WOR

8、D ;TOP属性为WORD STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK1 START: MOV AX,STACK1 MOV SS,AX ;堆栈段的段地址送SS MOV SP,OFFSET TOP ;堆栈段的栈顶地址送SP TOP是该堆栈的初始栈顶部地址。,4操作系统下可执行程序的正常结束 方法1(非标准方法): 在CODE ENDS之前增加如下语句: MOV AX,4C00H INT 21H 方法2 (标准方法): MAIN PROC FAR PUSH DS ;保存原来的PSP段地址 MOV AX,0H ;0送AX PUSH AX ;0压栈

9、 RET ;返回DOS MAIN ENDP,完整段定义的源程序格式 DATA SEGMENT ;定义数据段DATA STRING DB Hello,Everybody !,0DH,0AH,$ DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段CODE ASSUME CS:CODE,DS:DATA ;确定CS、DS、SS指向的逻辑段 START:MOV AX,DATA ;设置数据段的段地址DS MOV DS,AX MOV DX,OFFSET STRING;利用功能调用显示信息 MOV AH,9 INT 21H MOV AH,4CH ;利用系统功能调用返回DOS INT 21

10、H CODE ENDS ;代码段结束 END START ;汇编结束,三、简化段定义格式,简化的段定义书写简单,有利于实现汇编语言程序模块与高级语言程序模块的连接,它可以由操作系统自动安排段序,自动保证名字定义的一致性。,1存储模式选择伪操作(MODEL) 格式:MODEL 模式类型 功能: 本语句一般放在段定义之前,用来说明在存储器中是如何安放各个段的。 模式类型说明代码段、数据段在程序中如何安排;代码、数据的寻址是近还是远。 根据它们的不同组合,模式类型可以有如下5种。, Tiny模式:也叫微模式,所有数据及代码放入同一个物理段内,该模式用于编写较小的源程序,这种模式的源程序最终可以形成C

11、OM文件。 Small:也叫小模式,所有数据放入一个 64KB的段中,所有代码放入另一个64KB的段中,即程序中只有一个数据段和一个代码段这是一般应用程序最常用的一种模式。, Medium:也叫中模式:所有数据放入一个 64KB的段中,代码可以放入多于一个的段中,即程序中可以有多个代码段。 Compact:也叫压缩模式,所有代码放入一个64KB的段中;数据可以放入多于一个的段中,即程序中可以有多个数据段。 Large:也叫大模式,代码和数据都可以分别放入多于一个的段中,即程序中可以有多个代码段和多个数据段。,2数据段定义伪指令(.DATA) 格式:.DATA 名字 定义一个数据段,如果有多个数

12、据段,则用名字来区别:只有一个数据段时,隐含段名为DATA。 3堆栈段定义伪指令(.STACK) 格式:.STACK 长度 定义一个堆栈段,并形成SS及SP的初值,SP的默认值为1024,隐含段名为STACK。可选的长度参数指定堆栈段所占存储区的字节数,默认大小是1KB。,4代码段定义伪指令(.CODE) 格式:.CODE 名字 定义一个代码段,如果有多个代码段,则用名字来 区别:只有一个代码段时,隐含段名为CODE。 5程序开始伪指令(.STARTUP) 格式:.STARTUP 产生程序开始执行的代码,同时还指定了程序开始执行的起点。 在小模式下,可以省略将数据段基址装入DS的语句。,6程序

13、返回伪指令(.EXIT) 格式:.EXIT 参数 功能:.EXIT产生终止程序执行返回操作系统的指令代码。可选参数是一个返回的数码,通常用0代表没有错误 例如:.EXIT 0对应的代码是: MOV AX,4C00H INT 21H,简化段定义的源程序格式 MODEL SMALL ;定义程序的存储模式 STACK ;定义堆栈段 DATA ;定义数据段 STRING DB Hello,Everybody !,0DH,0AH,$ ;在数据段定义要显示的字符串 CODE ;定义代码段 STARTUP ;说明程序起始位置,并建立DS、SS内容 MOV DX,OFFSET STRING ;指定字符串在数据

14、段的偏移地址 MOV AH,9 INT 21H ;利用DOS功能调用显示信息 EXIT 0 ;程序结束点,返回DOS END ;汇编结束,简化段定义的源程序格式 MODEL SMALL ;定义程序的存储模式 STACK ;定义堆栈段 DATA ;定义数据段 STRING DB Hello,Everybody !,0DH,0AH,$ ;在数据段定义要显示的字符串 CODE ;定义代码段 Start: MOV AX,DATA MOV DS,A ;说明程序起始位置,并建立DS、SS内容 MOV DX,OFFSET STRING ;指定字符串在数据段的偏移地址 MOV AH,9 INT 21H ;利用

15、DOS功能调用显示信息 MOV AH,4cH INT 21H ;程序结束点,返回DOS END start ;汇编结束,综合练习,在数据段定义一字节变量,存储一个0-9之间的十进制数 (1)编写汇编语言源程序,将该十进制数显示到屏幕上 (2)用debug将汇编生成的可执行文件调入内存,查看数据段的内容 (3)在内存中修改数据段中定义的十进制数,用t或g命令显示运行结果 思考: (1)如何在屏幕上显示一个两位的十六进制数 (2)如何在屏幕上显示一个两位的十进制数,DATA SEGMENT A DB 6 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DL,6 ADD DL,30H MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1