




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第五章顺序 循环与分支程序设计 5 1顺序程序设计5 2循环程序设计5 3分支程序设计 2 顺序程序完全按指令书写的前后顺序执行每一条指令 是最基本 最常见的程序结构 5 1顺序程序设计 例5 1 例5 2 3 例5 1 datasegmentxdw33ydw47zdw65wdw dataendscodesegmentassumecs code assumeds databegin movax xaddax yadcax zmovw axmovah 4chint21hcodeendsendbegin 4 例5 2 qvardq1234567887654321h moval byteptrqvar 6 movbyteptrqvar 7 almoval byteptrqvar 5 movbyteptrqvar 6 almoval byteptrqvar 4 movbyteptrqvar 5 almoval byteptrqvar 3 movbyteptrqvar 4 al moval byteptrqvar 2 movbyteptrqvar 3 almoval byteptrqvar 1 movbyteptrqvar 2 almoval byteptrqvar 0 movbyteptrqvar 1 almovbyteptrqvar 0 0 1234567887654321h 3456788765432100h 移位后 图示 5 例5 264位数据左移8位的图示 12 34 56 78 87 65 43 21 00 qvar 0 qvar 1 qvar 2 qvar 3 qvar 4 qvar 5 qvar 6 qvar 7 6 循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体 循环指令和转移指令可以实现循环控制 5 2循环程序设计 循环指令loope 例5 4 转移指令 例5 5 多重循环 例5 6 循环指令loop 例5 3 7 modelsmall stack256 datasumdw codebegin movax datamovds axxorax ax 被加数ax清0movcx 100again addax cx loopagainmovsum ax 将累加和送入指定单元movah 4chint21hendbegin 例5 3计算1 100数字之和 循环次数固定 8 begin movax wordx 测试目标送axmovcx 16 循环计数器置初值movdl 1 计位器置初值again incdltestax 1rorax 1 循环指令不影响zfloopeagain cx 0且zf 1 测试位为0 继续循环jenotfoundmovbytey dljmpdonenotfound movbytey 1 zf 1 测试目标的16个位均为0done movah 4chint21h 例5 4确定wordx中1的最低位数 最大循环次数固定 满足条件退出 9 begin movbx offsetstringagain moval bx 取一个字符oral al 是否为结尾符0jzdone 是 退出循环cmpal a 是否为大写a zjbnextcmpal z janextoral 20h 是 转换为小写字母 使d5 1 mov bx al 仍保存在原位置next incbxjmpagain 继续循环done movah 4chint21h 例5 5大写字母改为小写字母 循环次数不定 利用标志退出 10 movcx count cx 数组元素个数deccx 元素个数减1为外循环次数outlp movdx cx dx 内循环次数movbx offsetarrayinlp moval bx 取前一个元素cmpal bx 1 与后一个元素比较jnanext 前一个不大于后一个元素 则不进行交换xchgal bx 1 否则 进行交换mov bx alnext incbx 下一对元素decdxjnzinlp 内循环尾loopoutlp 外循环尾 例5 6对数组元素排序 冒泡法 双重循环 内循环含分支 11 冒泡法 是一种排序算法 不是最优的算法 但它易于理解和实现 冒泡法从第一个元素开始 依次对相邻的两个元素进行比较 使前一个元素不大于后一个元素 将所有元素比较完之后 最大的元素排到了最后 然后 除掉最后一个元素之外的元素依上述方法再进行比较 得到次大的元素排在后面 如此重复 直至完成就实现元素从小到大的排序 这是一个双重循环程序结构 外循环由于循环次数已知 可用loop指令实现 而内循环次数每次外循环后减少一次 我们用dx表示 内循环体比较两个元素大小 又是一个分支结构 冒泡法 12 例5 7把bx中的二进制数以十六进制的形式显示在屏幕上 13 movch 4rotate movcl 4rolbx clmoval blandal 0fhaddal 30h 0 9 ascii30h 39hcmpal 3ahjlprintitaddal 7h a f ascii41h 46hprintit movdl almovah 2int21hdecchjnzrotate 14 例5 8将正数n插入一个已整序的字数组的正确位置 xdw array headdw3 5 15 23 37 49 52 65 78 99array enddw105ndw32movax nmovarray head 2 0ffffhmovsi 0compare cmparray end si axjleinsertmovbx array end si movarray end si 2 bxsubsi 2jmpshortcompareinsert movarray end si 2 ax 15 例5 9将首地址为a的字数组从大到小排序 气泡算法 多重循环 adw100 30 78 99 15 1 66 54 189 256movcx 10deccxloop1 movdi cxmovbx 0loop2 movax a bx cmpax a bx 2 jgecontinuexchgax a bx 2 mova bx axcontinue addbx 2looploop2movcx dilooploop1 16 分支程序根据条件是真或假决定执行与否 判断的条件是各种指令 如cmp test等执行后形成的状态标志 转移指令jcc和jmp可以实现分支控制 5 3分支程序设计 单分支 例5 10 双分支 例5 11 多分支 例5 12 17 例5 10 计算x y的绝对值movax xsubax yjnsnonneg 条件满足 x y 0 negax 条件不满足 求补nonneg movresult ax 条件满足 18 例5 11 moval bimulalmovbx axmoval aimul cmovcx 4imulcxcmpbx ax 比较二者大小jgeyes 条件满足 movtag 0 第一分支体 条件不满足 tag 0jmpdone 跳过第二个分支体yes movtag 1 done movah 4chint21h 前一个分支后要使用jmp指令 切切 19 orah ah 等效于cmpah 0jzfunction0 ah 0 转向function0decah 等效于cmpah 1jzfunction1 ah 1 转向function1decah 等效于cmpah 2jzfunction2 ah 2 转向function2 多分支结构 20 tabledbdisp1 disp2 disp3 disp4 例5 12利用入口地址表 形成多分支 数据段 程序段 分支体 21 datamsgdb inputnumber 1 8 0dh 0ah msg1db chapter1 fundamentalsofassemblylanguage 0dh 0ah msg2db chapter2 8086instructionset 0dh 0ah msg3db chapter3 statementsofassemblylanguage 0dh 0ah msg4db chapter4 assemblylanguageprogramming 0dh 0ah msg5db chapter5 32 bitinstructionsandprogramming 0dh 0ah msg6db chapter6 mixedprogrammingwithc c 0dh 0ah msg7db chapter7 fpinstructionsandprogramming 0dh 0ah msg8db chapter8 mmxinstructionsandprogramming 0dh 0ah tabledwdisp1 disp2 disp3 disp4 disp5 disp6 disp7 disp8 取得各个标号的偏移地址 例5 12数据段 22 start1 movdx offsetmsg 提示输入数字movah 9int21hmovah 1 等待按键int21hcmpal 1 数字8 jastart1andax 000fh 将ascii码转换成数字decaxshlax 1 等效于addax axmovbx axjmptable bx 段内 间接转移 ip table bx 例5 12程序段 23 start2 movah 9int21h exit0 disp1 movdx offsetmsg1 处理程序1jmpstart2disp2 movdx offsetmsg2 处理程序2jmpstart2disp3 movdx offsetmsg3 处理程序3jmpstart2disp4 movdx offsetmsg4 处理程序4jmpstart2 例5 12分支体 24 例5 13设有数组x x1 x10 和y y1 y10 编程计算z1 x1 y1z2 x2 y2z3 x3 y3z4 x4 y4z5 x5 y5z6 x6 y6z7 x7 y7z8 x8 y8z9 x9 y9z10 x10 y10 逻辑尺 00110111001减法0加法 25 xdwx1 x2 x3 x4 x5 x6 x7 x8 x9 x10ydwy1 y2 y3 y4 y5 y6 y7 y8 y9 y10zdwz1 z2 z3 z4 z5 z6 z7 z8 z9 z10logic ruledw00dchmovbx 0movcx 10movdx logic rulenext movax x bx shrdx 1jcsubtractaddax y bx jmpshortresult 向前引用subtract subax y bx result movz bx axaddbx 2loopnext 26 例5 14根据al寄存器中哪一位为1 从低位到高位 把程序转移到8个不同的程序分支去 寄存器间接寻址 branch tabledwroutine1dwroutine2dwroutine3dwroutine4dwroutine5dwroutine6dwroutine7dwroutine8 cmpal 0jecontinueleabx branch tablel shral 1 逻辑右移jnbadd1 jnb jncjmpwordptr bx 段内间接转移add1 addbx typebranch tablejmplcontinue routine1 routine2 27 基址变址寻址 cmpal 0jecontinueleabx branch tablemovsi 7 typebranch tablemovcx 8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年智能办公厂房租赁服务协议书
- 二零二五年环保工程监理与施工一体化合同
- 二零二五年度个人信用贷款担保合同示范文本
- 二零二五年度全方位劳务派遣服务合同范本
- 2025年度汽车租赁与旅游度假合作合同
- 2025年度新能源光伏项目股权转让协议
- 二零二五版农村土地经营权抵押贷款合同范本
- 2025版饮品连锁店区域代理合同合同范本
- 二零二五年度二手土地买卖及开发合同样本
- 2025版环保项目合同必须注意的十个关键点
- 信用卡消费者保护培训
- 青蓝工程工作总结师傅
- 石油化工生产与操作作业指导书
- 2025年中国汽车配件出口分析及各国进口政策影响白皮书-特易资讯
- 广场项目基坑监测工程技术投标书
- 卫生间卫浴知识培训课件
- 设备点检培训试题及答案
- 面部损伤护理查房
- 【初中数学】第六章 变量之间的关系同步练习 2024-2025学年北师大版七年级数学下册
- 电子废弃物回收利用-深度研究
- 2025版小细胞肺癌免疫治疗专家共识解读
评论
0/150
提交评论