C与汇编程序运行时间比较
第4章 单片机的C51语言

4.1 C51的程序结构 4.2 C51的数据结构 4.3 C51与汇编语言的混合编程 4.4 C51仿真开发环境 4.5 C51初步应用编程
第4章单片机的C51语言
51汇编语言能直接操作单片机的系统硬件,指令执行速度 快。但其程序可读性差,且编写、移植困难。
第4章单片机的C51语言
数据类型
【存储类型】
变量名
51单片机的 三个逻辑存储空间:
片内数据存储器,片外数据存储器和程序存储器。
建立C51存储类型与存储空间的对应关系
code区
xdata区
idata区
data区
bdata区
pdata 区
第4章单片机的C51语言
C51的存储类型与存储空间对应关系表
编译模式
SMALL系统
COMPACT系统 LARGE系统
注意:SFR字节地址变量的物理地址是由MCU资源决定的
第4章单片机的C51语言
sbit型
部分SFR具有位地址,如何定义与这些位地址相关的变量?
D0^7
PSW D7H
D0^6
AC
D0^5
D0^4
RS1
D0^3
RS0
D0^2
D0^1
D1H
D0^0
P
相对位地址
D0H 字节地址 绝对位地址
CY
CY
D6H
AC
32
对于“/”和“%”往往会有疑问。这两个符号都涉
及除法运算,但“/”运算是取商,而“%” 运算为取余 数。例如“5/3”的结果(商)为1,而“5%3”的结果 为2(余数)。 表3-3中的自增和自减运算符是使变量自动加1或减1, 自增和自减运算符放在变量前和变量之后是不同的。 ++i,--i:在使用i之前,先使i值加(减)1。
第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。
计算机专业研究生复试-C语言程序设计面试简答题

C语言程序设计1.简述C语⾔采取了哪些措施提⾔执⾔效率●使⽤指针:有些程序⽤其他语⽤也可以实现,但C能够更有效地实现;有些程序⽤法⽤其它语⽤实现,如直接访问硬件,但C却可以。
正因为指针可以拥有类似于汇编的寻址⽤式,所以可以使程序更⽤效。
●使⽤宏函数:宏函数仅仅作为预先写好的代码嵌⽤到当前程序,不会产⽤函数调⽤,所以仅仅是占⽤了空间,⽤使程序可以⽤效运⽤。
在频繁调⽤同⽤个宏函数的时候,该现象尤其突出。
函数和宏函数的区别就在于,宏函数占⽤了⽤量的空间,⽤函数占⽤了时间。
●使⽤位操作:位操作可以减少除法和取模的运算。
在计算机程序中数据的位是可以操作的最⽤数据单位,理论上可以⽤"位运算"来完成所有的运算和操作。
灵活的位操作可以有效地提⽤程序运⽤的效率。
●将汇编指令嵌⽤到C 语⽤程序中,汇编语⽤是效率最⽤的计算机语⽤,因此在C语⽤程序中嵌⽤汇编,从⽤充分利⽤⽤级语⽤和汇编语⽤各⽤的特点。
●系统调用:在C语⽤程序中可以调⽤操作系统级的API,从⽤提⽤程序的运⽤效率。
●条件编译:C语⽤源程序中加上条件编译,让编译器只对满⽤条件的代码进⽤编译,将不满⽤条件的代码舍弃,可以减少编译及执行程序代码量。
●循环嵌套中将较长循环设为内置循环,较短循环设为外置循环,以减少cpu跨切循环层的次数,提⽤程序的运⽤效率。
(操作系统页⽤置换相关,减少页⽤置换次数)●其它诸如寄存器变量、联合体、编译器优化等手段提⽤执⽤效率。
2.if…else和switch区别总结:都是条件选中语句。
但switch语句只能取代if语句的一部分功能。
●比较的范围不同:if 语句可做各种关系比较(只要是boolean 表达式都可以用if 判断)switch语句只能做等式比较,即只能对基本类型进行数值比较。
(switch只能做几个数据类型的等式比较,实现非等式效率低,)switch之后括号内的表达式只能是整型(byte、short、char和int)、枚举型或字符型表达式,不能是长整型或其他任何类型。
c语言ppt

