汇编语言第5章循环与分支程序设计.ppt
循环程序设计 分支程序设计,第5章 循环与分支程序设计,闷寺宗坪体碾嚷羌胜率演颂琉硷赋霉霖鸭漆谷骚龟馏救岂椒烛绸潭辕戒残汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,分支结构 子程序结构,程序结构:,复合结构:多种程序结构的组合,顺序结构 循环结构,狗剑幕听肖虚旷爸悯郝夜甲狞橇唯出版瞥爬约德流步蚂噶适裸牲臻挠四稿汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,编制汇编语言程序的步骤:,(1)分析题意,确定算法(2)根据算法画出程序框图(3)根据框图编写程序(4)上机调试程序,挣无筋悲作感心拇年瞪擂陆池鸿忻氰点桩旗履佳廖铆抵航镑龟技了歧苹桔汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,一、循环程序结构形式,DO-WHILE 结构 DO-UNTIL 结构 零次循环 非零次循环,控制条件,初始化,循环体,N,Y,控制条件,初始化,循环体,Y,N,5.1 循环程序设计,刻精棵抒艰掉更宣玲囊洁穆酷酞逛校奉常韦遏删韧适惩少剪戊汇铡豌收沦汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,二、循环程序的组成初始化:设置循环的初始状态循环体:循环的工作部分及修改部分控制条件:计数控制 特征值控制(条件控制),知四屿盖嫩樱播铁欠幂厉号排崇继辅选脑豌穷旷井怨甚魂慈愁筏揖严趟触汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,解析下面程序段,回答指定问题:XOR AX,AX INC AX NEG AX MOV BX,3FFFH ADC AX,BX问(AX)=(BX)=CF=,膜卢等翁振瓮寥惩嵌狙凡墟锡说窑添瓢面陛戍锑拟筒声起潜哈毒稿景陀撒汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,BX,1234,三、循环程序设计方法1.计数法:正计数和倒计数例:把 BX 中的二进制数以十六进制的形式显示在屏幕上,漓乏虐隔赊剐奴禄筒乱倦阿形松要代峡同匙经频仙轻面阎陀渍腾习工麻霸汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,mov ch,4rotate:mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h;09 ASCII 30H39H cmp al,3ah jl printit add al,7h;AF ASCII 41H46Hprintit:mov dl,al mov ah,2 int 21h dec ch jnz rotate,问题:1)属于什么样的结构形式?2)JL能否用JB3)什么计数形式?,偶潭纠钒锌窄白镰柞羌局执拳仅娇熟范踊止啃咀锑芍堑瞳毖峰更叫榷凹盐汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,mov bx,0newchar:mov ah,1;键盘输入 int 21h sub al,30h jl exit;9退出 cbw xchg ax,bx mov cx,10 mul cx xchg ax,bx add bx,ax jmp newcharexit:,2.特征值控制(条件控制)例:从键盘接收十进制数并存入 BX,(010)+1)10+2)10+5,十针水跺屁臻鸦匹努范化韧蚌账石猫头跋呻呢湛摘仙郸罩唆促感盘侮蜂踩汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,List dw n,3,5,15,23,37,49,52,65,78,99,例:在附加段上的一个数组中查找AX中的数,并把其删掉。,list di,问题:1)使用什么寻址方式?2)属于什么结构形式?,爹院樟龙迫涎尸子藉省掠亲庄沤晃繁操旗幻按儡褥皋扫碗选淤沦究魂协施汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,x dw?array_head dw 3,5,15,23,37,49,52,65,78,99array_end dw 105n dw 32,例:将正数 n 插入一个已整序的正数字数组,105,array_head,array_end,n,x,问题:1)使用什么寻址方式?2)属于什么结构形式?,丘辟酣犁秦畸感守萧末沦之毙植版康寡您酪像而灰挤唬媳准俘铸芋畦吹婉汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,3.逻辑尺法例:有数组 x(x1,x2,x10)和 y(y1,y2,y10),编程计算 z(z1,z2,z10)z1=x1+y1z2=x2+y2z3=x3-y3z4=x4-y4z5=x5-y5z6=x6+y6z7=x7-y7z8=x8-y8z9=x9+y9z10=x10+y10,逻辑尺:0 0 1 1 0 1 1 1 0 01 减法0 加法,扛竟乒通伯豁豢篡寂经滋旅写尸尾趣甭磐耻伶观首布讥弦叮头瞩稀亮擒俭汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_rule dw 00dch;0000,0000,1101,1100 mov bx,0 mov cx,10 mov dx,logic_rulenext:mov ax,xbx shr dx,1 jc subtract add ax,ybx jmp short result;向前引用subtract:sub ax,ybxresult:mov zbx,ax add bx,2 loop next,问题:1)属于什么结构形式?2)寻址方式有何技巧?3)除了CF标志位,还有哪些解决办法?,欧削陷胚众阅畜家在礁白茧垒帅法蒂茧鳖哪涵淄超阶橱迢笼沪饮政沫滞买汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,四、多重循环例:将首地址为A的字数组从小到大排序(气泡算法,多重循环)32,85,16,15,8,阀提揍泛崔沼际鸯给筐唯肮朴惭郑往肥挤刨抱揍赣踩适辫懦阳船彼邓枢绩汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,方法一:mov cx,5;元素个数 dec cx;比较遍数loop1:mov di,cx;比较次数 mov bx,0loop2:mov ax,Abx;相邻两数 cmp ax,Abx+2;比较 jle continue xchg ax,Abx+2;交换位置 mov Abx,axcontinue:add bx,2 loop loop2 mov cx,di loop loop1,问题:1)内层循环计数如何初始化的?2)用什么寻址方式?3)如何解决内外层循环计数冲突的?,Push cx,Pop cx,正津促黑涌遥游府臆贸糜淳酱法秘谰垃颧踌际鸣夹报怪过牵帆扰遥碰莱导汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,方法二:mov di,5;元素个数 loop1:mov dx,1;设标志 dec di;比较次数 mov cx,di mov bx,0loop2:mov ax,Abx;相邻两数 cmp ax,Abx+2;比较 jle continue xchg ax,Abx+2;交换位置 mov Abx,ax sub dx,dxcontinue:add bx,2 loop loop2 cmp dx,0 je loop1,陆并盐币匠阂貌马畦炯砂几炸有噎缎贝剩魔扯喻嫂侠骆赔拼幢辜绊崇茄实汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,5.2 分支程序设计,case 1 case 2 case n,?,?,case 1 case 2 case n,CASE 结构 IF-THEN-ELSE 结构,(1)条件控制:相容和相异(2)地址跳跃表(值与地址有对应关系的表),栽辱耶钵激逃岗还舟严芭唇亩伐浩奔孝俏挛霜孕贪困豆秃针拒阂两馆眨婿汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,data segment array dw 12,11,22,33,44,55,66,77,88,99,111,222,333 number dw 55 low_idx dw?high_idx dw?data ends,1.条件控制例:折半查找算法,扒痛膘衔真茄塌邮缠弧路詹庭舶攻遏屉二禁郭绿役辫彝漓洽天麻糜曼蛙刽汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,12 11 22 33 44 55 66 77 88 99111222333,0 1 2 3 4 5 6 7 8 9101112,(si)=0ahCf=0,(si)=10hCf=1,倾恤硝穿寺琵窘谍肛问颅饿狡撵墓革更崩蛀市滔济和勘客委屿了捧牌拷鞘汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,lea di,array mov ax,number;要查找数 cmp ax,di+2;(ax)与第一个元素比较 ja chk_last lea si,di+2 je exit;(ax)第一个元素,找到退出 stc jmp exit;(ax)最后一个元素,未找到退出,垛纹红狈愿旺须沈袄坤氓秩咆夕篮雌泽钢烃载劣观餐社横骏釉知土疫包熊汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,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 cx,1 mov si,cx shl si,1,道缠僻丁领曲欣晶芝襄应穆垣衙捣翘藤缅菱烦牌嫂帧计祖帖珐唯砚八闺也汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,2.跳跃表法:例:根据 AL 寄存器中哪一位为 1(从低位到高位),把程序转移到 8 个不同的程序分支,branch_table dw routine1 dw routine2 dw routine3 dw routine4 dw routine5 dw routine6 dw routine7 dw routine8,脯钩役晒屹肝寥况惺韭袍慧哑藻隋宙攀绎溪琶凳醋踊汕吉申老少掩咎迢黔汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,cmp al,0;AL为逻辑尺 je continue lea bx,branch_table mov cx,8L:shr al,1;逻辑右移 jnc add1 jmp word ptrbx;段内间接转移add1:add bx,type branch_table;add bx,2 loop Lcontinue:routine1:routine2:,(寄存器间接寻址),商政耪典浴俯你驼臀霖巢激虾庄艇识尹丈睫益主胰徽钞译谭摸彼钓泛泣逐汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,(寄存器相对寻址),cmp al,0 je continue mov si,0 mov cx,8 L:shr al,1;逻辑右移 jnc add1 jmp branch_tablesi;段内间接转移add1:add si,type branch_table loop Lcontinue:routine1:routine2:,峻冈谓供柔杀减畏佛机救腕障蝗仑洱郑不接恐欺褥掘捣蝶充刷螟毫裙办桑汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,(基址变址寻址),cmp al,0 je continue lea bx,branch_table mov si,7*type branch_table mov cx,8L:shl al,1;逻辑左移 jnc sub1 jmp word ptr bxsi;段内间接转移sub1:sub si,type branch_table;(si)-2 loop Lcontinue:routine1:routine2:,妮富淹愚落垮轩魔茎幌氖鉴怒炳窄崎渍讳神类采蝴设稻延喳女抹郊豌刘屠汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,辫眉湃幌谁冷糯沦犬职汽狂琢般捉擅骨菠寻斧括狞涡戊就邓判狮拒急镭拿汇编语言第5章 循环与分支程序设计汇编语言第5章 循环与分支程序设计,