用汇编语言程序设计实现c=a b,第章C汇编语言程序设计.ppt

第章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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值