2
教学目标: • 了解计算机程序和语言的概念; • 了解C语言的基本构成; • 掌握C程序的运行步骤。 本章重点: • 计算机程序和计算机语言的概念;程序设计的基 本任务;C语言程序的基本构成;运行C程序的步 骤和方法。 本章难点: • C语言程序的基本构成;运行C程序的步骤和方法。
《程序设计基础(C语言)》
《程序设计基础(C语言)》
10
• 编译方式使用编译程序(编译器)。在应用程序 执行之前,就将程序源代码翻译成目标代码(机 器语言),因此其目标程序可以脱离其语言环境 而反复独立执行,使用比较方便、运行效率较高 ,但一旦应用程序需要修改时,必须先修改其源 代码,再重新编译生成新的目标程序才能执行, 很不方便。编译型高级语言有很多,例如Visual C++、Visual FoxPro、Delphi等。
《程序设计基础(C语言)》
• 1995年,ISO对C90做了一些修订,即“1995基准 增补 1(ISO/IEC 9899/AMD1:1995)”。1999年, ISO又对C语言标准进行修订,在基本保留原来的C 语言特征的基础上,针对应用的需要,增加了一 些功能,尤其是C++中的一些功能,命名为 ISO/IEC 9899:1999。2001年和2004年先后进行了 两次技术修正,即2001年的TC1和2004年的TC2。 ISO/IEC 9899:1999及其技术修正被称为C99,C99 是C89(及1995基准增补1)的扩充。 • 本书以C99标准为依据,为了与C89作比较,在本 书的叙述中对C99新增加的功能作特别的说明。
《程序设计基础(C语言)》1.4.2 C和C++
• C++语言是在C语言的基础上,添加了面向对象、 模板等现代程序设计语言的特性而发展起来的。 C++吸收了C语言的诸多优点,同时又添加了面向 对象程序设计的新理念,非常适用于开发复杂的 大型软件,这也是它成为主流程序设计语言的主 要原因。 • 但是,C语言兼顾了接近底层和高性能这两个显著 特性,同时又比C++语言更加简洁,随着当今世界 嵌入式开发技术的发展、大型算法的应用,特别 是搜索引擎、云计算的兴起,C语言的用武之地不 但没有萎缩,反而有逐渐扩展的趋势。
单片机C语言编程与汇编混合编程

调用参数。
(3) 在线汇编
在 C 程序中直接插入 asm(“
***
”),内嵌汇编语句,需要注意的是这种用法要慎用,在线汇编提供了能
直接读写硬件的能力,如读写中断控制允许寄存器等,但编译器并不检查和分析在线汇编语言,插入在线 汇编语言改变汇编环境或可能改变 C 变量的值可能导致严重的错误。
二 汇编和 C 接口中寻址方式的改变:
由于在 C 语言的环境下,局部变量的寻址必须通过 SP 寄存器实现,在混合编程的时候,为了使汇编语言 不影响堆栈寄存器 SP,通常的方式是在汇编环境中使用 DP 方式寻址,这样可以使二者互不干扰。编程中 只要注意对 CPL 位正确设置即可
1 .word 的意思就相当与 C 语言里的 int,char 等定义一个变两的宽度
//DSP 发向 PC 机的数据
int to_dte_num;
// 缓冲区中存放的有效字节数
int to_dte_store;
// 缓冲区的存放指针
int to_dte_read;
// 缓冲区的读取指针
这样经过链接就可以完成对应。
2 程序入口问题
在 C 程序中,程序的入口是 main() 函数。而在汇编程序中其入口由*.cmd 文件中的命令决定,如:-e m ain_start;程序入口地址为 main _start。这样,混合汇编出来的程序得不到正确结果。因为 C 到 ASM 的汇 编有默认的入口 c-int00,从这开始的一段程序为 C 程序的运行做准备工作。这些工作包括初始化变量、设 置栈指针等,相当于系统壳不能跨越。这时可在*.cmd 文件中去掉语句:-e main_start。如仍想执行某些汇 编程序,可以 C 函数的形式执行,如:
汇编与 C 语言混合编程的关键问题
10 C语言与汇编语言的混合编程

