第5章循环与分支程序设计.ppt

上传人:王** 文档编号:185163 上传时间:2023-04-02 格式:PPT 页数:45 大小:500.50KB
下载 相关 举报
第5章循环与分支程序设计.ppt_第1页
第1页 / 共45页
第5章循环与分支程序设计.ppt_第2页
第2页 / 共45页
第5章循环与分支程序设计.ppt_第3页
第3页 / 共45页
第5章循环与分支程序设计.ppt_第4页
第4页 / 共45页
第5章循环与分支程序设计.ppt_第5页
第5页 / 共45页
第5章循环与分支程序设计.ppt_第6页
第6页 / 共45页
第5章循环与分支程序设计.ppt_第7页
第7页 / 共45页
第5章循环与分支程序设计.ppt_第8页
第8页 / 共45页
第5章循环与分支程序设计.ppt_第9页
第9页 / 共45页
第5章循环与分支程序设计.ppt_第10页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章循环与分支程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章循环与分支程序设计.ppt(45页珍藏版)》请在优知文库上搜索。

1、第第 5 章章循环与分支程序设计循环与分支程序设计本章要点1掌握汇编语言程序设计的基本步骤和顺序程掌握汇编语言程序设计的基本步骤和顺序程序设计的基本结构形式序设计的基本结构形式2学会如何分析问题,确定算法,画出程序流学会如何分析问题,确定算法,画出程序流程图,分配工作单元和选择合适指令和编写程图,分配工作单元和选择合适指令和编写程序的设计思想和方法程序的设计思想和方法3掌握简单的算术运算程序设计、直接查表法掌握简单的算术运算程序设计、直接查表法程序设计和简单的代码转换程序设计。程序设计和简单的代码转换程序设计。 汇编语言程序的设计步骤汇编语言程序的设计步骤 1、分析题意,确定算法、分析题意,确

2、定算法2、根据算法画出程序框图、根据算法画出程序框图 3、根据框图编写程序、根据框图编写程序 4、上机调试程序、上机调试程序程序的结构程序的结构 程序有:程序有: 顺序、循环、分支和子程序四种结构形式顺序、循环、分支和子程序四种结构形式顺序结构:每条指令按其在程序中的排列顺序顺序结构:每条指令按其在程序中的排列顺序执行执行51 循环程序设计循环程序设计 循环程序的结构形式:循环程序的结构形式:循环程序组成循环程序组成 1)设置循环的初始状态)设置循环的初始状态 2)循环体。循环工作的主体,由循环的工)循环体。循环工作的主体,由循环的工作部分及修改部分组成。作部分及修改部分组成。 3)循环控制部

3、分)循环控制部分 LOOP、LOOPZ、LOOPNZ在循环体中在循环体中的使用的使用循环程序设计方法循环程序设计方法 例例5l试编制一个程序把试编制一个程序把BX寄存器内的二进制寄存器内的二进制数用十六进制数的形式在屏幕上显示出来数用十六进制数的形式在屏幕上显示出来二进制到十六进制数转换的程序框图(略)二进制到十六进制数转换的程序框图(略) 编程方法编程方法-举例举例1Data segment mess db Your Hex number is:$ bb db 00110100b, 00010010bData endsPrognam segment assume cs: prognam, d

4、s:datastart: mov ax, data mov ds,ax lea dx, mess mov ah,9 int 21h mov bx, word ptr bb mov Ch,4 ;四个四个16进制数位,循环进制数位,循环4次次rotate: mov cl,4 ; rol bx, cl ;右移四位右移四位 mov al, bl and al, 0fh ;取低取低4位位 add al,30h ;将将16进制转为进制转为ASCII码码 cmp al,3ah ; 比较,比较,9? JL printit ; 是是0到到9的数码,打印的数码,打印 Add al,7h ; 是是A 到到F,转换,

5、转换Printit: mov dl, al ; ASCII码放码放DL mov ah, 2 ; 显示功能显示功能 int 21h ;Call DOS dec ch jnz rotate ;是是4个数位吗?如还不是,继续个数位吗?如还不是,继续 mov ah,4ch int 21h ;return to DOSprognam ends ; end of segmentend start ; end of assembly用用JNZ或或JZ指令指令编程方法编程方法-举例举例2Data segment mess db Your Hex number is:$ bb db 00110100b, 000

6、10010bData endsPrognam segment assume cs: prognam, ds:datastart: mov ax, data mov ds,ax lea dx, mess mov ah,9 int 21h mov bx, word ptr bb mov CX,4 ;四个四个10进数位进数位rotate: push cx mov cl,4 ; rol bx, cl ;右移四位右移四位 mov al, bl and al, 0fh ;取低取低4位位 add al,30h ;将将16进制转为进制转为ASCII码码 cmp al,3ah ; 比较,比较,9? JL pri

7、ntit ; 是是0到到9的数码,打印的数码,打印 Add al,7h ; 是是A 到到F,转换,转换用用LOOP指令指令Printit: mov dl, al ; ASCII码放码放DL mov ah, 2 ; 显示功能显示功能 int 21h ;Call DOS pop cx loop rotate ;是是4个数位吗?如还不是,继续个数位吗?如还不是,继续 mov ah,4ch int 21h ;return to DOSprognam ends ; end of segmentend start ; end of assembly编程方法编程方法-举例举例3Prognam segment

