




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 循环程序设计循环程序设计 分支程序设计分支程序设计第第5 5章章 循环与分支程序设计循环与分支程序设计分支结构分支结构 子程序结构子程序结构程序结构:程序结构: 复合结构:多种程序结构的组合复合结构:多种程序结构的组合 顺序结构顺序结构 循环结构循环结构 编制汇编语言程序的步骤:编制汇编语言程序的步骤:(1) 分析题意,确定算法(2) 根据算法画出程序框图(3) 根据框图编写程序(4) 上机调试程序一、一、 循环程序结构形式循环程序结构形式do-while 结构结构 do-until 结构结构 零次循环零次循环 非零次循环非零次循环控制条件控制条件 初始化初始化循环体循环体 ny控制条件控制
2、条件 初始化初始化 循环体循环体 yn5.1 5.1 循环程序设计循环程序设计二、循环程序的组成二、循环程序的组成初始化初始化:设置循环的初始状态设置循环的初始状态循环体循环体:循环的工作部分及修改部分循环的工作部分及修改部分控制条件控制条件:计数控制计数控制 特征值控制(条件控制)特征值控制(条件控制) n 解析下面程序段,回答指定问题: xor ax,ax inc ax neg ax mov bx,3fffh adc ax,bx问(ax)= (bx)= cf= bxbx1234三、循环程序设计方法三、循环程序设计方法1.计数法:正计数和倒计数计数法:正计数和倒计数例:把例:把 bx bx
3、中的二进制数以十六进制的形式显示在屏幕上中的二进制数以十六进制的形式显示在屏幕上 mov ch, 4mov ch, 4rotate: mov cl, 4rotate: mov cl, 4 rol bx, cl rol bx, cl mov al, bl mov al, bl and al, 0fh and al, 0fh add al, 30h add al, 30h ; 09 ascii 30h39h; 09 ascii 30h39h cmp al, 3ah cmp al, 3ah jl printitjl printit add al, 7h add al, 7h ; af ascii 4
4、1h46h; af ascii 41h46hprintit: mov dl, alprintit: mov dl, al mov ah, 2 mov ah, 2 int 21h int 21h dec ch dec ch jnz rotate jnz rotate 问题:问题:1)属于什么样的结)属于什么样的结构形式?构形式?2)jl能否用能否用jb3)什么计数形式?)什么计数形式? mov bx, 0 mov bx, 0newchar: mov ah, 1 newchar: mov ah, 1 ;键盘输入;键盘输入 int 21hint 21h sub al, 30h sub al, 30h
5、 jl exit ; jl exit ; 099退出退出 cbwcbw xchg ax, bx xchg ax, bx mov cx, 10 mov cx, 10 mul cx mul cx xchg ax, bx xchg ax, bx add bx, ax add bx, ax jmp newchar jmp newcharexit: exit: 2.特征值控制(条件控制)特征值控制(条件控制)例:从键盘接收十进制数并存入例:从键盘接收十进制数并存入 bxbx( ( 010)+1 )10+2 )10+5 1 2 531 32 35list dw n,3,5,15,23,37,49,52,6
6、5,78,99list dw n,3,5,15,23,37,49,52,65,78,99例:在附加段上的一个数组中查找例:在附加段上的一个数组中查找ax中的数,并把其删掉。中的数,并把其删掉。del_ul proc neardel_ul proc near cld cld push di push di mov cx, es:di mov cx, es:di add di, 2 add di, 2 repne scasw repne scasw je delete je delete pop di pop di jmp short exit jmp short exitdelete: jcxz
7、 dec_cntdelete: jcxz dec_cntnext_el: mov bx, es:dinext_el: mov bx, es:di mov es:di-2, bx mov es:di-2, bx add di, 2 add di, 2 loop next_el loop next_eldec_cnt:pop didec_cnt:pop di dec word ptr es:di dec word ptr es:diexit: retexit: retdel_ul endpdel_ul endp3 35 515152323373749495252656578789999n n li
8、st list didi问题:问题:1)使用什么寻址方式?)使用什么寻址方式?2)属于什么结构形式?)属于什么结构形式?x dw ?x dw ?array_head dw 3,5,15,23,37,49,52,65,78,99array_head dw 3,5,15,23,37,49,52,65,78,99array_end dw 105array_end dw 105n dw 32 n dw 32 例:将正数例:将正数 n n 插入一个已整序的正数字数组插入一个已整序的正数字数组 mov ax, n mov ax, n mov array_head-2, 0ffffh mov array_h
9、ead-2, 0ffffh mov si, 0 mov si, 0compare:compare: cmp array_end si, ax cmp array_end si, ax jle insert jle insert mov bx, array_end si mov bx, array_end si mov array_end si+2, bx mov array_end si+2, bx sub si, 2 sub si, 2 jmp short compare jmp short compareinsert:insert: mov array_end si+2, ax mov a
10、rray_end si+2, ax 3 35 5151523233737494952526565787899991051053232-1-1array_headarray_endn n x x 问题:问题:1)使用什么寻址方式?)使用什么寻址方式?2)属于什么结构形式?)属于什么结构形式?3.3.逻辑尺法逻辑尺法例:有数组例:有数组 x(x1,x2,x10) x(x1,x2,x10) 和和 y(y1,y2,y10)y(y1,y2,y10), 编程计算编程计算 z(z1,z2,z10) z(z1,z2,z10) z1 = x1 + y1z1 = x1 + y1z2 = x2 + y2z2 = x
11、2 + y2z3 = x3 - y3z3 = x3 - y3z4 = x4 - y4z4 = x4 - y4z5 = x5 - y5z5 = x5 - y5z6 = x6 + y6z6 = x6 + y6z7 = x7 - y7z7 = x7 - y7z8 = x8 - y8z8 = x8 - y8z9 = x9 + y9z9 = x9 + y9z10= x10 + y10z10= x10 + y10 逻辑尺:逻辑尺:0 0 1 1 0 1 1 1 0 00 0 1 1 0 1 1 1 0 01 1 减法减法0 0 加法加法 x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x1
12、0 x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_rule dw 00dch logic_rule dw 00dch ;0000,0000,1101,1100;0000,0000,1101,1100 mov bx, 0mov bx, 0 mov cx, 10 mov cx,
13、10 mov dx, logic_rule mov dx, logic_rulenext: mov ax, xbxnext: mov ax, xbx shr dx, 1 shr dx, 1 jc subtract jc subtract add ax, ybx add ax, ybx jmp short result jmp short result ; ; 向前引用向前引用subtract: subtract: sub ax, ybx sub ax, ybxresult: mov zbx, axresult: mov zbx, ax add bx, 2 add bx, 2 loop next
14、 loop next 问题问题:1)属于什么结构形式?属于什么结构形式?2)寻址方式有何技巧?)寻址方式有何技巧?3)除了)除了cf标志位,还有哪些解决标志位,还有哪些解决办法?办法?四、多重循环四、多重循环例例: 将首地址为将首地址为a的字数组从小到大排序的字数组从小到大排序(气泡算法,多重循环)(气泡算法,多重循环) 32,85,16,15, 832,85,16,15, 8 序号序号 地址地址 数数比比 较较 遍遍 数数12341 a 322 a+2 853 a+4 164 a+6 155 a+8 8321615885161583285158163285815163285 方法一:方法一:
15、 mov cx, 5 mov cx, 5 ; ;元素个数元素个数 dec cx dec cx ; ;比较遍数比较遍数loop1: mov di, cx loop1: mov di, cx ; ;比较次数比较次数 mov bx, 0mov bx, 0loop2: loop2: mov ax, abx mov ax, abx ; ;相邻两数相邻两数 cmp ax, abx+2 cmp ax, abx+2 ; ; 比较比较 jle continuejle continue xchg ax, abx+2 xchg ax, abx+2 ; ;交换位置交换位置 mov abx, axmov abx, ax
16、continue:continue: add bx, 2 add bx, 2 loop loop2 loop loop2 mov cx, di mov cx, di loop loop1 loop loop1问题:问题:1)内层循环计)内层循环计数如何初始化的数如何初始化的?2)用什么寻址方式?用什么寻址方式?3)如何解决内外层循)如何解决内外层循环计数冲突的?环计数冲突的?push cxpop cx方法二:方法二: mov di, 5 mov di, 5 ; ;元素个数元素个数 loop1: mov dxloop1: mov dx,1 1 ;设标志;设标志 dec di dec di ; ;
17、比较次数比较次数 mov cxmov cx,didi mov bx, 0 mov bx, 0loop2: mov ax, abx loop2: mov ax, abx ; ;相邻两数相邻两数 cmp ax, abx+2 cmp ax, abx+2 ; ; 比较比较 jle continuejle continue xchg ax, abx+2 xchg ax, abx+2 ; ;交换位置交换位置 mov abx, axmov abx, ax sub dx sub dx,dxdxcontinue: add bx, 2 continue: add bx, 2 loop loop2 loop loo
18、p2 cmp dx, 0 cmp dx, 0 je loop1 je loop1 5. 2 5. 2 分支程序设计分支程序设计 case 1 case 2 case n? case 1 case 2 case n case 结构结构 if-then-else 结构结构(1) 条件控制:相容和相异条件控制:相容和相异(2) 地址跳跃表地址跳跃表(值与地址有对应关系的表)(值与地址有对应关系的表)data segmentdata segment array dw 12,11,22,33,44,55,66, array dw 12,11,22,33,44,55,66, 77,88,99,111,22
19、2,333 77,88,99,111,222,333 number dw 55 number dw 55 low_idx dw ? low_idx dw ? high_idx dw ? high_idx dw ?data endsdata ends1.1.条件控制条件控制例:折半查找算法例:折半查找算法 12 12 11 11 22 22 33 33 44 44 55 55 66 66 77 77 88 88 99 99111111222222333333 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9101011111212(ax)=55(ax)=55low_
20、idx 1 1 4 5 high_idx 12555(si)=0ah(si)=0ahcf=0cf=0(ax)=90(ax)=90low_idx 1 7 7 8 9 high_idx 1212888(si)=10h(si)=10hcf=1cf=1 lea di, array mov ax, number ; ;要查找数要查找数 cmp ax, di+2 ; (ax); (ax)与第一个元素比较与第一个元素比较 ja chk_last lea si, di+2 je exit ; (ax); (ax)第一个元素第一个元素, ,找到退出找到退出 stc jmp exit ; (ax); (ax);
21、(ax)最后一个元素最后一个元素, ,未找到退出未找到退出compare: cmp ax, bx+si je exit ja higher dec cx mov high_idx, cx jmp midhigher: inc cx mov low_idx, cx jmp midno_match: stcexit: search: mov low_idx, 1 mov bx, di ;个数 mov high_idx, bx mov bx, dimid: mov cx, low_idx mov dx, high_idx cmp cx, dx ja no_match add cx, dx shr c
22、x, 1 mov si, cx shl si, 12.跳跃表法:跳跃表法:例:根据例:根据 al 寄存器中哪一位为寄存器中哪一位为 1(从低位到高位),(从低位到高位), 把程序转移到把程序转移到 8 个不同的程序分支个不同的程序分支branch_table dw routine1branch_table dw routine1 dw routine2 dw routine2 dw routine3 dw routine3 dw routine4 dw routine4 dw routine5 dw routine5 dw routine6 dw routine6 dw routine7 dw
23、 routine7 dw routine8 dw routine8 cmp al, 0 cmp al, 0 ;al;al为逻辑尺为逻辑尺 je continueje continue lea bx, branch_table lea bx, branch_table mov cx mov cx,8 8l: shr al, 1 l: shr al, 1 ;逻辑右移逻辑右移 jnc add1jnc add1 jmp word ptrbx jmp word ptrbx ;段内间接转移add1: add bx, type branch_table add1: add bx, type branch_table ;add bx,2add bx,2 loop l loop lcontinue: continue: routine1: routine1: routine2: routine2: (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混凝土成型过程中收缩与膨胀控制方案
- 太极文化简介胡光辉28课件
- 一、机械能(第1课时) -苏科版九年级《物理》上册考点练习
- 水稻之父课件
- 幼儿说谎行为的识别与应对学习指导张祯06课件
- 中药调剂斗谱64课件
- 2025版离婚协议书详细规定离婚后财产分割流程
- 2025版离婚协议书下载及签订服务合同
- 2025版电子商务合同纠纷解决与维权策略大全
- 2025版保险产品居间销售合同范本
- 2025年储能专业知识考试题库及答案
- 2025至2030年中国肽饲料市场供需现状及投资战略研究报告
- 化工机械法兰连接课件
- 面肌痉挛手术护理要点
- 情绪识别与营销-洞察及研究
- 室上性心动过速急救护理
- 2025年国家自然科学基金委员会招聘工作人员的(一)笔试模拟试题附答案详解
- 2025年村官、村干部相关法律知识考试题(附含答案)
- 工会考试试题及答案青岛
- 《中国成人呼吸系统疾病家庭氧疗指南(2024年)》解读 2
- 稻虾养殖技术课件
评论
0/150
提交评论