第讲第5章-控制转移和程序结构.ppt

上传人:b****2 文档编号:2123439 上传时间:2022-10-27 格式:PPT 页数:34 大小:645KB
下载 相关 举报
第讲第5章-控制转移和程序结构.ppt_第1页
第1页 / 共34页
第讲第5章-控制转移和程序结构.ppt_第2页
第2页 / 共34页
第讲第5章-控制转移和程序结构.ppt_第3页
第3页 / 共34页
第讲第5章-控制转移和程序结构.ppt_第4页
第4页 / 共34页
第讲第5章-控制转移和程序结构.ppt_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

第讲第5章-控制转移和程序结构.ppt

《第讲第5章-控制转移和程序结构.ppt》由会员分享,可在线阅读,更多相关《第讲第5章-控制转移和程序结构.ppt(34页珍藏版)》请在冰豆网上搜索。

第讲第5章-控制转移和程序结构.ppt

第第55章章控制转移和程序结构控制转移和程序结构5.3循环程序结构循环程序结构第第5章章控制转移和程序结构控制转移和程序结构5.1目标地址寻址方式目标地址寻址方式5.1.1转移范围转移范围5.1.2寻址方式寻址方式5.1.3无条件转移指令无条件转移指令5.2分支程序结构分支程序结构5.2.1条件转移指令条件转移指令5.2.2单分支结构单分支结构5.2.3双分支结构双分支结构5.2.4多分支结构多分支结构5.3循环程序结构循环程序结构5.3.1循环指令循环指令5.3.2计数控制循环计数控制循环5.3.3条件控制循环条件控制循环5.4子程序结构子程序结构5.4.1子程序指令子程序指令5.4.2子程序设计子程序设计5.4.3参数传递参数传递5.4.4程序模块程序模块5.3循环程序结构循环程序结构p5.3.1循环指令循环指令p5.3.2计数控制循环计数控制循环p5.3.3条件控制循环条件控制循环循环控制方法循环控制方法循环程序结构循环程序结构p当型循环当型循环n先判断,后循环先判断,后循环p直到型循环直到型循环n先循环,后判断先循环,后判断循环程序的组成循环程序的组成p参数初始化部分参数初始化部分n循环次数、各变量的初值等循环次数、各变量的初值等p工作部分工作部分n为完成程序功能而设计的主要程序段为完成程序功能而设计的主要程序段p参数修改部分参数修改部分n修改循环计数据及操作数地址等修改循环计数据及操作数地址等p循环控制部分循环控制部分n判断是否结束循环判断是否结束循环5.3.1循环指令循环指令pLOOPlabeln;ECXECX1n若若ECX0,循环到,循环到LABEL;否则,顺序执行否则,顺序执行pJECXZlabeln;ECX0,转移,转移;否则顺序执行否则顺序执行pJCXZlabeln;CX0,转移,转移;否则顺序执行否则顺序执行p注意注意n跳转范围跳转范围均为均为相对短转移相对短转移:

-128+127n32位段使用位段使用ECX(16位段使用位段使用CX)作为计数器)作为计数器DECECXJNZlabel;计数控制循环计数控制循环常用循环控制方法常用循环控制方法p计数控制计数控制n循环次数循环次数已知已知,每循环一次加,每循环一次加/减减1n实现:

常用实现:

常用LOOP指令指令p条件控制条件控制n循环次数循环次数未知未知,须根据条件控制循环,须根据条件控制循环n实现:

用条件转移指令实现:

用条件转移指令p状态控制状态控制n根据事先设置或实时检测的根据事先设置或实时检测的状态状态来控制循环来控制循环例题例题5-11数组求和程序数组求和程序-1movecx,lengthofarrayxoreax,eax;求和初值为求和初值为0movebx,eax;数组指针为数组指针为0again:

movzxedx,arrayebx*(typearray)addeax,edx;求和求和incebxloopagainmovsum,eax;保存结果保存结果循环初始循环初始循环体循环体循环控制循环控制计数控制计数控制例题例题5-11数组求和程序数组求和程序-2movecx,lengthofarrayxoreax,eax;求和初值为求和初值为0jecxzdone;数组元素为数组元素为0个个,不求和,不求和movebx,eax;数组指针为数组指针为0again:

