




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,本次课主要教学内容分支程序设计循环程序设计实例分析实验安排,汇编语言,第4章,2,第4章,4.2.3分支结构程序设计,分支结构设计可在不同条件下处理;程序结构清晰,易于阅读及调试;程序中分支由条件转移指令完成;可根据不同转移指令产生的结果状态选择要转移程序段,处理给定问题。,3,第4章,【例1】将键盘输入的小写字母转换为大写字母显示在屏幕上。从键盘接收单个字符;判断接收的是否是小写字母,是则转换,否则不处理,保证输入字符在a和z范围;键盘输入小写字母及转换后结果显示均通过DOS功能调用。,4,源程序设计如下:CODESEGMENT;代码段定义ASSUMECS:CODESTART:MOVAH
2、,01H;DOS调用的01号功能从键盘输入字符INT21HCMPAL,a;与a的ASCII码比较JBEXIT;低于a,转EXITCMPAL,z;与z的ASCII码比较JAEXIT;高于z,转EXIT,5,SUBAL,20H;大小写字母相差20HMOVDL,AL;转换后结果送DLMOVAH,02H;DOS调用02号功能,显示结果INT21HEXIT:MOVAH,4CH;返回DOSINT21HCODEEND;代码段结束ENDSTART;汇编结束,A3.ASM,6,【例2】连续将键盘输入小写字母转为大写字母输出,字母之间用“-”号间隔。,CODESEGMENTASSUMECS:CODESTART:M
3、OVAH,01H;从键盘输入字符INT21HMOVBL,AL;保存在BL中MOVDL,-;送-号到DLMOVAH,02H;显示字符-INT21HMOVAL,BL;取回键盘输入字符CMPAL,a;与a比较JBEXIT;低于转EXIT,7,CMPAL,z;与z比较JAEXIT;高于转EXITSUBAL,20H;转换为大写字母MOVDL,AL;结果送DLMOVAH,02H;调屏幕显示INT21HMOVDL,0AH;调换行ASCII码MOVAH,02H;输出换行INT21H,8,MOVDL,0DH;调回车的ASCII码MOVAH,02H;输出回车INT21HJMPSTART;无条件转STARTEXIT
4、:MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART,A4.ASM,9,【例3】:有3个无符号字节数无序存放在BUF1开始的存储区,将其从大到小排列并存放在BUF2开始的存储区。,原理分析:3个数据分别送AL、BL、CL,在3个寄存器间比较大小,排序后依次存放在BUF2开始的存储区。,第4章,10,存储单元和寄存器分配如下:(1)BUF1为原始数据存储区首址;(2)BUF2为已排序数据存储区首址;(3)AL、BL、CL存放原始数据;(4)SI指向BUF1;(5)DI指向BUF2。,第4章,11,源程序设计如下:DATASEGMENT;数据段定义BUF1DB56H,12H
5、,78HBUF2DB3DUP(?)DATAENDSCODESEGMENT;代码段定义ASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATA;初始化DSMOVDS,AX,12,MOVSI,OFFSETBUF1;取偏移地址MOVDI,OFFSETBUF2MOVAL,SI;取内存单元中第1个数据MOVBL,SI+1;取内存单元中第2个数据MOVCL,SI+2;取内存单元中第3个数据CMPAL,BL;两数比较JAENEXT1;高于或等于转NEXT1XCHGAL,BL;否则,两数交换,13,NEXT1:CMPAL,CL;两数比较JAENEXT2;高于等于转NEXT2XCHGAL,CL
6、;否则,两数交换NEXT2:CMPBL,CL;两数比较JAENEXT3;高于等于转NEXT3XCHGBL,CL;否则,两数交换,第4章,14,NEXT3:MOVDI,AL;保存最大值MOVDI+1,BL;保存中间值MOVDI+2,CL;保存最小值MOVAH,4CHINT21HCODEENDSENDBEGIN,A5.ASM,第4章,15,第4章,4.2.4循环结构程序设计,1.循环程序基本组成(1)初始化部分:设置循环程序初始状态。(2)循环体:重复执行的操作。(3)参数修改部分:计数器值、操作数地址指针等相关信息的变化。(4)循环控制部分:选择恰当的条件来控制循环的运行和结束。,16,第4章,
7、2.单循环程序设计,【例1】编程完成求1100的累加和,结果送SUM单元。该题循环次数已知,采用计数控制方法。程序中用递增计数法实现求累加和。,17,DATASEGMENTSUMDW?;预留结果单元CNEQU100;计数终止值DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA;初始化DSMOVDS,AX,18,MOVAX,0;累加器清零MOVCX,1;置循环计数初始值LP:ADDAX,CX;求累加和INCCX;计数器加1CMPCX,CN;CX和终止值比较JBELP;小于等于转LPMOVSUM,AX;结果送SUMMOVAH,4CH;返
8、回DOSINT21HCODEENDSENDSTART;汇编结束,B1.ASM,19,【例2】求S=122232前N项和,使S值大于1000结束计算。N2可写成N个N相加的形式,采用循环实现计算平方和;判断结果是否大于1000。由于N值从1到N逐级递增,可采用计数器递增实现;设寄存器BX和DX分别保存N值及前N项和。,第4章,20,CODESEGMENTASSUMECS:CODESTART:MOVBX,0;BX保存N值,初值0MOVDX,0;DX保存前N项和LOP1:INCBX;N值递增MOVCX,BX;设置循环次数MOVAX,0;AX清0,第4章,21,LOP2:ADDAX,BX;计算N2LO
9、OPLOP2;(CX)10转ADDDX,AX;计算前N项和CMPDX,1000;判断JBELOP1;不大于转LOP1MOVAH,4CH;大于,返回DOSINT21HCODEENDSENDSTART;汇编结束,B2.ASM,22,【例3】内存BUF单元开始存放10个无符号字节数组,从中找出最大数和最小数,其值保存在内存MAX和MIN单元中。,从以下3个方面考虑:(1)确定数组中数据起始地址,采用地址指针的变化合理指向。(2)设定循环结构的初始入口、循环体、判断条件等。(3)循环次数已知,使用计数器,采用LOOP指令实现规定功能。,23,DATASEGMENTNUMDB15,23,12,28,10
10、0DB10,7,1,45,67DB6DUP(?)MAXDB?MINDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX,24,MOVSI,0;设地址指针MOVCX,10;计数初值MOVAH,NUMSI;第1个数分别送AH和ALMOVAL,NUMSIDECCX;计数器减1LP:INCSI;地址加1CMPAH,NUMSI;后数与前大数比较JAEBIG;高于等于转BIGMOVAH,NUMSI;保存大数至AH,25,BIG:CMPAL,NUMSI;后数与前数比较JBENEXT;低于等于转NEXTMOVAL,NUMSI;保
11、存小数至ALNEXT:LOOPLP;(CX)1不为0转LPMOVMAX,AH;保存最大数MOVMIN,AL;保存最小数MOVAH,4CHINT21HCODEENDSENDSTART,B3.ASM,26,第4章,3.多重循环程序设计,循环体中又出现另一个循环(循环嵌套)。(1)内循环应完整包含在外循环内,内外循环不能交叉;(2)可从内循环直接跳到外循环,但不能从外循环直接跳到内循环;(3)无论是内循环还是外循环,都不要使循环回到初始化部分,否则将出现死循环;(4)每次完成外循环再次进入内循环时,初始条件须重新设置。,27,第4章,【例4】内存BUF单元区域中存放一组无符号字节数据,编程将数据按从
12、小到大顺序排序,排序后数据仍放在原来存储区中。设计思路:将第一个数与其后N-1个数逐一比较;如前数小于后数则不做任何操作;否则两数交换位置。第一轮比较后最小数放第一个存储单元。依次类推,比较完毕后完成数据从小到大排序。,28,第4章,排序算法可用双重循环结构实现:内循环执行一次,完成一次比较;外循环执行一次,得到一个最小数。外循环执行N-1次,可完成数据升序排列。,29,DATASEGMENTBUFDB23H,09H,14H,53H,67H,89HDB4FH,20H,05H,10HCNEQU$-BUFDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:M
13、OVAX,DATA;初始化DSMOVDS,AXMOVCX,CN-1;外循环次数送CXLP1:MOVSI,0;数组起始下标0送SIPUSHCX;外循环计数器入栈,30,LP2:MOVAL,BUFSI;取数送ALCMPAL,BUFSI+1;两数比较JLENEXT;小于或等于转NEXTXCHGAL,BUFSI+1;两数交换MOVBUFSI,ALNEXT:INCSI;数组下标加1LOOPLP2;CX-1不为0转LP2POPCX;退出内循环,CX出栈LOOPLP1;CX-1不为0转LP1MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编结束,B4.ASM,31,思考:本题若
14、要求将排序好后的数据存放在另一个规定的存储区,即不占用原来的存储区,应如何处理?上机编程解决,第4章,32,【例5】从键盘输入39之间的数字,用“*”号组成三角形图案如输入数字7,屏幕上显示以下7行7列的图案:*,采用双重循环,外循环控制行数,内循环控制列数。,33,CODESEGMENTASSUMECS:CODESTART:MOVAH,01H;键盘输入1个数字至ALINT21HCMPAL,33H;与数字3比较JBSTART;低于转CMPAL,39H;与数字9比较JASTART;高于转SUBAL,30H;ASCII码转换为数字MOVCL,AL;保存至CL中,计数用MOVCH,0;CH清0MOV
15、DL,0DH;输出回车MOVAH,02HINT21HMOVDL,0AH;输出换行INT21H,34,AA:PUSHCX;保存循环次数BB:MOVDL,*;输出“*”MOVAH,02HINT21HLOOPBB;内循环MOVDL,0DH;输出回车INT21HMOVDL,0AH;输出换行INT21HPOPCX;恢复循环次数LOOPAA;外循环EXIT:MOVAH,4CHINT21HCODEENDSENDSTART,B5.ASM,35,思考:在本例基础上,若要在屏幕上显示出以下图案,应如何设计程序?*,第4章,36,(1)熟悉分支结构程序设计与操作(2)熟悉循环结构程序设计与操作(3)理解各类指令对标志位的影响(4)进一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 顺丁橡胶项目绩效评估报告
- 全脑开发项目绩效评估报告
- 平面设计岗位年中述职
- 2025西南石油大学辅导员考试试题及答案
- 2025西安建筑科技大学辅导员考试试题及答案
- 2025烟台南山学院辅导员考试试题及答案
- 2025福建警察学院辅导员考试试题及答案
- 健康体能课件
- 浙江萧然绿色发展集团有限公司招聘笔试题库2025
- 河南洛阳国创人才服务有限公司招聘笔试题库2025
- 建筑施工安全设备检测实施方案
- 建筑垃圾处置公司激励与奖励机制
- GB/T 32151.25-2024温室气体排放核算与报告要求第25部分:食品、烟草及酒、饮料和精制茶企业
- 佳能-M2-Wifi-相机说明书
- JJF 1049-2024温度传感器动态响应校准规范
- 2024年全国物业客服技能基础知识考试题库(附含答案)
- 幼儿园男性教师对幼儿性别意识发展的影响
- 食品生产加工小作坊生产规范 第4部分:粉条
- SH∕T 3097-2017 石油化工静电接地设计规范
- HJ1188-2021核医学辐射防护与安全要求
- 居间服务合同范本在线查看
评论
0/150
提交评论