




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第五章循环与分支程序设计 5 1循环与转移指令 5 2循环程序设计 5 3分支程序设计 2 编写汇编语言程序步骤 1分析题意 确定算法2根据算法 画出程序流程图3根据框图编写程序4上机调试程序 3 5 1循环与转移指令 一 循环控制指令二 转移指令 控制转移类指令通过改变IP 和CS 值 实现程序执行顺序的改变 4 一 循环控制指令 8086指令系统的循环控制指令均为二字节指令一字节为转移的相对位移量 8位带符号的二进制数 IP IP 相对位移量隐含使用CX作为循环计数器 程序中的某段需反复执行若干次时 用循环来实现 小范围转移 5 一 循环控制指令 LOOPlabel CX CX 1 CX 0 循环到标号label LOOPE LOOPZlabel CX CX 1 CX 0且ZF 1 循环到标号label LOOPNE NZlabel CX CX 1 CX 0且ZF 0 循环到标号label 等于时循环 不等于时循环 6 一 循环控制指令 例 movcx count 设置循环次数movsi offsetstringxorbx bx bx清0 用于记录空格数moval 20hagain cmpal si jnznext ZF 0 非空格 转移incbx ZF 1 是空格 个数加1next incsiloopagain 计数器减1 不为0继续循环 7 二 转移指令 无条件转移指令条件转移指令 8 无条件转移指令 JMPlabel 程序转向label标号指定的地址 NEARFAR 只要执行无条件转移指令JMP 就使程序转到指定的目标地址处 从目标地址处开始执行那里的指令 JMP指令分成4种类型 段内转移 直接寻址 段内转移 间接寻址 段间转移 直接寻址 段间转移 间接寻址 9 1 无条件转移指令 目标地址的寻址方式 直接寻址方式转移地址象立即数一样 直接在指令的机器代码中 就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中 就是通过寄存器或存储器的间接寻址方式 用标号表达 用寄存器或存储器操作数表达 10 1 无条件转移指令 目标地址的范围 段内 段内转移 近转移 near 在当前代码段64KB范围内转移 32KB范围 不需要更改CS段基值 只要改变IP偏移地址段内转移 短转移 short 转移范围可以用一个字节表达 在段内 128 127范围的转移 11 1 无条件转移指令 目标地址的范围 段间 段间转移 远转移 far 从当前代码段跳转到另一个代码段 可以在1MB范围需要更改CS段基值和IP偏移地址目标地址必须用一个32位数表达 叫做32位远指针 它就是逻辑地址 实际编程时 汇编程序会根据目标地址的距离 自动处理成短转移 近转移或远转移程序员可用操作符short nearptr或farptr强制 12 段内直接寻址转移 JMPlabel IP IP 位移量位移量是紧接着JMP指令后的那条指令的偏移地址到目标指令的偏移地址的地址差当向地址增大方向转移时 位移量为正 向地址减小方向转移时 位移量为负 实际为相对寻址 again deccx 标号again的指令 jmpagain 转移到again处继续执行 jmpoutput 转向output output movresult al 标号output的指令 13 段内间接寻址转移 JMPr16 m16 IP r16 m16将一个16位寄存器或主存字单元内容送入IP寄存器 作为新的指令指针 但不修改CS寄存器的内容 jmpax IP AXjmpwordptr bx IP BX 14 段间直接寻址转移 JMPfarptrlabel IP label的偏移地址 CS label的段基值将标号所在段的段基值作为新的CS值 标号在该段内的偏移地址作为新的IP值 程序跳转到新的代码段执行jmpfarptrotherseg 远转移到代码段2的otherseg 15 段间间接寻址转移 JMPfarptrmem IP mem CS mem 2 用一个双字存储单元表示要跳转的目标地址 这个目标地址存放在主存中连续的两个字单元中的 低位字送IP寄存器 高位字送CS寄存器movwordptr bx 0movwordptr bx 2 1500hJMPfarptr bx 转移到1500h 0 16 2 条件转移指令 Jcclabel 条件满足 发生转移 IP IP 8位位移量 条件不满足 顺序执行 指定的条件cc如果成立 程序转移到由标号label指定的目标地址去执行指令 条件不成立 则程序将顺序执行下一条指令操作数label是采用短转移 称为相对寻址方式 17 2 条件转移指令 Jcc指令的操作数label是一个标号一个8位位移量是相对于当前IP的 且距当前IP地址 128 127个单元的范围之内 属于段内短距离转移Jcc指令为2个字节 条件不满足时的顺序执行就是当前指令偏移指针IP加2 18 2 条件转移指令 指令的分类 Jcc指令不影响标志 但要利用标志 根据利用的标志位不同 19条指令分成4种情况 判断单个标志位状态 比较无符号数高低 比较有符号数大小 判断计数器CX为0 19 2 条件转移指令 无符号数的比较 无符号数的大小用高 Above 低 Below 表示利用CF确定高低 利用ZF标志确定相等 Equal 两数的高低分成4种关系 高于 不低于等于 JA JNBE 高于等于 不低于 JAE JNB 低于 不高于等于 JB JNAE 低于等于 不高于 JBE JNA 20 2 条件转移指令 有符号数的比较 有符号数的大 Greater 小 Less 需要组合OF SF标志 并利用ZF标志确定相等 Equal 两数的大小分成4种关系 小于 不大于等于 JL JNGE 小于等于 不大于 JLE JNG 大于 不小于等于 JG JNLE 大于等于 不小于 JGE JNL 21 实际虽然指令只有19条 但却有31个助记符采用多个助记符 只是为了方便记忆和使用 22 判断单个标志位状态 这组指令单独判断5个状态标志之一 JZ JE和JNZ JNE 利用零标志ZF 判断结果是否为零 或相等 JS和JNS 利用符号标志SF 判断结果是正是负 JO和JNO 利用溢出标志OF 判断结果是否产生溢出 JP JPE和JNP JPO 利用奇偶标志PF 判断结果中 1 的个数是偶是奇 JC和JNC 利用进位标志CF 判断结果是否进位或借位 例题 例题 例题 例题 例题 23 2 条件转移指令 JZ JNZ指令 movcx 0movbx addrmovax bx repeat testax 0ffffhjzexitjnsshiftinccxshift shlax 1jmprepeatexit movcount cx 24 2 条件转移指令 JS JNS指令 计算 X Y 绝对值 X和Y为存放于X单元和Y单元的16位操作数 结果存入result movax Xsubax Yjnsnonnegnegaxnonneg movresult ax 25 2 条件转移指令 JO JNO指令 计算X Y X和Y为存放于X单元和Y单元的16位操作数 若溢出 则转移到overflow处理 movax Xsubax Yjooverflow 无溢出 结果正确overflow 有溢出处理 26 2 条件转移指令 JP JNP指令 设字符的ASCII码在AL寄存器中 将字符加上奇校验位 在字符ASCII码中为 1 的个数为奇数时令其最高位为 0 否则令最高位为 1 andal 7fh 最高位置 0 同时判断 1 的个数jnpnext 个数已为奇数 则转向nextoral 80h 否则 最高位置 1 next 27 2 条件转移指令 JC JNC指令 记录BX中1的个数 xoral al AL 0 CF 0again testbx 0ffffh 等价于cmpbx 0jznextshlbx 1jncagainincaljmpagainnext AL保存1的个数 28 2 条件转移指令 无符号数的比较 例 cmpax bx 比较ax和bxjaenext 若ax bx 转移xchgax bx 若ax bx 交换next 结果 AX保存较大的无符号数 29 2 条件转移指令 有符号数的比较 例 cmpax bx 比较ax和bxjgenext 若ax bx 转移xchgax bx 若ax bx 交换next 结果 AX保存较大的有符号数 30 2 条件转移指令 计数器CX为0转移 JCXZlabel CX 0 发生转移 IP IP 8位位移量 CX 0 顺序执行 CX寄存器通常在程序中用做计数器JCXZ指令用来判断计数是否为0 31 5 2循环程序设计 一 循环程序的结构形式二 循环程序设计三 多重循环程序设计 32 一 循环程序的结构形式 结束 初始化 循环的初始状态 循环体 循环的工作部分及修改部分 计数控制循环条件控制循环 修改部分 控制条件 Y N 先循环 后判断 33 一 循环程序的结构形式 结束 初始化 循环的初始状态 循环体 循环的工作部分及修改部分 计数控制循环条件控制循环 修改部分 控制条件 Y N 先判断 后循环 34 二 循环程序设计 例 例5 1试编写一程序把BX寄存器内的2进制数用16进制数的形式在屏幕上显示出来 分析 1 四位2进制数对应一位16进制数 2 BX从左到右四位为一组分别显示 3 0 9的ASCII码为30 39H A F的SCII码为41 46H 0 9加30H A F加37H 4 屏幕显示 DL 中放入要显示的字符的ASCII码 MOVAH 02HINT21H 35 开始 初始化循环计数值 4次 BX循环左移4位 取出BX的低4位 显示一个字符循环计数值 1 循环计数值 0 结束 Y N 转换为ASCII码 程序见P162 163 rotate 36 例5 2在ADDR单元存放着数Y的地址 试编制一程序把Y中1的个数存入COUNT单元中 37 例5 2 38 DATASEGMENTYDW1234HADDRDWYCOUNTDB DATAENDSCODESEGMENTASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVDL 0MOVBX ADDRMOVAX BX MOVCX 16 REPEAT SHLAX 1JNCNEXTINCDLNEXT LOOPREPEATEXIT0 MOVCOUNT DLMOVAH 4CHINT21HCODEENDSENDSTART CMPAX 0JZEXIT0 例5 2 JMPREPEAT 39 例5 4将正数N插入一个已升序排列的字数组的正确位置 该数组的首地址和末地址分别为ARRAY HEAD和ARRAY END 其中所有的数均为正数 解法一 从数组的尾部开始比较 N较大 则在比较对象后插入 结束循环N较小 则把比较对象及其后元素后移一个字 若N比所有元素都小 扫描整个数组后仍无法结束循环 将 1加在数组前可解决该问题 1 40 例5 4 41 Datareasegmentdw Array headdw3 5 15 23 37 49Array enddw105ndw32DatareaendsProgramsegmentMainprocfarassumecs program ds datareaStart pushdssubax axpushaxmovax datareamovds ax movax nmovarray head 2 1movsi 0Comp cmparray end si axjleinsertmovbx array end si movarray end si 2 bxsubsi 2jmpcompInsert movarray end si 2 axretMainendpProgramendsendstart 例5 4 movbx array end si cmpbx axjleinsert 42 例5 4将正数N插入一个已升序排列的字数组的正确位置 该数组的首地址和末地址分别为ARRAY HEAD和ARRAY END 其中所有的数均为正数 解法二 从数组的头部开始比较 N较小 则在比较对象前插入 结束循环N较大 则把比较对象及其前元素前移一个字 循环结束的控制 可扫描整个数组 循环次数为数组元素个数执行插入操作后结束循环 若N比所有元素都小 形成新的头 若N比所有元素都大 则被置于尾部 43 三 多重循环程序设计 例5 7有一个首地址为A的N字数组 请编制程序使该数组中的数按照从大到小的次序整序 冒泡法从第一个元素开始 依次对相邻的两个元素进行比较 使前一个元素不大于后一个元素 将所有元素比较完之后 最大的元素排到了最后 然后 除掉最后一个元素之外的元素依上述方法再进行比较 得到次大的元素排在后面 如此重复 直至完成就实现元素从小到大的排序这需要一个双重循环程序结构 44 冒泡法的排序 45 5 3分支程序设计 一 分支程序的结构形式二 分支程序的设计三 跳转表 46 一 分支程序的结构形式 47 二 分支程序设计 用条件转移指令实现程序分支用跳转表实现多路分支 48 用条件转移指令实现程序分支 例5 9 用折半查找法 二分法 在数组 已按升序排序 中查找一个无符号数 数组的首地址已放入DI中 数组的第一个单元存放着数组的长度 被查找数存于AX中 要求 若数组中有此数 把其地址放入SI中 并使CF 0 若数组中无此数 设置CF 1 49 折半查找法分析 设数组为a1 aN 查找的数为b1 初始化查找范围的首尾下标low 1 high N2 若alow b或ahigh b 找到 转到找到处理 若alow b或ahighb high mid 1 继续下一步 若amidhigh 数组中无b 转到数组无b的处理 否则 重复第3步 50 流程图 51 程序 Datasegmentarraydw DataendsCodesegmentMainprocfarassumecs code ds dataStart pushdsxo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训教具课件
- High-density-lipoprotein-human-HDL-human-生命科学试剂-MCE
- 房屋抵顶工程款协议书6篇
- 2025年ABS专用料合作协议书
- 2025甘肃天水市武山县人力资源和社会保障局招聘城镇公益性岗位人员7人模拟试卷完整答案详解
- 2025年菏泽单县教体系统第四次引进高层次人才(110名)考前自测高频考点模拟试题及答案详解(新)
- 2025年光导纤维导光环项目发展计划
- 确保信息安全和隐秘保护承诺书5篇范文
- 小学交通安全培训签到表课件
- 2025广东华兴银行实习生招聘模拟试卷附答案详解(黄金题型)
- 2024年湖北省高考政治试卷真题(含答案逐题解析)
- 脂肪栓塞综合征护理
- 安保公司方案
- 透水混凝土检测报告模板
- 考古与人类学习通超星期末考试答案章节答案2024年
- 行政执法考试题及答案(刷脸考试版本)
- GB/T 44679-2024叉车禁用与报废技术规范
- 2022年全国中学生英语能力测评(NEPTS)终评高二年级组试题
- 商标价值评估报告书
- 《什么是美术作品》教学课件2
- 服装制造的低碳环保
评论
0/150
提交评论