汇编语言程序格式.ppt_第1页
汇编语言程序格式.ppt_第2页
汇编语言程序格式.ppt_第3页
汇编语言程序格式.ppt_第4页
汇编语言程序格式.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序格式 一 汇编语句类型和格式 1 语句类型硬指令语句 指令性语句 是指能产生目标代码 CPU可以执行的 能完成特定功能的语句 它主要由CPU指令组成伪指令语句 指示性语句 是一种不产生目标代码的语句 它仅仅在汇编过程中告诉汇编程序应如何汇编宏指令语句是一个指令序列 汇编时凡有宏指令语句的地方都将用相应的指令序列的目标代码插入 2 语句的格式 1 执行性语句标号 硬指令助记符操作数 操作数 注释 2 说明性语句名字伪指令助记符参数 参数 注释 二 完整段定义格式 8086按照逻辑段组织程序 具有代码段 数据段 附加段和堆栈段一个汇编语言源程序可以包括若干个代码段 数据段或堆栈段段与段之间的顺序可以随意排列 逻辑段用汇编语言源程序中的段定义伪指令来定义 二 完整段定义格式 完整段定义伪指令指定段寄存器伪指令段寄存器的装入可执行程序的正常结束 1 完整段定义伪指令 SEGMENT ENDS 作用 控制汇编程序和连接程序在内存中组织代码和数据的方式 格式 段名SEGMENT 定位类型 组合类型 类别名 段名ENDS注意 SEGMENT和ENDS总是成对出现中间省略部分称为段体 对代码段来说 则主要是程序代码 对其它段来说 一般用于变量 符号等的定义方括号中的为可选项 当有可选项时各项顺序不能错 可选项之间用空格隔开 1 段名段名是用户自定义的 但不要与指令助记符或伪指令重名用来指示汇编程序为该段分配的存储区的首地址段名有段地址和偏移地址两个属性段开始和段结束的段名必须相同 2 定位类型说明段的起始地址的边界要求 指示连接程序按定位类型提出的要求 安排各段在内存的相互衔接方式 它有5种可选择类型 BYTE 段的起始地址可以从任何地址开始 段起始地址 20位 B WORD 段的起始地址必须以偶地址开始段起始地址 20位 0B DWORD 段的起始地址必须为4的倍数段起始地址 20位 00B PARA 段的起始地址必须从小段边界开始段起始地址 20位 0000B PAGE 段的起始地址必须从页的边界开始段起始地址 20位 00000000B如未指定定位类型 则汇编程序默认为PARA 3 组合类型当程序有多个段时 组合类型用来说明段与段之间是怎样连接和定位的 共有6种组合类型 不指定或称隐含方式 表示本段与其他模块中的同名段无连接关系 它将作为一个独立的段运行 PUBLIC 本段与其他模块中说明为PUBLIC方式的同名段顺序连接 组成一个大的逻辑段 它们共用同一个段起始地址 COMMON 本段与其他模块中说明为COMMON方式的同名段从同一地址开始重叠连接 段长是同名段中最长的段的长度 STACK 表示该段是堆栈段的一部分 把所有相同 类别名 的具有STACK组合类型的段连接成一个连续段 该段长度为各原有段的总和 将连续段首地址送SS 段内最大偏移地址送SP SP指向栈顶 当定义了STACK属性后 在主程序中可省略对SS和SP的初始化 MEMORY 与PUBLIC同义 4 类别名 类别名必须用单引号括起来 连接时对不同模块 不同名的程序段只要 类别名 相同 则放在一个连续的物理空间 但每段之间是独立的 不进行组合 2 指定段寄存器伪指令 ASSUME 作用 明确段和段寄存器之间的关系 即告诉汇编程序 在运行期间通过哪个段才能找到所要的指令和数据格式 ASSUME段寄存器名 段名 段寄存器名 段名 例如 ASSUMECS CODE DS DATA SS STACK 3 段寄存器的装入ASSUME伪指令只是指出各段和段寄存器之间的关系 但并未真正将段基地址装入相应的段寄存器中 所以在程序的代码段开始处就应该先进行段基址的装入数据段DS 附加段ES和堆栈段SS的段基址由用户程序代码装入代码段CS在加载程序后由系统自动装入 1 DS ES的装入MOVAX DATA 数据段段基地址送AX寄存器MOVDS AX AX寄存器的内容送数据段寄存器DS或MOVAX SEGX 变量X所在数据段的段基址送AX寄存器MOVDS AX 2 CS的装入对CS和IP的装入方法是利用END后的标号来完成的 如 START ENDSTART系统自动将START所在段的段地址送CS寄存器 将START所在段内的偏移地址送IP寄存器 3 SS的装入方法1 由系统自动装填 要求在定义堆栈段时 必须把参数写全 这时 将程序装入内存 系统会自动地把堆栈段地址和堆栈指针置入SS和SP中 因而可以不在代码段中装入SS和SP的值 STACK1SEGMENTPARASTACK STACK DB50HDUP STACK1ENDS 方法2 手动装填STACK1SEGMENTPARADW50HDUP TOPLABELWORD TOP属性为WORDSTACK1ENDSCODESEGMENTASSUMECS CODE SS STACK1START MOVAX STACK1MOVSS AX 堆栈段的段地址送SSMOVSP OFFSETTOP 堆栈段的栈顶地址送SP TOP是该堆栈的初始栈顶部地址 4 操作系统下可执行程序的正常结束方法1 非标准方法 在CODEENDS之前增加如下语句 MOVAX 4C00HINT21H方法2 标准方法 MAINPROCFARPUSHDS 保存原来的PSP段地址MOVAX 0H 0送AXPUSHAX 0压栈 RET 返回DOSMAINENDP 完整段定义的源程序格式DATASEGMENT 定义数据段DATASTRINGDB Hello Everybody 0DH 0AH DATAENDS 数据段结束CODESEGMENT 定义代码段CODEASSUMECS CODE DS DATA 确定CS DS SS指向的逻辑段START MOVAX DATA 设置数据段的段地址DSMOVDS AXMOVDX OFFSETSTRING 利用功能调用显示信息MOVAH 9INT21HMOVAH 4CH 利用系统功能调用返回DOSINT21HCODEENDS 代码段结束ENDSTART 汇编结束 三 简化段定义格式 简化的段定义书写简单 有利于实现汇编语言程序模块与高级语言程序模块的连接 它可以由操作系统自动安排段序 自动保证名字定义的一致性 1 存储模式选择伪操作 MODEL 格式 MODEL模式类型功能 本语句一般放在段定义之前 用来说明在存储器中是如何安放各个段的 模式类型说明代码段 数据段在程序中如何安排 代码 数据的寻址是近还是远 根据它们的不同组合 模式类型可以有如下5种 Tiny模式 也叫微模式 所有数据及代码放入同一个物理段内 该模式用于编写较小的源程序 这种模式的源程序最终可以形成COM文件 Small 也叫小模式 所有数据放入一个64KB的段中 所有代码放入另一个64KB的段中 即程序中只有一个数据段和一个代码段这是一般应用程序最常用的一种模式 Medium 也叫中模式 所有数据放入一个64KB的段中 代码可以放入多于一个的段中 即程序中可以有多个代码段 Compact 也叫压缩模式 所有代码放入一个64KB的段中 数据可以放入多于一个的段中 即程序中可以有多个数据段 Large 也叫大模式 代码和数据都可以分别放入多于一个的段中 即程序中可以有多个代码段和多个数据段 2 数据段定义伪指令 DATA 格式 DATA 名字 定义一个数据段 如果有多个数据段 则用名字来区别 只有一个数据段时 隐含段名为 DATA 3 堆栈段定义伪指令 STACK 格式 STACK 长度 定义一个堆栈段 并形成SS及SP的初值 SP的默认值为1024 隐含段名为 STACK 可选的长度参数指定堆栈段所占存储区的字节数 默认大小是1KB 4 代码段定义伪指令 CODE 格式 CODE 名字 定义一个代码段 如果有多个代码段 则用名字来区别 只有一个代码段时 隐含段名为 CODE 5 程序开始伪指令 STARTUP 格式 STARTUP产生程序开始执行的代码 同时还指定了程序开始执行的起点 在小模式下 可以省略将数据段基址装入DS的语句 6 程序返回伪指令 EXIT 格式 EXIT 参数 功能 EXIT产生终止程序执行返回操作系统的指令代码 可选参数是一个返回的数码 通常用0代表没有错误例如 EXIT0对应的代码是 MOVAX 4C00HINT21H 简化段定义的源程序格式 MODELSMALL 定义程序的存储模式 STACK 定义堆栈段 DATA 定义数据段STRINGDB Hello Everybody 0DH 0AH 在数据段定义要显示的字符串 CODE 定义代码段 STARTUP 说明程序起始位置 并建立DS SS内容MOVDX OFFSETSTRING 指定字符串在数据段的偏移地址MOVAH 9INT21H 利用DOS功能调用显示信息 EXIT0 程序结束点 返回DOSEND 汇编结束 简化段定义的源程序格式 MODELSMALL 定义程序的存储模式 STACK 定义堆栈段 DATA 定义数据段STRINGDB Hello Everybody 0DH 0AH 在数据段定义要显示的字符串 CODE 定义代码段Start MOVAX DATAMOVDS A 说明程序起始位置 并建立DS SS内容MOVDX OFFSETSTRING 指定字符串在数据段的偏移地址MOVAH 9INT21H 利用DOS功能调用显示信息MOVAH 4cHINT21H 程序结束点 返回DOSENDstart 汇编结束 综合练习 在数据段定义一字节变量 存储一个0 9之间的十进制数 1 编写汇编语言源程序 将该十进制数显示到屏幕上 2 用debug将汇编生成的可执行文件调入内存 查看数据段的内容 3 在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论