movzxedx,arrayebx*(typearray)addeax,edx;求和求和incebxloopagaindone:

movsum,eax;保存结果保存结果计数控制计数控制0A号号DOS功能调用功能调用字符串输入字符串输入功能编号功能编号AH0AH入口参数入口参数DSDX键盘输入缓冲区逻辑地址键盘输入缓冲区逻辑地址(段地址(段地址偏移地址)偏移地址)功能说明功能说明读取从键盘输入的一个字符串(读取从键盘输入的一个字符串(有回显有回显),直到),直到按下回车键。

按下回车键。

键盘输入缓冲区的键盘输入缓冲区的第第1个字节个字节是缓冲区字节大小是缓冲区字节大小(最大为(最大为255),),第第2个字节个字节在调用结束时被功能在调用结束时被功能调用填进输入的字符个数,调用填进输入的字符个数,第第3个字节开始个字节开始存放输存放输入字符的入字符的ASCII码,码,最后最后是回车字符(是回车字符(0DH)。

)。

例题例题5-12输入字符串大小写转换程序输入字符串大小写转换程序-1;数据段数据段keynum=255keybufdbkeynum;键盘输入缓冲区键盘输入缓冲区db0dbkeynumdup(0);代码段代码段movdx,offsetkeybuf;设置入口参数设置入口参数DXmovah,0ahint21h;用户用回车键结束用户用回车键结束movdl,0ah;回车后再进行换行回车后再进行换行movah,2int21h输入输入“Hi”,回车,缓冲区:

,回车,缓冲区:

FF0248690D00例题例题5-12输入字符串大小写转换程序输入字符串大小写转换程序-2movbx,offsetkeybuf+1;输入字符个数输入字符个数movcl,bx;作为循环的次数作为循环的次数movch,0again:

incbx;BX指向输入字符指向输入字符movdl,bx;取出一个字符取出一个字符cmpdl,a;小于小写字母小于小写字母“a”jbdispcmpdl,z;大于小写字母大于小写字母“z”jadisp;直接去显示直接去显示subdl,20h;小写字母转换为大写字母小写字母转换为大写字母disp:

movah,2;显示一个字符显示一个字符int21hloopagain;循环循环计数控制计数控制例题例题5-13记录字符串特定字符个数程序记录字符串特定字符个数程序movesi,offsetstringxorebx,ebx;EBX用于记录空格数用于记录空格数again:

moval,esicmpal,0;判断字符串是否结束判断字符串是否结束jzdonecmpal,20h;空格的空格的ASCII码是码是20Hjnenext;不相等、不是空格,转移不相等、不是空格,转移incbx;相等、是空格,个数加相等、是空格,个数加1next:

incesijmpagain;继续循环继续循环done:

movspace,ebx;保存结果保存结果条件控制条件控制p例例1.统计字节数据块:

统计字节数据块:

-1-1,-3-3,55,66,99,中中负元素负元素的个数的个数数据段定义如下:

数据段定义如下:

DATASEGMENTBUFDB-1,-3,5,6,9,;定义若干字节带符号数定义若干字节带符号数CUNTEQU$BUF;计算数据块长度计算数据块长度RESULTDW?

;定义存放结果单元定义存放结果单元DATAENDS;代码段程序:

代码段程序:

MOVBX,OFFSETBUF;建立数据指针建立数据指针MOVCX,CUNT;设置循环次数设置循环次数MOVDX,0;置结果初值置结果初值LP1:

MOVAL,BX;取数据取数据ANDAL,AL;设置标志位设置标志位JNSPLUS;是正数,转去是正数,转去PLUSINCDX;是负数,负数个数是负数,负数个数1PLUS:

INCBX;调整数据指针调整数据指针LOOPLP1;(CX1)0,继续循环,继续循环MOVRESULT,DX;存入负数个数存入负数个数计数控制计数控制参数初始化参数初始化循环控制循环控制参数修改参数修改p例例2.设:

设:

AX寄存器中有一个寄存器中有一个16位的二进制数位的二进制数要求:

编程统计要求:

编程统计AX中中1(bit)的个数并存入的个数并存入CX;方法方法1:

