《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt

上传人:bao****ty 文档编号:132879131 上传时间:2020-05-21 格式:PPT 页数:85 大小:541KB
返回 下载 相关 举报
《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt_第1页
第1页 / 共85页
《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt_第2页
第2页 / 共85页
《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt_第3页
第3页 / 共85页
《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt_第4页
第4页 / 共85页
《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt》由会员分享,可在线阅读,更多相关《《汇编语言课件》第1章 基础知识第4章 汇编语言程序格式.ppt(85页珍藏版)》请在金锄头文库上搜索。

1、教学重点 第4章重点掌握 程序的格式 开发方法参数的表达 变量的定义变量和标号的属性 汇编程序功能 源程序分别用两种格式书写第一种格式从MASM5 0开始支持简化段定义格式第二种格式MASM5 0以前就具有完整段定义格式 Hello Everybody lt301a asm 文件名 modelsmall 定义程序的存储模式 stack 定义堆栈段 data 定义数据段stringdb Hello Everybody 0dh 0ah 在数据段定义要显示的字符串 code 定义代码段 startup 程序起始点 建立DS SSmovdx offsetstring 指定字符串movah 9int21

2、h 利用功能调用显示信息 exit0 程序结束点 返回DOSend 汇编结束 抽象 SampleA ASM modelsmall stack data 在数据段定义数据 code startup 注1 在代码段填入指令序列 exit0 注2 子程序代码end 注3 简化段定义格式MASM6 x支持 SampleC ASM modelsmall stack data 在数据段定义数据 codestart movax datamovds ax 在代码段填入指令序列movax 4c00hint21h 子程序代码endstart 简化段定义格式MASM5 x支持 lt301b asm 文件名 stac

3、ksegmentstack 定义堆栈段dw512dup 堆栈段有512字 1024字节 空间stackends 堆栈段结束datasegment 定义数据段stringdb Hello Everybody 0dh 0ah dataendscodesegment code 定义代码段assumecs code ds data ss stackstart movax data 建立DS段地址movds ax movdx offsetstringmovah 9int21hmovax 4c00hint21h 利用功能调用返回DOScodeends 代码段结束endstart 汇编结束 同时指明程序起始

4、点 抽象 SampleB ASMstacksegmentstackdw512dup stackendsdatasegment 在数据段定义数据dataendscodesegment code assumecs code ds data ss stackstart movax datamovds ax 在代码段填入指令序列movax 4c00hint21h 子程序代码codeendsendstart 完整段定义格式MASM5 x支持 硬指令和伪指令 硬指令 使CPU产生动作 并在程序执行时才处理的语句 就是第3章学习的处理器指令伪指令 Directive 不产生CPU动作 在程序执行前由汇编程序

5、处理的说明性语句 例如 数据说明 变量定义等等伪指令与具体的处理器类型无关 但与汇编程序的版本有关 本课程采用微软宏汇编程序MASM 汇编语言程序的开发 本节从汇编语言程序的语句格式出发 给出第一个示范性的汇编语言源程序 并演示汇编语言程序的过程 编辑汇编连接调试即汇编语言程序的开发方法 汇编语言程序的开发过程 源程序 文件名 asm 目标模块 文件名 obj 可执行文件 文件名 exe 错误 开发过程1 源程序的编辑 源程序文件要以ASM为扩展名源程序文件的形成 编辑 可以通过任何一个文本编辑器实现 DOS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中

6、的编辑环境EDITlt301a asm 开发过程2 源程序的汇编 汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM5 x提供的汇编程序是Masm EXE Masmlt301a asm如果源程序中没有语法错误 MASM将自动生成一个目标模块文件 lt301a obj 否则MASM将给出相应的错误信息这时应根据错误信息 重新编辑修改源程序后 再进行汇编 开发过程3 目标模块的连接 连接程序能把一个或多个目标文件和库文件合成一个可执行程序 EXE COM文件 LINKlt301a obj如果没有严重错误 LINK将生成一个可执行文件 lt301a exe 否则将提示相应的错误信息这时需

