- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
                        查看更多
                        
                    
                第章C汇编语言程序设计
                    4.1  汇编语言程序设计概述 4.2  单片机汇编语言程序设计的基本结构形式 4.2.2  分支程序 (a)使用多条CJNE指令,通过逐次比较,实现分支程序转移 (b)使用查地址表方法实现多分支程序转移* (c)使用查转移指令表的方法实现多分支程序转移 (d)通过堆栈操作实现多分支程序转移* 4.2.3  循环程序 4.3  MCS-51单片机汇编语言程序设计举例 4.4  MCS-51汇编语言的伪指令 4.5  单片机汇编语言源程序的编辑和汇编 补充内容:子程序结构  4.3.5  数据极值查找程序*     极值查找就是在给定的数据区中找出最大值或最小值。     例:内部RAM 20H单元开始存放8个无符号8位二进制数,找出其中的最大数。     极值查找操作的主要内容是进行数值大小的比较。假定在比较过程中,以A存放大数,与之逐个比较的另一个数放在2AH单元中。比较结束后,把查找到的最大数送2BH中。     程序流程框图如图所示:     程序清单:      返回         MOV    R0,   #20H;  数据区首址         MOV    R7,   #08H;  数据区长度         MOV    A,    @R0;   读第一个字节         DEC    R7;                 LOOP: INC    R0;                       MOV    2AH,  @R0;   读下一个数         CJNE   A,    2AH,  CHK;  数据比较     CHK: JNC    LOOP1;              A值大转换         MOV    A,    @R0;         大数送A;  LOOP1: DJNZ   R7,   LOOP;        继续          MOV    2BH,  A;           极值送2BH单元   HERE: AJMP   HERE;               结束  返回  4.3.6  数据排序程序 (1)算法说明:     冒泡法是一种相邻数互换的排序方法,执行时从前向后进行相邻数比较,如数据的大小次序与要求顺序不符合(逆序),就将两个数互换,否则为正序不互换。         为进行升序排列,应通过这种相临数呼唤方法,使小数镶嵌移,大数向后移。如此从前向后进行一次冒泡(相邻数互换),就会把最大数换到最后;再进行一次冒泡,就会把次大数排在倒数第二的位置;………。以此下去,即可完成排序。     注意:     a)如有N个数排序,每次冒泡需比较(N-1)次。     b)对于N个数,理论上应进行(N-1)次冒泡,才能完成      排序,但实际上常常不到(N-1)次就已排好序。     c)控制排序结束常使用设置互换标志的方法,以其状态表示在一欠冒泡中有无数据互换进行。    例:假定8个数据连续存放在20H为首地址的内部RAM单元中,使用冒泡法进行升序排序编程。设R7为比较次数计数器,初始值为07H,TR0为冒泡过程中是否有数据互换的状态标志,TR0=0表示无互换发生,TR0=1表明有互换发生。    解:8个数据按升序排列,程序流程框图如图所示:         ORG    8000H    SORT:MOV    R0,   #20H;  数据区首址         MOV    R7,   #07H;  各次冒泡比较次数         CLR    TR0;          互换标志清零   LOOP:MOV    A,   @R0;    取前数         MOV    2BH, A;      存前数         INC    R0;                               MOV    2AH, @R0;    取后数         CLR    C;                               SUBB   A,   @R0;    前数减后数         JC     NEXT;         前数小于后数不互换         MOV    @R0, 2BH;                     DEC    R0;                              MOV    @R0, 2AH;    二个数变换拉置         INC    R0;           准备下一次比较         SETB   TR0;          置互换标志   NEXT: DJNZ   R7,  LOOP;   返回,进行下一次比较        
                 原创力文档
原创力文档 
                        

文档评论(0)