循环与分支程序设计.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 分支 程序设计
- 资源描述:
-
*,计算机科学与技术系,汇编语言,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五章,循环与分支程序设计,10/3/2026,教学重点,1.掌握,基本程序结构,顺序结构,、,循环结构,、,分支结构,及其汇编语言程序设计,2.,熟悉常见程序设计,问题:,数据范围判断,(,0,9,、,A,Z,、,a,z,),字母大小写转换,;,字符串传送、比较等操作,求最大最小值、数据求和、统计字符个数,数组排序,查找,插入,删除,10/3/2026,(3)分支结构 (4)子程序结构,程序结构,(5)复合结构:多种程序结构的组合,(1)顺序结构 (2)循环结构,10/3/2026,编制汇编语言程序的步骤,(1)分析题意,确定算法,(2)根据算法画出程序框图,(3)根据框图编写程序,(4)上机调试程序,10/3/2026,5.0 顺序程序设计,顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构,一般纯粹的顺序结构的程序设计较少。,10/3/2026,例,data segment,Xdw 5,Ydw 6,Zdw 7,Wdw?,data ends,code segment,main proc far,assume cs:code,ds:data,start:,push ds,xor ax,ax,push ax,mov ax,data,mov ds,ax,mov ax,X,add ax,Y,add ax,Z,mov W,ax,ret,main endp,code ends,end start,W,X+Y+Z,10/3/2026,例 代码转换,;查表法,实现一位16进制数转换为ASCII码显示,data segment,ASCII db 30h,31h,32h,33h,34h,35h,db 36h,37h,38h,39h,;09的ASCII码,db 41h,42h,43h,44h,45h,46h,;AF的ASCII码,hex db 0bh,;任意设定一个待转换的一位16进制数,data ends,code segment,main proc far,10/3/2026,例 代码转换,assume cs:code,ds:data,start:,push ds,xor ax,ax,push ax,mov ax,data,mov ds,ax,;-,mov bx,offset ASCII,;BX指向ASCII码表,mov al,hex,;AL取得一位16进制数,正是ASCII码表中位移,10/3/2026,and al,0fh,;只有低4位是有效的,高4位清0,xlat,;换码:ALDS:BXAL,mov dl,al,;入口参数:DLAL,mov ah,2,;02号DOS功能调用,int 21h,;显示一个ASCII码字符,ret,main endp,code ends,end start,例 代码转换,10/3/2026,;查表法,实现一位16进制数转换为ASCII码显示,data segment,ASCII db 30h,31h,32h,33h,34h,35h,db 36h,37h,38h,39h,;09的ASCII码,db 41h,42h,43h,44h,45h,46h,;AF的ASCII码,hex db 0bh,;任意设定一个待转换的一位16进制数,data ends,code segment,main proc far,assume cs:code,ds:data,start:,push ds,xor ax,ax,push ax,mov ax,data,mov ds,ax,;-,mov bx,offset ASCII,;BX指向ASCII码表,mov al,hex,;AL取得一位16进制数,正是ASCII码表中位移,and al,0fh,;只有低4位是有效的,高4位清0,xlat,;换码:ALDS:BXAL,mov dl,al,;入口参数:DLAL,mov ah,2,;02号DOS功能调用,int 21h,;显示一个ASCII码字符,ret,main endp,code ends,end start,10/3/2026,5.1 循环程序设计,循环结构一般是,根据某一条件判断为真或假来确定是否重复执行循环体,循环指令,和,转移指令,可以实现循环控制,10/3/2026,循环程序结构形式,DO-WHILE,结构 DO-UNTIL 结构,控制条件,初始化,循环体,Y,N,控制条件,初始化,循环体,Y,N,10/3/2026,初始化,:设置循环的初始状态,循环体,:循环的工作部分及修改部分,控制条件,:计数控制(,LOOP,),特征值控制,(,LOOPZ/LOOPNZ/条件跳转指令,),循环程序结构说明,10/3/2026,例:把,BX,中的二进制数以十六进制的形式显示在屏幕上,如:,1011 0010 1111 1010,B,B2FA,H,BX,1,2,3,4,10/3/2026,分析:,(1)程序结构的确定,由题意,应该把BX的内容从左到右每4位为一组在屏幕上显示出来,,显然这可以用循环结构来完成,每次显示一个十六进制数位,因而循环次数是已知的,计数值为4。,(2)循环体的构成(算法确定),循环体应该包括:,二进制到所显示字符的ASCII之间的转换,以及每个字符的显示,。,需要了解相关知识,:,字符和其ASCII码之间的关系?,“0”“9”,30H39H,“A”F”41H5AH,如何显示一个字符?,(a),将显示字符的ASCII码放入DL寄存器;,(b),将AH的内容置为2(功能号);,(c),执行INT 21H(DOS 功能调用)。,10/3/2026,(3)循环控制条件分析,因为循环次数已知,可以使用,LOOP指令,实现,但是必须注意:,由于循环移位指令中使用CL寄存器作为移位次数寄存器,而LOOP 指令的循环次数隐含在CX寄存器中,因此,必须注意这两者之间的冲突,。,除了可以使用LOOP指令之外,还可以使用,条件跳转指令,来实现。,LOOP AGAIN,DEC 计数器,JNZ AGAIN,10/3/2026,mov cx,4 ;初始化,rotate:,push cx,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 41H46H,printit:,mov dl,al,mov ah,2,int 21h,pop cx,loop rotate,方法1(LOOP),10/3/2026,mov,ch,4 ;初始化,rotate: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 41H46H,printit:,mov dl,al,mov ah,2,int 21h,dec ch,jnz rotate,方法2(条件跳转指令),10/3/2026,例:将正数,n,插入一个已整序的正数字数组。该数组的,首地址和末地址分别为ARRAY_HEAD,ARRAY_END。,分析:题目要求在已经排好序的正数数组中插入一个正数n,因此,解决问题的关键是找到要出入正数n的位置。需要考虑如下问题?,(,1)如何找到插入位置及软件实现?,(2)如何插入正数n及软件实现?,(3)数组边界问题考虑?,10/3/2026,由于数组已经排好序,因此可以将正数n依次和数组中的数进行比较,比较有个方向问题,这里假设数组在存储单元中按地址递增的方向从小到大依次存放。不妨从大数开始进行比较,,当遇到第一个比n小的数,记下该位置,该位置就是要插入n 的位置。,找到出入位置后,如何在不破坏原来数据顺序基础上插入n呢?打个比方:9个同学按高矮依次做在110号椅子上,现在第10个同学按照高矮要做在第5号椅子上,那么如何空出第5号椅子呢,但仍然保持高矮次序?只要9号同学移到10号,,,9,10,8,9,7,8,6,7,5,6,就可以了。同样,我们可以如法炮制,,数组中将要插入数n位置前的数依次前移一个位置(两个字节),空出要插入位置,将n放入即可,。,在插入数时,可能遇到特殊情况,即数n比数组中所有的数都要大,或者小。若比所有的数都大,就不需要移动原数组中的数,直接插入即可;若比所有的数都小,就将数n放在数组的首位置。,10/3/2026,很显然,查找位置和空出位置的过程就是循环比较的过程,因此采用循环结构来实现,那么,循环条件如何确定呢?其中一种比较容易想到循环条件就是,:,数组长度(或数组首地址)及Khigh,则查找失败,置CF=1,退出程序。否则,计算中点mid(low+high)/2;,(3)k与中点元素rmid比较。若k=rmid,则查找成功,程序结束;若krmid,则转(5);,(4)低半部分查找,highmid-1,返回(2),继续查找;,(5)高半部分查找,lowmid+1,返回(2),继续查找。,10/3/2026,z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,routine1:,每一遍比较需要比较的次数为要比较数减一。,jmp L,循环体应该包括:二进制到所显示字符的ASCII之间的转换,以及每个字符的显示。,pop cx,mov bx,di,Y DW 5,push ds,MOV AX,DATA,如n=5,第一遍比较次数为4(内循环),第二遍比较次数为3(内循环),第三遍比较次数为2(内循环),第四遍比较次数为1(内循环)。,shl si,1 ;计算最后一个元素,and al,0fh;只有低4位是有效的,高4位清0,dw routine6,如未找到,则使CF=1。,mov al,bl,mov ah,2;02号DOS功能调用,data segment,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)最后一个元素,未找到退出,算法,10/3/2026,compare:,cmp ax,bx+si,je exit,ja higher,dec cx,mov high_idx,cx,jmp mid,higher:,inc cx,mov low_idx,cx,jmp mid,no_match:,stc,exit:,search:,mov low_idx,1,mov bx,di,;个数,mov high_idx,bx,mov bx,di,mid:,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,10/3/2026,(3)地址跳跃表,(值与地址有对应关系的表),例:根据 AL 寄存器中哪一位为 1(从低位到高位),,把程序转移到 8 个不同的程序分支,branch_table,dw routine1,dw routine2,dw routine3,dw routine4,dw routine5,dw routine6,dw routine7,dw routine8,10/3/2026,cmp al,0,;AL为逻辑尺,je continue,lea bx,branch_table,L:shr al,1,;,逻辑右移,jnc add1,jmp,word ptr,bx,;,段内间接转移,add1:add bx,type,branch_table ;add bx,2,jmp L,continue:,routine1:,routine2:,(,寄存器间接寻址,),10/3/2026,(,寄存器相对寻址),cmp al,0,je continue,mov si,0,L:shr al,1 ;逻辑右移,jnc add1,jmp branch_tablesi,;,段内间接转移,add1:,add si,type,branch_table,jmp L,continue:,routine1:,routine2:,10/3/2026,(,基址变址寻址,),cmp al,0,je continue,lea bx,branch_table,mov si,7*,type,branch_table,mov cx,8,L:shl al,1,;,逻辑左移,jnc sub1,jmp,word ptr,bxsi,;,段内间接转移,sub1:sub si,type,branch_table;,(si)-2,loop L,continue:,routine1:,routine2:,10/3/2026,试编一程序,求,三个带符号字数据中的最大值,,并将最大值存入,MAX,字单元,中。,设 三个带符号数分别在三个字变量,X,、,Y,、,Z,中存储。,大家做一个题目,10/3/2026,程序如下:,DATASEGMENT,X DW 00ABH,Y DW 5,Z DW 200,MAXDW?,DATAENDS,CODESEGMENT,ASSUME DS:DATA,CS:CODE,START:,MOV AX,DATA,MOV DS,AX,MOV AX,X,CMP AX,Y ;XY?,JGL1,MOV AX,Y ;YZ?,CMP AX,Z,JG EXIT,L2,:,MOV AX,Z,JMP EXIT,L1,:,CMP AX,Z,;,X,Z,?,JLE L2,EXIT,:,MOV MAX,AX,MOV AH,4CH,INT 21H,CODEENDS,ENDSTART,10/3/2026,第五章 作业,10/3/2026,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


循环与分支程序设计.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14512056.html