7、要根据错误信息重新修改源程序后再汇编 链接 直到生成可执行文件 汇编和连接过程可以依次自动完成 开发过程4 可执行程序的调试 经汇编 连接生成的可执行程序在操作系统下只要输入文件名就可以运行 lt301a操作系统装载该文件进入主存 并开始运行如果出现运行错误 可以从源程序开始排错 也可以利用调试程序帮助发现错误采用DEBUG EXE调试程序 DEBUGlt301a exe 完整段定义伪指令 段名segment定位组合段字 类别 语句序列段名ends 完整段定义由SEGMENT和ENDS这一对伪指令实现 SEGMENT伪指令定义一个逻辑段的开始 ENDS伪指令表示一个段的结束段定义指令后的4个关

8、键字用于确定段的各种属性 堆栈段要采用stack组合类型 代码段应具有 code 类别 其他为可选属性参数如果不指定 则采用默认参数 但如果指定 注意要按照上列次序 段定位 align 属性 指定逻辑段在主存储器中的边界 可为 BYTE段开始为下一个可用的字节地址 xxxxxxxxb WORD段开始为下一个可用的偶数地址 xxxxxxx0b DWORD段开始为下一个可用的4倍数地址 xxxxxx00b PARA段开始为下一个可用的节地址 xxxx0000b PAGE段开始为下一个可用的页地址 00000000b 简化段定义伪指令的代码和数据段默认采用WORD定位 堆栈段默认采用PARA定位完整

9、段定义伪指令的默认定位属性是PARA 其低4位已经是0 所以默认情况下数据段的偏移地址从0开始 段组合 combine 属性 指定多个逻辑段之间的关系 可为 PRIVATE本段与其他段没有逻辑关系 不与其他段合并 每段都有自己的段地址 这是完整段定义伪指令默认的段组合方式PUBLIC连接程序把本段与所有同名同类型的其他段相邻地连接在一起 然后为所有这些段指定一个共同的段地址 也就是合成一个物理段 这是简化段定义伪指令默认的段组合STACK本段是堆栈的一部分 连接程序将所有STACK段按照与PUBLIC段的同样方式进行合并 这是堆栈段必须具有的段组合 段字 use 属性 为支持32位段而设置的属

10、性对于16位x86CPU来说 它默认是16位段 即USE16而对于汇编32位x86CPU指令时 它默认采用32位段 即USE32 但可以使用USE16指定标准的16位段编写运行于实地址方式 8086工作方式 的汇编语言程序 必须采用16位段 段类别 class 属性 当连接程序组织段时 将所有的同类别段相邻分配段类别可以是任意名称 但必须位于单引号中大多数MASM程序使用 code data 和 stack 来分别指名代码段 数据段和堆栈段 以保持所有代码和数据的连续 指定段寄存器伪指令 ASSUME段寄存器 段名 段寄存器名 段名 通知MASM用指定的段寄存器来寻址对应的逻辑段 即建立段寄存

11、器与段的缺省关系在明确了程序中各段与段寄存器之间的关系后 汇编程序会根据数据所在的逻辑段 在需要时自动插入段超越前缀 这是ASSUME伪指令的主要功能ASSUME伪指令并不为段寄存器设定初值 连接程序LINK将正确设置CS IP和SS SP由于数据段通常都需要 所以在样板源程序中 首先为DS赋值 如果使用附加段 还要赋值ES start movax datagroupmovds ax 对段组寻址movax const1 ax 100movvar1 ax var1 100movax offsetvar1 ax 2movax offsetdata1 ax 2movax offsetdata2 ax

12、 4 assumeds data2movax data2movds axmovax var1 ax 100movax offsetvar1 ax 2movax 4c00hint21hcodesegendsendstart 汇编结束伪指令 END 标号 指示汇编程序MASM到此结束汇编过程源程序的最后必须有一条END语句可选的标号用于指定程序开始执行点 连接程序将据此设置CS IP值采用了 startup伪指令就不需要再用 end标号 指明开始执行点 但还要有end伪指令 不要糊涂 程序终止和汇编结束是两码事 语句格式 执行性语句 由硬指令构成的语句 它通常对应一条机器指令 出现在程序的代码段中

