汇编语言程序设计3

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1本次课主要教学内容循环程序基本结构和控制方法典型循环程序的设计实例分析实验安排第6章汇编语言程序设计2第6章6.4循环程序结构和程序设计1.循环程序基本结构(1)初始化:设置循环程序初始状态。(2)循环体:重复执行的操作。(3)参数修改:计数器值、操作数地址指针等相关信息的变化。(4)循环控制:选择恰当条件控制循环的运行和结束。32.循环的控制方法(1)计数控制法:循环次数N已知。正计数法——计数器从1计数到N;倒计数法——计数器从N减数到0。第6章4(2)条件控制法:循环次数N预先不能确定,只能通过测试循环过程中某特定条件是否成立来决定循环的继续执行。(3)混合控制法:前两种控制方法的结合。结束循环的条件是已达到预定的循环次数或出现某种退出循环的条件。第6章5第6章3.单循环程序设计程序中只需一个循环过程即可完成规定操作。【例6.13】设计程序完成求1~100的累加和,结果送RESULT单元。循环次数已知,可采用计数控制方法。程序中用递增计数法实现求累加和。6DATASEGMENTRESULTDW?;定义结果保存单元CNEQU100;预置计数器终值DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA;初始化DSMOVDS,AXMOVAX,0;累加器清0MOVCX,1;计数器初值为17LP:ADDAX,CX;求累加和INCCX;计数器加1CMPCX,CN;CX和计数终值比较JBELP;低于或等于转LPMOVRESULT,AX;结果送内存单元MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编结束(6-13.asm)8【例6.16】数据段以BUF为首地址区域,存放CN个带符号字节数据,要求将其中正数送入PLUS存储区,负数存入MINUS存储区。DATASEGMENTBUFDB12,-15,0,9,-7,-25DB-65,34,2,11,-1,-2,4,8CNEQU$-BUF;计数值PLUSDBCNDUP(?);正数单元MINUSDBCNDUP(?);负数单元DATAENDS9CODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA;初始化DSMOVDS,AXMOVSI,OFFSETBUF;SI指向数据地址MOVDI,OFFSETPLUS;DI指向正数首址MOVBX,OFFSETMINUS;BX指向负数首址MOVCX,CN;循环次数送CX10LP:MOVAL,[SI];取源操作数送ALTESTAL,80H;测试AL中数的正负JZBIG;为正数转BIGMOV[BX],AL;否则AL送负数区INCBX;负数区地址指针加1JMPNEXT;无条件转NEXTBIG:MOV[DI],AL;AL内容送正数区INCDI;正数区地址指针加1NEXT:INCSI;原始数据区地址指针加1LOOPLP;(CX)-1≠0转LPMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编结束(6-16.asm)11【例6.17】编写程序完成求1+2+3+……N的累加和,直到累加和超过1000为止。统计被累加的自然数的个数送CN单元,累加和送SUM单元。第6章12DATASEGMENTSUMDW?;预留结果单元CNDW?;预留计数单元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;初始化DSMOVDS,AXMOVAX,0;AX初始化为0MOVBX,0;BX初始化为013LP:INCBX;BX内容加1ADDAX,BX;求累加和CMPAX,1000;与终值比较JBELP;≤1000转LPMOVSUM,AX;最后的累加和送内存MOVCN,BX;计数结果送内存MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编结束(6-17.asm)14【补充】内存BUF单元存放10个无符号字节数据,找出其中最大数保存在AL寄存器中。从3个方面考虑:(1)确定数组中数据起始地址,采用地址指针的变化进行指向。(2)设定循环结构初始入口、循环体、判断条件等。(3)已知循环次数,计数判断,用LOOP指令实现规定功能。15DATASEGMENTBUFDB12H,35H,61H,01H,52HDB8AH,9FH,10H,2BH,3FHCNEQU$-BUF;定义数组指针变量DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETBUF;取数组偏移地址MOVCX,CN;取数据个数DECCX;计数器减1MOVAL,[BX];取第1个数据INCBX;内存地址加116LP:CMPAL,[BX];两数比较JANEXT;高于转NEXTMOVAL,[BX];保存大数在ALNEXT:INCBX;地址加1,取下一个数LOOPLP;(CX)-1≠0,转LPMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;汇编结束(B1.asm)17【例6.18】NUM单元起存有10个无符号字节数据,要求找出其中最大数和最小数,分别存入MAX和MIN单元。先取第一个数据,将它作为最大数和最小数分别存入AH和AL中,取第二个数据,分别与最大数和最小数比较,如比AH大则送AH中;若比AL小则送AL中。再读取第三个数重复上述过程,共需比较9次。18DATASEGMENTNUMDB15,23,12,28,120DB10,7,0,45,67CNEQU$-NUM;设置计数器MAXDB?;最大数预存单元MINDB?;最小数预存单元DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODE19START:MOVAX,DATAMOVDS,AXMOVSI,0;SI指针初始化MOVCX,CN;循环次数送CXMOVAH,NUM[SI];第一个数送AHMOVAL,NUM[SI];第一个数送ALDECCX;CX值减1LP:INCSI;指针加1CMPAH,NUM[SI];AH和下一个数比较JAEBIG;高于或等于转BIGMOVAH,NUM[SI];将该数送AH20BIG:CMPAL,NUM[SI];AL和下一个数比较JBENEXT;低于或等于转NEXTMOVAL,NUM[SI];将该数送ALNEXT:LOOPLP;(CX)-1≠0转LPMOVMAX,AH;保存最大值MOVMIN,AL;保存最小值MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART(6-18.asm)21第6章4.多重循环程序设计一个循环体中又出现另一个循环操作即为多重循环,也称循环嵌套。注意:(1)内循环须完整地包含在外循环中,循环可嵌套和并列,但内外循环不能交叉;22(2)可从内循环直接跳到外循环,但不能从外循环直接跳到内循环;(3)无论是内循环还是外循环,都不要使循环回到初始化部分,否则将出现死循环;(4)每次完成外循环再次进入内循环时,初始条件必须重新设置。第6章23【补充例题】从键盘输入3~9之间的数字,用“*”号组成三角形图案如输入数字7,屏幕上显示以下图案:****************************可采用双重循环,外循环控制行数,内循环控制列数。24CODESEGMENTASSUMECS:CODESTART:MOVAH,01H;键盘输入1个数字至ALINT21HCMPAL,33H;与数字3比较JBSTART;低于转CMPAL,39H;与数字9比较JASTART;高于转SUBAL,30H;ASCII码转换为数字MOVCL,AL;保存至AL中MOVCH,0;CH清0MOVDL,0DH;输出回车MOVAH,02HINT21HMOVDL,0AH;输出换行INT21H25AA:PUSHCX;保存循环次数BB:MOVDL,‘*’;输出“*”MOVAH,02HINT21HLOOPBB;内循环MOVDL,0DH;输出回车INT21HMOVDL,0AH;输出换行INT21HPOPCXLOOPAA;外循环EXIT:MOVAH,4CHINT21HCODEENDSENDSTART(BB.ASM)26思考:在本例基础上,若要在屏幕上显示出以下图案,应如何设计程序?*************************************27【例6.19】数据段中有一组带符号数据,从NUM单元开始存放,编程实现将它们按从小到大顺序排序。排序后依然放在原来存储区。逐次比较法:将第一个数与后面N-1个数逐一比较,如后面数小于第一个数,则互换位置,否则第一个数继续与下一个数进行比较。经过N-1次比较后,最小数放到第一个存储单元。28然后从第二个数开始,将它与其后N-2个数逐一比较,经N-2次比较后,第二个最小值被放到第二个存储单元……依次类推,可实现数据升序排列。排序算法可用双重循环结构实现:内循环执行一次,完成一次比较;外循环执行一次,得到一个最小数。外循环执行N-1次,可完成数据升序排列。第6章29DATASEGMENTADB9,-1,3,7,-9DB0,-3,-5,1,5CNEQU$-ADATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,0;指针SI初始化MOVCX,CN-1;循环次数送CX30LP1:MOVDI,SI;保存中间结果INCDI;地址加1PUSHCX;CX入栈,保存中间值MOVAL,A[SI];取数据到AL中LP2:CMPAL,A[DI];两数比较JLENEXT;小于或等于转NEXTXCHGAL,A[DI];否则交换两数MOVA[SI],AL;结果送内存第6章31NEXT:INCDI;DI指针调整LOOPLP2;CX-1不为0转LP2INCSI;SI指针调整POPCX;CX出栈LOOPLP1;CX-1不为0转LP1MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART;汇编结束(6-19.asm)32思考:本题若要求将排序好后的数据存放在另一个规定的存储区,即不占用原来的存储区,应如何处理?33完成《学习与实验指导》中的相关实验;验证课本上的相关程序;验证本次课讲的例题;自行编程。1.实验内容与要求上机实验34上机实验2.实验时间本周五的1单元。上午8:00-9:453.上机地点软件2实验室354.实验报告本次实验完成后每人写出一份完整程序的实验报告,包括实验目的、内容、过程、结果(窗口截图)、总结、体会和收获等。第7周周五前上交实验报告电子稿发至邮箱:yl001@nciae.edu.cn上机要求36本次课内容到此结束谢谢!第6章

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功