首页 第5章汇编语言程序设计(9)ppt课件

第5章汇编语言程序设计(9)ppt课件

举报
开通vip

第5章汇编语言程序设计(9)ppt课件《汇编语言与微机原理》幻灯片制作:周贵德课程讲授:周贵德第5章汇编语言程序设计一般说来,编制一个汇编语言程序的步骤如下:(1)分析题意确定算法。这一步是能否编制出高质量程序的关键,因此拿到题应该仔细地分析和理解题意,找出合理的算法及适当的数据结构,不应当急于的去写程序。(2)建立数学模型将一个问题用数学形式表达出来。(3)确定算法根据问题的特点,寻找、总结、选择合适的算法。(4)根据算法画出程序框图。这点对初学者特别重要,这样做可以减少出错的可能性。画图可以从粗到细把算法逐步地具体化。(5)编写程序,上机调试程序。...

第5章汇编语言程序设计(9)ppt课件
《汇编语言与微机原理》幻灯片制作:周贵德课程讲授:周贵德第5章汇编语言程序设计一般说来,编制一个汇编语言程序的步骤如下:(1)分析题意确定算法。这一步是能否编制出高质量程序的关键,因此拿到题应该仔细地分析和理解题意,找出合理的算法及适当的数据结构,不应当急于的去写程序。(2)建立数学模型将一个问题用数学形式表达出来。(3)确定算法根据问题的特点,寻找、总结、选择合适的算法。(4)根据算法画出程序框图。这点对初学者特别重要,这样做可以减少出错的可能性。画图可以从粗到细把算法逐步地具体化。(5)编写程序,上机调试程序。(6)整理资料,投入使用。5.1顺序结构程序结构有3种:顺序、分支、循环顺序程序设计,又叫直接程序设计。是从第一条指令开始,按其自然顺序,一条指令一条指令地执行,在运行期间,CPU既不跳过某些指令,也不重复执行某些指令,一直执行到最后一条指令为止。例5.1当X=5时,求多项式3X4+5X3+6X2+4X+2的值Y。将多项式改写为:Y=(((3X+5)X+6)X+4)X+2程序如下:5.2.1分支程序设计概述分支程序结构可以有两种形式,如图所示5.2分支结构例5.2从键盘输入一位数字,判断其奇偶性,输出一个标志(0,1)。1.键盘输入一个字符:MOVAH,01HINT21H2.判断奇偶:RCRAL,1JCEVN3.输出一个字符MOVAH,02HMOVDL,’’INT21H打开本题5.2分支结构5.2.2转移指令1、无条件转移指令指令的一般格式:JMPOPRD包括:直接转移、间接转移分为短程(SHORT)、近程(NEAR)和远程、(FAR)3种形式2、条件转移指令JXX<标号>30条5.2.3分支结构程序设计DA1DA2DA2DA1由低开始搬(第一个开始)SI,DI要自动加由高开始搬(最后开始)SI,DI要自动减程序讲新指令:REPMOVSW5.2.3分支结构程序设计转移地址入口:SUB1SUB2……SUBn1)用跳转表实现多路分支SUB1HSUB2LSUB2HSUB3LSUB3H┆SUB1L首地址BASE表地址=表首地址+偏移量偏移量=(k-1)*2k=1,2,3……..n例5.9表地址SUBnHSUBnHMOVBX,OFFSETBASE1)用跳转表实现多路分支表首址BASE表地址表地址=表首地址+偏移量偏移量=(k-1)*3k=1,2,3……..n例5.10例5.10RSUB1LSUB1HE9SUB2LSUB2H┇E9SUBnLSUBnHE9JMPSUB1JMPSUB2E9SUB3HSUB3H对前面的跳转表加以修改,在跳转表的每一个关键字或指令前开辟一个关键字单元,存放与关键字或指令有关的关键值。例5.11一个包含8个子程序的主程序,从外设端口读入一个字节,读入的字节与那个子程序的关键字相同,就调用那个子程序。8个子程序的关键字是:0000000100000010000001000000100000010000001000000100000010000000例5.112)跟据关键字实现多路分支5.3循环结构程序设计5.3.1循环程序设计概述有时我们会需要“能按一定规律,多次重复执行”的一串语句,这类程序叫循环程序。循环的控制方法有两种:计数控制和条件控制。①计数控制当循环次数已知时,通常使用计数控制法。假设循环次数为n,常常用以下两种方法实现计数控制:先将循环次数n送入循环体计数器中,然后,每循环一次,计数器减1,直至循环计数器中的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 为0时结束循环。如:MOVCX,n;循环初值部分…LOOPA:…;循环体部分…;修改部分DECCX;控制部分JNZLOOPA:其中工作部分、修改部分被重复执行n次,即当(CX)=n,n-1,…,1时,重复执行循环体,当(CX)=0时,结束循环。5.3循环结构程序设计先将循环次数的负值送入循环计数器中,然后每循环一次,计数器加1,直至计数器中的内容为零时结束循环。例如: MOV CX,-n…    ;循环初值部分LOOPA:…    ;工作部分…    ;修改部分INC CX  ;控制部分JNZLOOPA其中工作部分、修改部分被重复执行n次,即当(CX)=-n,-(n-1),…,-1时重复执行,当(CX)=0时结束循环。5.3循环结构程序设计②条件控制有些情况下,循环次数事先无法确定,但它与问题的某些条件有关。这些条件可以通过指令来测试。若测试比较的结果表明满足循环条件,则继续循环,否则结束循环。[例]:统计AX寄存器中1的个数,并将结果存放在CL寄存器中。…MOVCL,0L:ANDAX,AXJZEXIT;循环结束条件:AX=0SALAX,1;将AX中的最高位移入CF中JNCL;如果CF=0,转LINCCL;如果CF=1,则(CL)+1→CLJMPL;转L处继续循环EXIT:…5.3循环结构程序设计循环程序一般由四个部分组成:(1)循环初值部分:这是为了保证循环程序能正常进行循环操作而必须做的准备工作。循环初值分两类:一类是循环工作部分的初值,别一类是控制循环结束条件的初值。(2)工作部分:即需要重复执行的程序段。这是循环的中心,称之为循环体。(3)修改部分:按一定规律修改操作数地址及控制变量,以便每次执行循环体时得到新的数据。(4)控制部分:用来保证循环程序按规定的次数或特写条件正常循环。例5.12用循环方法改写例5.1(P88)5.3.2循环控制与串操作指令1.循环控制指令6条8086/8088指令系统专门设计了几条循环控制指令,用于使一些程序段反复执行,形成循环程序。指令格式功能LOOPLOOP<标号>CX←(CX)-1,(CX)≠0,循环=deccxjnz<标号>LOOPZLOOPZ<标号>ZF=1,CX←(CX)-1,(CX)≠0,循环LOOPELOOPE<标号>””LOOPNZLOOPNZ<标号>ZF=0,CX←(CX)-1,(CX)≠0,循环LOOPNELOOPNE<标号>””JCXZJCXZ<标号>CX=0,转以上<标号>都是短标号:(-128~127)+2即:-126~1295.3.2循环控制与串操作指令2.串操作指令串操作指令的操作对象不是单个的字节或字,而是内存中连续存放的字节串或字串。在每次基本操作后,可自动修改地址,为下一次操作做好准备。串操作指令还可以加上重复前缀,此时指令规定的操作将一直重复下去,直到完成预设的重复次数。串操作指令共有5类15条5.3.2循环控制与串操作指令表5-6串操作指令格式与功能指令格式功能MOVSMOVSDST,SRC①[DI]←[SI]串传送MOVSB隐含②SI←(SI±1),DI←(DI±1)MOVSW隐含SI←(SI±2),DI←(DI±2)DF=0+DF=1-SI→DI→LODSLODSSRC①AL←[SI]或AX←[SI]串装载LODSB隐含②SI←(SI±1)LODSW隐含SI←(SI±2)DF=0+DF=1-5.3.2循环控制与串操作指令SI→STOSSTOSDST①AL→[DI]或AX→[DI]串存储STOSB隐含②DI←(DI±1)STOSW隐含DI←(DI±2)DF=0+DF=1-AL(AX)送→5.3.2循环控制与串操作指令DI→CMPSCMPSSRC,DST①[SI]-[DI]串比较CMPSB隐含②SI←(SI±1),DI←(DI±1)CMPSW隐含SI←(SI±2),DI←(DI±2)DF=0+DF=1-影响标志位:SF,ZF,AF,PF,CF,OF-5.3.2循环控制与串操作指令SI→DI→SCASSCASDST①AL-[DI]或AX-[DI]串扫描SCASB隐含②DI←(DI±1)SCASW隐含DI←(DI±2)DF=0+DF=1-影响标志位:SF,ZF,AF,PF,CF,OFAL(AX)-重复前缀REPE/REPZREPNE/REPNZ以上5种串操作指令必然考试,不管什么考试5.3.2循环控制与串操作指令DI→[例5.14]串传送指令示例。以下是合法的串传送指令:REPMOVSDATA2,DATA1;操作数类型应预先定义MOVSBUFFER2,ES:BUFFER1;源操作数进行段重设REPMOVSWORDPTR[D1],[S1];用变址寄存器表示操作数REPMOVSB字节串传送MOVSW字串传送但以下表示方法是非法的:MOVSBDEST,ES:SRC;不能指定操作数5.3.2循环控制与串操作指令[例5.15]将数据段中首地址为BUFFER1的200B传送到附加段首地址位BUFFER2的内存区中。使用字节串操作传送指令的程序段如下:LEASI,BUFFER1;SI<—源串首地址指针LEADI,BUFFER2;DI<—目的串首地址指针MOVCX,200;CX<—字节串长度CLD;清方向标志DFREPMOVSB;传送200BHLT停止REPMOVSB执行后,SI的值是多少?5.3.2循环控制与串操作指令[例5.16]内存中以BUFFER为首地址的缓冲区有10个非压缩型BCD码形式存放的十进制数,它们的值可能是0~9中的任意一个,将这些十进制数顺序显示在屏幕上。根据题意可编程如下:LEASI,BUFFER;SI←缓冲区首址MOVCX,10;CX←字符串长度CLD;清状态标志位DFMOVAH,02H;AH←功能号GET:LODSB;用串装入指令取1个BCD码到ALORAL,30H;BCD码转换为ASCII码MOVDL,AL;DL←字符INT21H;显示DECCX;CX←(CX)-1JNZGET;未完成10个字符则重复HIT5.3.2循环控制与串操作指令[例5.17]用STOS指令将字符“#”装入以AREA为首地址的100B中。LEADI,AREAMOVAX,’##’MOVCX,50CLDREPSTOSWHLT以上程序采用了送存50个字而不是送存100B的方法,虽然这两种方法执行的结果相同,但上面的程序执行的速度要更快一些。5.3.2循环控制与串操作指令[例5.18]比较2个字符串,找出其中第一个不相等字符的地址。如果2个字符串全部相同,则转到ALLMATCH进行处理。这两个字符串长度均为20,首地址分别为STRING1和STRING2。LEASI,STRING1LEADI,STRING2MOVCX,20CLDREPECMPSB;CMPSB停止重复有2种可能,1.CX=0,2.NEJCXZALLMATCH;CX=0则全相等DECSI;第一个不相同的字符的地址,存入SI、DIDECDI;(NE停止,SI、DI自动+1,所以要–1)HLTALLMATCH:MOVSI,0MOVDI,0HLT5.3.2循环控制与串操作指令[例5.19]在包含100个字符的字符串中寻找第一个回车符CR(其ASCII码为0DH),找到后将其地址保留在(DS:DI)中,并在屏幕上显示字符“Y”。如果字符串中没有回车符,则在屏幕上显示“N”。该字符串的首地址为STRING。根据 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 可编程如下:LEADI,STRINGMOVAL,0DHMOVCX,100CLDREPNESCASB;不相等,继续比较JZMATCH;停止比较有两种可能:1是相等,2是CX=0;相等则转MOVDL,‘N‘;不相等执行该段JMPDSPYMATCH:DECDIMOVDL,'Y'DSPY:MOVAH,02HINT21HHLT5.3.2循环控制与串操作指令常用的循环控制方法有:计数器控制法、条件控制法、逻辑尺控制法等。其中,计数器控制法适用于循环次数已知的情况;条件控制法适用于循环次数未知的情况;逻辑尺控制法适于做特殊的处理。下面通过单重循环例子来讲述各种控制方法1.单重循环[例5.20]从X单元开始的30个连续单元中存放有30个无符号数,从中找出最大者送人Y单元中。分析:根据题意,可把第一个数先送人AL寄存器中,将AL中的数与后面的29个数逐个进行比较。如果AL中的数较小,则两数交换位置;如果AL中的数大于等于相比较的数,则两数不交换位置。在比较过程中,AL中始终保持较大的数,比较29次,则最大者必在AL中,最后把AL中的数(最大者)送入Y单元。这个问题的特点是循环比较的次数是已知的,因此可以用计数器控制循环。其流程如图5.8所示,程序编写如下:5.3.3循环程序设计5.3.3循环程序设计[例5.21]从自然数1开始累加,直到累加和大于500为止,统计被累加的自然数的个数,并把统计的个数送人单元N中,把累加和送人单元SUM单元。分析:根据题意,被累加的自然数的个数是未知的(即循环的次数是未知的),因此不能用计数器的方法来控制循环。但题目中给定一个条件,累加和大于500则停止累加,因此可用条件来控制循环。由于自然数数列的个数n和第n项之值一致,我们可用BX寄存器产生自然数的各项,也就获得了统计个数;用AX寄存器存放累加和。程序如下:5.3.3循环程序设计[例5.22]设有两个函数:Y=X+5,F=F-27根据某种需要,函数Y计算5次,函数F计算3次,且计算的次序为:Y计算2次,F计算1次,Y计算1次,F计算1次,Y计算1次,F计算1次,最后Y再计算1次。X的初值为15,每计算Y1次,X的值增2;F的初值为175。第一个函数计算出的5个函数值存放在由y单元开始的5个连续单元中;第二个函数计算出的3个函数值存放在由F单元开始的连续3个单元中。分析:根据题意,由计算y和F的顺序,可以设计一个逻辑尺:11010101,将其存放在DL中,其中l表示计算y,0表示计算F,然后利用算术左移指令SAL,根据有无进位,决定是计算y还是计算F,若每次左移1次,则移位次数共8次。程序编写如下:5.3.3循环程序设计2.多重循环多重循环又称为循环的嵌套,即循环之内套循环。多重循环程序设计的方法和单重循环程序设计的方法是一致的。但多重循环在具体实现时的处理比单重循环复杂得多。多重循环实现时,应该仔细考虑各重循环的控制条件及其采用的方法,相互之间不可混淆。在使用多重循环时必须注意以下几点:(1)内循环必须完整地包含在外循环内,内外循环不能相互交叉。(2)内循环在外循环中的位置可根据需要任意设置,但应避免出现混乱。(3)多个内循环可以拥有同一个外循环,这些内循环间的关系可以是嵌套的也可以是并列的。(4)程序可以从内循环中直接跳到外循环,但不能从外循环直接跳到内循环中。(5)当通过外循环再次进入内循环时,内循环中的初始条件必须重新进行设置。5.3.3循环程序设计[例5.23]设有4个学生参加5门课的考试,其中4名学生的各课成绩存放在字数组CHENGJI中,计算各门课程的平均成绩(要求把各门课程的平均成绩存人字数组AVERAGE中)。语文数学外语物理化学学生16878857283学生27283889178学生39991887677学生47677808785根据题意,可编写程序如下:修改5.3.3循环程序设计请思考:在做16位除法运算时,被除数的高、低分别存放在DX、AX中,但在此例中,除数却使用了寄存器DL,为什么可行?当学生人数增加到一定数量,每门课的总成绩大于65535时,DX就必须存放累加和的高位数据,才能用除法指令求得平均数。此时,程序从标号L2:开始的6条语句就必须做如下修改:MOVDX,0;L2:ADDBX,10ADDAX,[BX]JNCLOP1;这句可以不要,要它只是为了有时候可跳过ADCADCDX,0LOP1:LOOPL2MOVCX,nDIVCXMOV[DI],AX5.3.3循环程序设计[例5.24]设有1个字节数组N,每个字节中存放1个无符号十六进制数,试用相邻交换法将N个数据按降序排列。分析:相邻交换排序算法的基本方法,从第一个数开始,依次对相邻两个数进行比较,若次序对,则不做任何操作;若次序不对,则将两个数交换位置。由表5—7可知,经过一趟N—1次比较后,最小的数已经到了最下面;第二趟,再对前面的N—1个数据做如上操作,次小的数已经到了最后第二位;……;第N—l趟,将最前面的两个数据做比较,并决定是否交换。这样就可以完成排序。若其中某一趟数组内的数据未做任何交换,则说明排序已经完成,不必再进人下一趟操作。5.3.3循环程序设计5.3.3循环程序设计表格5-7相邻交换排序算法示例序号数趟12345188567575265675565635675454545475459954598696程序如下:
本文档为【第5章汇编语言程序设计(9)ppt课件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
poope
暂无简介~
格式:ppt
大小:468KB
软件:PowerPoint
页数:39
分类:
上传时间:2023-03-26
浏览量:10