3.混合项目(续)
模块3(文件名pulse3.asm): PUBLIC _DELAY1MS;用PUBLIC声明_DELAY1MS为其它函数调用,以 “_”为前缀的函数名,表示该函数通过寄存器传递参数 DELAY SEGMENT CODE;定义DELAY段为再定位程序段 ,DELAY是用 户任意起的段名 RSEG DELAY ;选择DELAY为当前段 _DELAY1MS: DELA:MOV R6,#12 ;2T LOP1:MOV R5,#250 ;2T DJNZ R5,$ ;4T DJNZ R6,LOP1 ;4T DJNZ R7,DELA ;R7中数值为C ;程序传递过来的参数,参数为2则延时2ms EXIT: RET END
1.混合编程的实现(续)
第二步:在Keil C51环境下,在Project窗口中包含汇编代码 的C文件上单击右键,在弹出的快捷菜单中选择“Options for…”命令,再点击选中右边的“Generate Assembler SRC File”和“Assembler SRC File”复选框,使检查框由灰色(无 效)变成黑色(有效)状态。
12
3.混合编程
模块1(文件名pulse1.c): #include<STC12C5A.h> #define uchar unsigned char sbit P1_1=P1^1; extern void delay4ms(void); //外部函数delay4ms()声明 void main() { while(1) { P1_1=0; delay4ms (); //调用模块2延时4ms P1_1=1; delay4ms (); //调用模块2延时4ms } }
4
1.混合编程的实现(续)
5
《单片机原理与应用》ppt课件

条件转移指令
子程序调用与返回
根据某个条件判断的结果来决定 程序是否转移到指定的地址执行, 如JZ(零转移)、JNZ(非零转 移)等。
子程序是一段可以独立执行的程 序段,通过调用指令CALL实现子 程序的调用和返回。在调用子程 序时,需要将返回地址压入堆栈; 在子程序返回时,再从堆栈中弹 出返回地址并执行返回操作。
人机交互设备(键盘、显示器等)接口设计
键盘接口设计
通过扫描键盘矩阵或接收键盘中断的方式,读取按键信息并转 换为相应的数据或命令。
显示器接口设计
根据显示器的类型和通信协议,设计相应的接口电路和驱动程 序,实现单片机对显示器的控制和数据传输。
应用实例分析:智能家居控制系统设计
系统概述
介绍智能家居控制系统的功能、 组成和工作原理,包括中央控制 器、传感器、执行器等部分。
AVR系列
ARM系列
采用先进的RISC结构,具有高速度、低功耗、 丰富的外设接口等特点,适用于物联网等领 域。
采用高性能的32位RISC结构,具有强大的处 理能力和丰富的外设接口,适用于高端嵌入 式系统等领域。
02
单片机基本原理
微处理器结构与工作原理
微处理器内核结构 包括算术逻辑单元(ALU)、寄存器组、控制单元等。
04
C语言程序设计在单片机 中的应用
C语言与汇编语言比较
高级语言与低级语言
C语言属于高级语言,具有易于理解、编写和维护的特点;而汇编 语言是低级语言,更接近硬件,但编写复杂且可读性较差。
可移植性
C语言具有良好的可移植性,可以在不同平台上运行;而汇编语言 与特定硬件平台紧密相关,可移植性差。
执行效率
创建工程文件
在编译器中创建新的工程文件,并添 加源代码文件、头文件等。
单片机编程C语言和汇编语言的比较

