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

上传人:我*** 文档编号:149211004 上传时间:2020-10-25 格式:PPT 页数:45 大小:386.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课件》由会员分享,可在线阅读,更多相关《第5章循环与分支程序设计ppt课件(45页珍藏版)》请在金锄头文库上搜索。

1、第 5 章,循环与分支程序设计,本章要点,1掌握汇编语言程序设计的基本步骤和顺序程序设计的基本结构形式 2学会如何分析问题,确定算法,画出程序流程图,分配工作单元和选择合适指令和编写程序的设计思想和方法 3掌握简单的算术运算程序设计、直接查表法程序设计和简单的代码转换程序设计。,汇编语言程序的设计步骤,1、分析题意,确定算法 2、根据算法画出程序框图 3、根据框图编写程序 4、上机调试程序,程序的结构,程序有: 顺序、循环、分支和子程序四种结构形式,顺序结构:每条指令按其在程序中的排列顺序执行,51 循环程序设计,循环程序的结构形式:,循环程序组成,1)设置循环的初始状态 2)循环体。循环工作

2、的主体,由循环的工作部分及修改部分组成。 3)循环控制部分 LOOP、LOOPZ、LOOPNZ在循环体中的使用,循环程序设计方法,例5l试编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来,二进制到十六进制数转换的程序框图(略),编程方法-举例1,Data segment mess db Your Hex number is:$ bb db 00110100b, 00010010b Data ends Prognam segment assume cs: prognam, ds:data start: mov ax, data mov ds,ax lea dx, mess

3、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,转换,Printit: mov dl, al ; ASCII码放DL mov ah, 2 ; 显示功能 int 21h ;Call DOS dec ch jnz rotate

4、 ;是4个数位吗?如还不是,继续 mov ah,4ch int 21h ;return to DOS prognam ends ; end of segment end start ; end of assembly,用JNZ或JZ指令,编程方法-举例2,Data segment mess db Your Hex number is:$ bb db 00110100b, 00010010b Data ends Prognam segment assume cs: prognam, ds:data start: mov ax, data mov ds,ax lea dx, mess mov ah

5、,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 printit ; 是0到9的数码,打印 Add al,7h ; 是A 到F,转换,用LOOP指令,Printit: mov dl, al ; ASCII码放DL mov ah, 2 ; 显示功能 int 21h ;Call DOS pop cx loop r

6、otate ;是4个数位吗?如还不是,继续 mov ah,4ch int 21h ;return to DOS prognam ends ; end of segment end start ; end of assembly,编程方法-举例3,Prognam segment main proc far assume cs: prognam start: push ds ; 保存data段地址,设置返回栈 sub ax,ax Push ax push bx ;修改部分 mov bx, 1234h ;修改部分,子程序格式,;main part of program mov Ch,4 ;四个10进

7、数位 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,转换,Printit: mov dl, al ; ASCII码放DL mov ah, 2 ; 显示功能 int 21h ;Call DOS dec ch jnz rotate ;是4个数位吗?如还不是,继续 pop bx ;修改部分 ret ;return to DOS main endp

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

9、 Prognam segment assume cs:prognam,ds:datarea start: mov ax,datarea mov ds, ax mov cx, 0 mov bx, addr mov ax, bx ;将Y中数据=AX,repeat: test ax, 0ffffh jz exit jns Shift inc cx Shift: shl ax,1 Jmp repeat exit: mov count,cx mov ax,4c00h int 21h Prognam ends End start,以十进制怎样显示COUNT中数据?,如Y为双字长数据,本程序应怎样修改?,例

10、53,在附加段中有一个首地址为LIST和未经排序的字数组,在数组的第一个字中存放着该数组的长度,数组的首地址已存放在DI寄存器中。AX寄存器中存放着一个数。要求编制一程序:在数组中查找该数,如果找到此数则把它从数组中删除。,分 析,查找元素可使用串处理指令: 删除元素可使用循环结构: 处理方法: 如果找到这一元素则把数组中地址比该元素高的元素 向低地址方向移动二个字,并修改数组长度值 如果找到的元素正好位于数组末尾,则不必移动任何元素,只要修改数组长度值就可以,程序:m503DelE.asm (子程序格式),编程方法-举例1,datarea segment ;define data segme

11、nt 修改- LIST dw 10, 65,67,69,71,66,73,71,77,68,72 datarea ends prognam 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 sho

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

13、置 高地址元素,向高地址方向移一个字 从数组的尾部向头部查找,数据段定义,datarea segment x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 datarea 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数组。,分 析,用循

14、环程序结构,循环计数值为10 每次操作:加法或减法 每次应该做哪一种操作,由逻辑尺确定: 0000 0000 1101 1100 最高的6位没有意义,程序框图,程序:chap5m505Calc.asm,例 5.6,试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是则退出程序;如是则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。,程序框图,程序 例5.6,Flag=1记第一个空字符,5.1.3 多重循环程序设计,多重循环程序设计的基本方法和单重循环程序设计一致 注意控制条件和循环次数: 1、应分别考虑各重循

15、环的控制条件及其程序实现,相互之间不能混淆; 2、应注意在每次通过外层循环再次进入内层循环时,初始条件必须重新设置 3、在多次使用CX时,要注意循环次数的保存,例57,有一个首地址为A的N字数组,请编制程序使该数组中的数按照从大到小的次序整序。,采用起泡排序算法 方法: 从第一个数开始依次对相邻两个数进行比较。如次序对,则不做任何操作;如次序不对,则将这两个数交换位置。,数据段,datarea segment n equ 12 ;此处修改 a dw n dup (?) datarea ends 程序:例5.7,例58,在附加段中有一个字数组,其首地址已存放在DI寄存器中,在数组的第一个字中存放着该数组的长度。要求编制一个程序使该数组中的数按照从小到大的次序排列整齐。,数据段、代码段,data segment save_cnt dw ? Start_addr dw ? data ends extra segment ;修改 len dw 9, 14,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号