8、main proc far assume cs: prognamstart: push ds ; 保存保存data段地址,设置返回栈段地址,设置返回栈 sub ax,ax Push ax push bx ;修改部分修改部分 mov bx, 1234h ;修改部分修改部分子程序格式子程序格式;main part of program mov Ch,4 ;四个四个10进数位进数位rotate: mov cl,4 ; rol bx, cl ;右移四位右移四位 mov al, bl and al, 0fh ;取低取低4位位 add al,30h ;将将16进制转为进制转为ASCII码码 cmp al,

9、3ah ; 比较,比较,9? JL printit ; 是是0到到9的数码,打印的数码,打印 Add al,7h ; 是是A 到到F,转换,转换Printit: mov dl, al ; ASCII码放码放DL mov ah, 2 ; 显示功能显示功能 int 21h ;Call DOS dec ch jnz rotate ;是是4个数位吗?如还不是,继续个数位吗?如还不是,继续 pop bx ;修改部分修改部分 ret ;return to DOSmain endp ;end of main part prognam ends ; end of segmentend ; end of ass

10、embly例例5.2 在在ADDR单元中存放着数单元中存放着数Y的地址,试的地址,试编制一程序把编制一程序把Y中中1的个数存入的个数存入COUNT单元中。单元中。两个问题:两个问题:1. 数据段如何定义,需定义哪些变量?数据段如何定义,需定义哪些变量?2. 需不需要附加段?需不需要附加段? Y DW 1234HADDR DW YCOUNT DB ?算法分析与程序框架算法分析与程序框架逐位测试逐位测试采用采用DO-WHILE的结构的结构 子程序形式的程序:子程序形式的程序:m502CNT1.asm程序程序datarea segment addr dw Y Y dw 1234h ;修改 count

11、 dw ?datarea endsPrognam segment assume cs:prognam,ds:datareastart: mov ax,datarea mov ds, ax mov cx, 0 mov bx, addr mov ax, bx ;将Y中数据=AXrepeat: test ax, 0ffffh jz exit jns Shift inc cx Shift: shl ax,1 Jmp repeat exit: mov count,cx mov ax,4c00h int 21hPrognam ends End start 以十进制怎样显示以十进制怎样显示COUNT中数据?

12、中数据?如如Y为双字长数据,为双字长数据,本程序应怎样修改?本程序应怎样修改?例例53 在附加段中有一个首地址为在附加段中有一个首地址为LIST和未经排序的和未经排序的字数组,在数组的第一个字中存放着该数组的字数组,在数组的第一个字中存放着该数组的长度,数组的首地址已存放在长度,数组的首地址已存放在DI寄存器中。寄存器中。AX寄存器中存放着一个数。要求编制一程序:寄存器中存放着一个数。要求编制一程序:在数组中查找该数,如果找到此数则把它从数在数组中查找该数,如果找到此数则把它从数组中删除。组中删除。分 析 查找元素可使用串处理指令查找元素可使用串处理指令: 删除元素可使用循环结构删除元素可使用

13、循环结构: 处理方法:处理方法: 如果找到这一元素则把数组中地址比该元素如果找到这一元素则把数组中地址比该元素高的元素高的元素 向低地址方向移动二个字,并修向低地址方向移动二个字,并修改数组长度值改数组长度值 如果找到的元素正好位于数组末尾,则不必如果找到的元素正好位于数组末尾,则不必移动任何元素,只要修改数组长度值就可以移动任何元素,只要修改数组长度值就可以 程序:m503DelE.asm (子程序格式)编程方法编程方法-举例举例1datarea segment ;define data segment 修改- LIST dw 10, 65,67,69,71,66,73,71,77,68,7

14、2datarea endsprognam segment assume cs:prognam, es:datarea start: mov ax, datarea mov es, ax mov ax, 71 ;如要查数据 71 cld Push di ;保存原先DI中数据 mov di, offset list ;取LIST地址 Push di ;保存开始地址DI续续 mov cx, es:di ;取长度 add di, 2 Repne scasw je delete Pop di jmp short exitdelete: jcxz dec_cnt Next_el: ;移动 mov bx,

15、es: di mov es:di-2, bx add di, 2 loop next_el dec_cnt: pop di dec word PTR es:diexit: POP DI MOV AX,4C00H INT 21HPrognam ends End start例 54 将正数将正数N插入一个已排序的字数组的正确位置。插入一个已排序的字数组的正确位置。该数组的首地址和末地址分别为该数组的首地址和末地址分别为ARRAY_HEAD和和ARRAY_END,其中所有数,其中所有数均为正数且已按递增的次序排列。均为正数且已按递增的次序排列。分 析 找到应插入数的位置找到应插入数的位置作为循环的结

16、束条件作为循环的结束条件 空出插入数的位置空出插入数的位置 高地址元素,向高地高地址元素,向高地址方向移一个字址方向移一个字 从数组的尾部向头部从数组的尾部向头部查找查找数据段定义datarea segment x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32datarea ends程序:m504Sort.asm例 55 设有数组设有数组X和和Y。X数组中有数组中有X1,X10;Y数数组中有组中有Y1,Y10。试编制程序计算:。试编制程序计算: Z1X1+Y1 Z5X5-Y5 Z8X8-Y8 Z2X2+Y2 Z6X6+Y6 Z9X9+Y9 Z3X3-Y3 Z7X7-Y7 Z10X10+Y10 Z4X4-Y4结果存入结果存入Z数组。数组。分 析 用循环程序结构,循环计数值为用循环程序结构,循环计数值为10 每次操作:加法或减法每次操作:加法或减法 每次应该做哪一种操作,由逻辑尺确定:每次应该做哪一种操作,由逻辑尺确定: 0000 0000 1101 1100最高的最高的6位没有意义位没有意义

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据结构与算法

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!