第4章_3 顺序分支.ppt_第1页
第4章_3 顺序分支.ppt_第2页
第4章_3 顺序分支.ppt_第3页
第4章_3 顺序分支.ppt_第4页
第4章_3 顺序分支.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1 17 第四章汇编语言程序设计 汇编语言程序设计概述汇编语言基本语法汇编语言程序设计BIOS及DOS功能调用汇编语言程序设计实例 2 17 分析问题 问题性质 目的 要求 已知条件等等 建立相应数学模型 确定算法 把实际问题转化为计算机求解的步骤和方法 绘制流程图 形象化描述程序算法 确定数据结构 数据的组织方式 分配存储区编写程序 将流程图用指令集合来实现 应该 简单明了 层次清晰 运算正确 短小精悍 上机调试 验证程序功能 反复修改达到完善 汇编语言程序设计 程序设计基础 基本步骤 3 17 计算机通常不会从程序的第一条指令直接顺序执行到程序的最后一条指令结束 会根据处理事务的不同而具有不同的执行流程 程序的流程是由程序的结构决定的 基本的程序结构有 程序基本结构 汇编语言程序设计 顺序结构分支结构循环结构子程序结构 4 17 无分支 无循环 无转移程序流程图表现为只有起始框 终止框 处理框 无判断框 例 编制一个程序 求下列公式中的Z值 并将结果存放到RESULT单元中 Z A B 10 500 设A B的值分别存放在BUFA BUFB单元中 运算结果不超过16位 算法 在二进制整数中左移1位相当于乘2 右移1位相当于除2 所以可将 A B 左移3位完成乘以8的操作 然后再与 A B 左移1位 乘以2 的结果相加得到 A B 10的计算 顺序结构程序 简单程序结构 分析 这是一个简单的顺序结构程序 可以直接使用汇编指令完成 数据结构 存储单元RESULT用来存放结果 BUFA BUFB存放A B的值 可用寄存器BX存放中间运算结果 5 17 程序流程图 DATASEGMENTBUFADW BUFBDW RESULTDW DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVDX BUFA DX AADDDX BUFB DX A BMOVBX DX BX DX A BMOVCL 3SALDX CL DX A B 8SALBX 1 BS A B 2ADDDX BX DX A B 8 A B 2 A B 10SUBDX 500 DX A B 8 500MOVRESULT DXMOVAH 4CH DOS系统功能调用INT21H 返回操作系统CODEENDSENDSTART 编写程序 6 17 例 用查表法求整数X的平方值 0 x 15的整数 将结果存入RESULT单元中 分析 用查表法求平方值 首先需要建一个用于存放各数平方值的表 以TABLE表示表头 表中依次存放0 15的平方值 将待求数X放入AL寄存器 表的起始地址放入BX寄存器 使用XLAT查表指令可以将地址BX AL上的一个字节 即AL数值对应的平方值读入AL中 程序流程图 7 17 编写程序 DATASEGMENTTABLEDB0 1 4 9 16 25 36 49 64 81 100 121 144 169 196 225XDB9RESULTDB DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVAL XMOVBX OFFSETTABLE LEABX TABLEXLATMOVRESULT ALMOVAH 4CHINT21HCODEENDSENDSTART 8 17 在实际程序设计中 很少有程序会从头到尾都是顺序执行的 绝大部分程序在执行过程中会根据一些条件的判断决定不同的处理方式或程序流向 这就是分支的概念 程序的流向是由CS和IP中的值决定的 当程序的转移仅在同一段内进行时 只需修改偏移地址IP的值 如果程序的转移是在不同段之间进行 则段基址CS和偏移地址IP均需要修改 一是分支前的条件判断 二是根据判断结果进行转移 分支结构程序 两要素 9 17 例 设Y为符号函数 编写其对应的分支程序 通常一条比较指令只能产生两路分支 因此要产生N路分支就需要N 1条条件转移指令 使用比较指令实现程序分支 10 17 MOVAL AACMPAL 0 用比较指令进行判断JGEBIGR 如果大于等于0则转移MOVAL 1 否则X0转移到NEXT1MOVAL 0 否则X 0 AL 0JMPSTOPNEXT1 MOVAL 1 X 0 则AL 1STOP MOVBB AL 将AL值存到BB中INT20H 返回操作系统 解 设X的值放在AA单元中 Y的值放在BB单元中 11 17 例 已知X Y Z为三个无符号16位数 编程序求三者中最大值 并将其送入MAX单元 设X Y Z三个数不等 解 这是一个典型的分支程序 需要通过两次数据的比较进行分支 每次比较都选择较大的数据 从而得到三个数的最大值 设X Y Z分别存放在存储单元XX YY ZZ 其流程图为 12 17 DATASEGMENTXXDW YYDW ZZDW MAXDW DATAENDSCODESEGMENTASSUMECS CODE DS DATAMAINPROCFARSTART PUSHDSMOVAX 0PUSHAXMOVAX XX 读取第一个变量CMPAX YY 与变量Y比较JANEXT X Y则进行下一个比较MOVAX YYNEXT CMPAX ZZ 较大值与Z比较JAGOMAX 较大值大于Z比较结束MOVAX ZZGOMAX MOVMAX AXRETMAINENDPCODEENDSENDSTART 13 17 在内存的一个连续空间中 存放一系列分支程序的地址 跳转指令或关键字 可以组成一个跳转表 利用这种表可以实现多分支的跳转功能 例 某程序需要对若干同学的成绩进行评级 根据成绩高低分为不及格 及格 中 良好 优秀五个等级 不同等级进行不同的操作 解 显然直接使用分支指令 五个等级需要进行4次判断 程序将十分复杂 而如果使用跳转表来实现 则程序将变得简洁而清晰 设立一个跳转表 每个表项存放一个等级处理程序的地址 根据不同成绩转到不同表项对应的程序即可 利用跳转表实现多重分支 14 17 建立跳转表 从跳转表可以看出 通过对成绩整除10再减去5可得需要的表项 将表项 2则可得到相对于基地址BASE的偏移量 通过该偏移量就可以获得对应等级的程序入口 15 17 程序流程图 DATASEGMENTBASEDWPROG1 PROG2 PROG3 PROG4 PROG5STUDDB DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVAL STUD 读学生成绩MOVAH 0MOVCL 10DIVCL 成绩除以10求商SUBAL 5 判断是否大于5JANEXTMOVAL 0 小于等于5则相对地址为0NEXT SHLAL 1 大于5则相对地址为AL 2 用移位指令

温馨提示

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

评论

0/150

提交评论