13、 标号 硬指令助记符操作数 操作数 注释 说明性语句 由伪指令构成的语句 它通常指示汇编程序如何汇编源程序 名字伪指令助记符参数 参数 注释 MOVCX 0 传送指令 具有2个操作数DELAY NOP 空操作指令 没有操作数 带有标号LOOPDELAY 循环指令 标号DELAY说明转移位置BUFFERDB1 2 3 4 5 6 7 数据定义伪指令 在主存中开辟7个连续的字节单元 初值依次为1 7 BUFFER表示首地址 汇编语言语句实例 标号 名字与标识符 标号是反映硬指令位置 逻辑地址 的标识符 后跟一个冒号分隔名字是反映伪指令位置 逻辑地址 和属性的标识符 后跟空格或制表符分隔 没有一个冒

14、号标识符 Identifier 一般最多由26个字母 数字及规定的特殊符号 如 组成 不能以数字开头 默认情况下 汇编程序不区别标识符中的字母大小写一个程序中 每个标识符的定义是唯一的 还不能是汇编语言采用的保留字 保留字 保留字 ReservedWord 是汇编程序已经利用的标识符 主要有 硬指令助记符 例如 MOV ADD伪指令助记符 例如 DB EQU操作符 例如 OFFSET PTR寄存器名 例如 AX CS预定义符号 例如 data 汇编语言大小写不敏感 助记符 硬指令助记符可以是任何一条处理器指令 也可以是一条宏指令伪指令助记符将在本章学习前一章引入的定义字节数据和字符串的DB就是

15、伪指令 操作数与参数 处理器指令的操作数可以是立即数 寄存器和存储单元 伪指令的参数可以是常数 变量名 表达式等 可以有多个 参数之间用逗号分隔 注释 语句中由分号 开始的部分为注释内容 用以增加源程序的可读性必要时 一个语句行也可以由分号开始作为阶段性注释汇编程序在翻译源程序时将跳过该部分 不对它们做任何处理 分隔符 语句的4个组成部分要用分隔符分开标号后用冒号 注释前用分号操作数之间和参数之间使用逗号分隔其他部分通常采用空格或制表符多个空格和制表符的作用与一个相同MASM支持续行符 汇编语言源程序的组成原则 完整的汇编语言源程序由段组成一个汇编语言源程序可以包含若干个代码段 数据段 附加段

16、或堆栈段 段与段之间的顺序可随意排列需独立运行的程序必须包含一个代码段 并指示程序执行的起始点 一个程序只有一个起始点所有的可执行性语句必须位于某一个代码段内 说明性语句可根据需要位于任一段内通常 程序还需要一个堆栈段 参数 变量和标号 本节详细讨论汇编语言程序语句的主要部分 参数变量名标号并引出相关的伪指令和操作符本节重点掌握 常数的表达 变量定义伪指令DB DW DD 地址操作符和类型操作符 数值型参数 在源程序语句格式的4个组成部分中 参数是指令的操作对象 在学习硬指令时被称为操作数 参数之间用逗号分隔参数根据指令不同可以没有 可以有1个 2个或多个汇编语言程序中 指令参数有数值型 它的主要形式是常数和数值表达式 硬指令的操作数有立即数 立即数就要用数值型参数表达 常数 常数 常量 表示一个固定的数值它又分成多种形式 1 十进制常数 2 十六进制常数 3 二进制常数 4 八进制常数 5 字符串常数 6 符号常数 十进制常数 由0 9数字组成 以字母D或d结尾缺省情况下 后缀D或d可以省略汇编语言大小写不敏感 D和d通用例如 100 255D 十六进制常数 由0 9 A F组成 以

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

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

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