当当AX内容为全内容为全0,不必再继续统计,不必再继续统计MOVCX,0;置置结果计数器结果计数器初值初值LP:

ANDAX,AX;AX=0否否?

JZEXIT;是,退出循环是,退出循环SALAX,1;否,否,AX的最高位移至的最高位移至CF中中JNCZERO;CF0,转,转ZERO继续循环继续循环INCCX;CF1,结果计数器加,结果计数器加1ZEO:

JMPLPEXIT:

条件控制条件控制循环次数未知循环次数未知先判断,后执行先判断,后执行;方法方法2:

每位:

每位和和1“与与”,不等为,不等为0,否则为,否则为1MOVCX,16;AX中二进制数的位数中二进制数的位数MOVDX,0001HAA:

TESTAX,DXJZLOP;该位为该位为0,则跳转则跳转INCBXLOP:

SHRAX,1LOOPAAMOVCX,BX状态控制状态控制多重循环多重循环程序设计程序设计p注意注意n循环可以嵌套循环可以嵌套(多重循环多重循环)p多个循环体之间不能交叉多个循环体之间不能交叉p控制条件不能混淆控制条件不能混淆n内循环内循环外循环:

可以外循环:

可以n外外循环循环内内循环:

不可以循环:

不可以n千万不能:

千万不能:

循环回到初始化部分循环回到初始化部分p否则会出现死循环否则会出现死循环p例:

软件延时程序例:

软件延时程序SOFTDLYPROC;指令执行时间指令执行时间MOVBL,10;4TDELAY:

MOVCX,2801;内循环延时内循环延时10ms4TWAIT:

LOOPWAIT;17TOR5TDECBL;3TJNZDELAY;16TOR4TRET;20TSOFTDLYENDPt=410(4(28011712)316)1220TTT:

CPUCPU的时钟周期,设的时钟周期,设TT210S210S例例.冒泡排序算法冒泡排序算法程序程序

(1)p数组排序问题通常采用数组排序问题通常采用冒泡排序算法冒泡排序算法p例例.n设:

有一个字数组,设:

有一个字数组,p首地址:

首地址:

ARRAYp长度:

长度:

COUNTn要求:

编程按照从大到小的次序排列数组中的数要求:

编程按照从大到小的次序排列数组中的数冒泡排序算法的程序框图冒泡排序算法的程序框图COUNT1COUNT1:

外循环次数外循环次数COUNT2COUNT2:

内循环次数内循环次数ii:

数组下标数组下标若初始数据是反序的若初始数据是反序的

(1)需要进行)需要进行n-1趟排序;趟排序;

(2)每趟排序要进行)每趟排序要进行n-i次次比较比较(1in-1);(3)在这种情况下,比较)在这种情况下,比较达到最大值:

达到最大值:

(n-1)/2。

程序清单如下:

程序清单如下:

DSEGSEGMENTDSEGSEGMENTARRAYARRAYDDWWd1d1,d2d2,d3d3,dndnCOUNTCOUNTCOUNTCOUNTEQUEQUEQUEQU($($($($ARRAY)/2ARRAY)/2ARRAY)/2ARRAY)/2;数据个数数据个数数据个数数据个数DSEGENDSDSEGENDSCSEGSEGMENTCSEGSEGMENTASSUMECS:

CSEG,DS:

DSEGASSUMECS:

CSEG,DS:

DSEGSTART:

START:

MOVAX,DSEGMOVAX,DSEGMOVDS,AXMOVDS,AXMOVCX,COUNTCOUNT;内循环变量存于内循环变量存于CX中,中,DECCX;初值为初值为N-1LOP1:

MOVDI,CX;外循环变量存外循环变量存DI中中,初值为初值为N-1MOVBX,0;地址指针预置为地址指针预置为0LOP2:

MOVAX,ARRAYBX;取相邻两数比较取相邻两数比较CMPAX,ARRAYBX+2JGECTIN;若符合排列次序若符合排列次序,转移转移XCHGAX,ARRAYBX+2;若不符合排列次序若不符合排列次序,二数交换二数交换MOVARRAYBX,AX;存大数存大数CTIN:

ADDBX,22;修改地址指针修改地址指针LOOPLOP2;若一遍未比较完若一遍未比较完,继续继续MO

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

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1