单片机编程C语言和汇编语言的比较单片机编程对于电子工程领域的从业者而言,是一项十分重要的技能。
而在单片机编程中,C语言和汇编语言是两种常用的编程语言。
本文将对C语言和汇编语言进行比较,分析它们在单片机编程中的优点和缺点。
1. C语言C语言是一种高级编程语言,与单片机硬件之间存在着一定的抽象层。
在单片机编程中,使用C语言相对于汇编语言具有以下优点:1.1 代码可移植性强:C语言是一种面向过程的编程语言,在不同的单片机平台上都可以使用。
这意味着使用C语言编写的代码可以轻松移植到不同的单片机上,提高了开发的效率。
1.2 开发效率高:相对于汇编语言而言,C语言编写代码的速度更快。
C语言的语法结构和函数库使得开发者能够更加轻松地实现复杂的功能,减少了编写代码的工作量。
1.3 可读性好:C语言的语法结构相对较简单,与自然语言更接近,使得代码更易读。
这对于后续维护和调试工作来说非常重要。
尽管C语言在单片机编程中有很多优点,但也存在一些缺点:1.4 性能稍逊:由于C语言的抽象层次较高,编译后的代码相对于汇编语言生成的机器码而言,执行效率可能稍低。
这对于一些对性能要求较高的应用来说可能是一个问题。
1.5 对硬件资源的控制不够细致:C语言的抽象层次使得对硬件资源的控制相对不够细致。
在一些对硬件资源要求严格的应用场景下,可能需要使用汇编语言来实现更精细的控制。
2. 汇编语言汇编语言是一种低级别的编程语言,直接操作硬件资源。
与C语言相比,汇编语言的优点如下:2.1 执行效率高:汇编语言直接操作硬件资源,在性能上具有明显优势。
由于对硬件更直接的控制,汇编语言生成的机器码执行效率通常较高。
2.2 控制精细:汇编语言可以对硬件资源进行更精细的控制。
这对于一些对硬件资源要求非常严格的应用场景非常重要。
然而,汇编语言也有一些不足之处:2.3 开发效率低:相对于C语言而言,汇编语言的开发效率低。
由于操作层级较低,编写、调试和维护汇编代码的工作量较大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C与汇编程序运行时间比较
1. 程序简介
分别采用C语言和汇编语言多次对大量数据进行冒泡排序,比较并分析在数据量不同时二者所用时间的不同。
2. 流程图
3. 代码实现
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#include"stdafx.h"
//void srand (unsigned int seed);
void bubble(int * d, long num);
void *malloc(unsigned int size);
void free(void *p);
int main()
{
double t=0.00;
int k,i,j,temp;
int* p;
clock_t start=0,end=0;
printf("要求数组的大小:\n");
scanf("%d",&k);
p=(int*)malloc(k*sizeof(int));
srand((int)time(0));
for(i=0;i<k;i++) //生成随机数组
{
p[i]=(int)(k*rand()/RAND_MAX);
}
start=clock(); //开始计时
for(i=0;i<k;i++) //冒泡排序
{
for(j=0;j<k-i;j++)
{
if(p[j]>p[j+1])
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
end=clock();
t=(double)(end-start)*1000.00/CLOCK_PER_SEC;
printf("在C语言中%d个数据冒泡排序共耗时%lf毫秒\n",k,t);
//汇编语言中的冒泡排序
for(i=0;i<k;i++) //重新生成随机数组
{
p[i]=(int)(k*rand()/RAND_MAX);
}
start=clock(); //开始计时
bubble(p,k);
end=clock();
t=(double)(end-start)*1000.00/CLOCK_PER_SEC;
printf("在汇编语言中%d个数据冒泡排序共耗时%lf毫秒\n",k,t);
free(p);
return 0;
}
void bubble(int* d, long num)//冒泡排序
{
long temp; // 定义局部变量,用于返回值
__asm { // 嵌入式汇编代码部分
start: mov ebx,d ; EBX=数组地址
mov ecx,num ; ECX=数据个数
dec ecx
xor edx,edx ; 计数器清零
lp1: MOV eax,[ebx+edx*4] ; 将前一个数放入eax
CMP eax,[ebx+(edx+1)*4] ; 与下一个数据比较
jge lp2 ; 如果前一个数小于或等于后一个数则继续本轮的比较
XCHG eax,[ebx+(edx+1)*4]; 否则交换两个数据
mov [ebx+edx*4]
lp2: inc edx ;将要比较的数组向后移动一位
cmp edx,num
jge lp1 ;如果移动到数组尾则跳出循环
lp3: dec ecx
xor edx,edx
jne lp1
}
}
4. 程序运行结果比较
(1). 一次运行结果截图;
5.心得与体会
由本次实验可以看出汇编语言编写的程序要比C语言编写的程序运行时间短。
因为汇编语言与机器语言是一一对应的,编译成CPU可执行的机器语言只需要一个翻译的动作就好。
而C语言语法是固定的,没办法与机器指令一一对应,所
以需要编译规则。