c语言 proteus 延迟2秒_几种延时的汇编执行代码对比与总结
拜读了网上《51单片机 Keil C 延时程序的简单研究 》(by: InfiniteSpace Studio/isjfk, 1.21.2004 )一文,借鉴了文中的方法,测试发现有一点点出入,原文作者在计算延时时间的时候是否忘了加上RET指令……下面介绍我的测试结果,欢迎交流探讨——
一、单独定义变量,for语句
28: delay1(1);
C:0x0005 7F01 MOV R7,#0x01
C:0x0007 1121 ACALL delay1(C:0021)
12: void delay1(unsigned char k)
13: {
17: unsigned char i=0;
C:0x0021 E4 CLR A
C:0x0022 FE MOV R6,A
18: for(i=0;i0;i--);相同
C:0x0023 EE MOV A,R6
C:0x0024 C3 CLR C
C:0x0025 9F SUBB A,R7
C:0x0026 5003 JNC C:002B
C:0x0028 0E INC R6
C:0x0029 80F8 SJMP C:0023
19: }
C:0x002B 22 RET
分析:
delay1(1); 410-390=20
delay1(2); 439-411=28
delay1(3); 476-440=36
即:指令周期(即实际延时)= 12 + 延时参数 * 8
二、不再重新定义变量,for语句
28: delay1(1);
C:0x0005 7F01 MOV R7,#0x01
C:0x0007 1123 ACALL delay1(C:0023)
12: void delay1(unsigned char k)
13: {
18: for(;k>0;k--);
C:0x0023 EF MOV A,R7
C:0x0024 D3 SETB C
C:0x0025 9400 SUBB A,#0x00
C:0x0027 4003 JC C:002C
C:0x0029 1F DEC R7
C:0x002A 80F7 SJMP delay1(C:0023)
19: }
C:0x002C 22 RET
分析:
delay1(1); 491-473=18
delay1(2); 518-492=26
指令周期(即实际延时)= 10 + 延时参数 * 8
对比一和二可知,延时函数中有重新定义循环变量i时,理所当然地多了2行代码
不知原文中 “其生成的代码是一样的。”的结论是如何得来的?
三、for语句,改变循环结束条件
23: delay1(1);
C:0x0005 7F01 MOV R7,#0x01
C:0x0007 1123 ACALL delay1(C:0023)
11: void delay1(unsigned char i)
12: {
13: // while(--i);
14: // while(i--);
15: for(; i != 0; i--);
C:0x0023 EF MOV A,R7
C:0x0024 6003 JZ C:0029
C:0x0026 1F DEC R7
C:0x0027 80FA SJMP delay1(C:0023)
c语言 proteus 延迟2秒_几种延时的汇编执行代码对比与总结相关推荐
- c语言 proteus 延迟2秒_周周练 | 专升本C语言
回复[英语]获取历年英语试题汇编回复[领书]获取专升本备考图书回复[三级]获取英语三级模拟卷进社群领资料:1128172173同学们好,本周我们开始进行专业课习题练习~ 单选题 1.在C语言中,以下正 ...
- c语言随机延迟5-10秒,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define B break void de(int timee) { unsi ...
- 语言做的表白魔方_程序员表白教程,这些代码用过的都说浪漫
作为一名程序员,如何用自己的技术向喜欢的人表白? 这篇程序员表白教程,可以让你创造出不一样的浪漫! 你值得拥有! 1. I Love You Batch le 不如送她一个惊喜? 让她的电脑自动关机, ...
- python读取mysql数据每次都耗时600秒_就是这么流弊!三行Python代码,让数据处理速度提高2到6倍...
幸运的是,Python 库中内建了一些隐藏的特性,可以让我们充分利用所有 CPU 核心的能力.通过使用 Python 的 concurrent.futures 模块,我们只需要 3 行代码就可以让一个 ...
- pyqt漂亮gui界面模板_一种基于模板的C代码自动生成方法
在做C代码项目的时候,我们期望做到代码的高复用,高复用意味着代码的高配置性,即通过简单的配置修改达到复用代码的目的.如果代码高复用,支持灵活的配置,那么完全可以在上边做一个更简单的配置工具,用来修改代 ...
- C语言:计算阶乘与计算从1加到100的代码对比:都要用到3个变量,不同之处在于表达式
计算1 到 100 之间所有整数之和 #include <stdio.h> int main() {int i=1,total=0;while(i<=100)//不能在 while ...
- 单片机设置12分频c语言,AT89C51单片机,如何实现延迟一秒
满意答案 爱在身边lovely 2013.09.07 采纳率:59% 等级:12 已帮助:7408人 其实可以用C语言实现的,先要定义好定时器的初值 不管你使用多大的晶振,使用51单片机,一般都 ...
- c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题
N个人围成一圈 - phpStudy...
详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...
- java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章
java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...
最新文章
- [恩难到了]陨石的秘密
- 【云周刊】第208期:阿里云MWC 2019发布7款重磅产品,助力全球企业迈向智能化...
- Android Stdio 里的 SQLite数据库怎么查看
- Objective-C设计模式(MVC)的实现,以及协议与委托的运用
- 6.5 Introduce Explaining Variable(引入解释性变量)
- sa结构组网方式_5G建网:先NSA还是SA?
- 基于投资组合问题的凸二次规划模型及求解——Gurobi求解器+高阶牛顿法(python)
- 达梦数据库常用管理工具简介
- Sketch 52.2 轻量易用的矢量设计工具(下载) Sketch汉化
- Excel学习日记:L9-图表制作-柱状图
- Couchbase SyncGateway
- 查找、下载芯片手册推荐网址
- 为什么百度快照没有样式
- 4.46-47访问控制4/5
- 通过线程八锁问题融会贯通synchronized关键字的使用
- 高效生成6位数字验证码代码
- 叉包舍 - PPPoE之常见拨号错误代码及处理
- 浅析dToF和iToF成像技术
- C语言程序设计第三章
- 校园网环境下通过OpenWrt软路由利用DNSPod实现QNAP NAS远程IPv4+IPv6双栈访问
热门文章
- Python——提取复数类型的数组的的实数部分和虚数部分
- English学习经典视频
- html5 倒计时跳转动画,HTML5弹性摇摆旋转的倒计时动画
- Consul + fabio 实现自动服务发现、负载均衡 1
- 台式计算机wifi老掉线,电脑连接WiFi容易断线或速度慢怎么回事 教你怎么解决
- 软件开发过程中常见漏洞的解析
- java9推迟_甲骨文宣布Java 9将会推迟到明年7月发布
- 计算机职称落户,2019有这些中级职称就可以在上海落户啦!(国家职业资格)
- Linux错误:warning: here-document at line 5 delimited by end-of-file (wanted `EOF`
- 1273:【例9.17】货币系统