C与汇编程序运行时间比较
- 格式:docx
- 大小:229.01 KB
- 文档页数:4
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语言和汇编语言的比较单片机编程对于电子工程领域的从业者而言,是一项十分重要的技能。
而在单片机编程中,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语言而言,汇编语言的开发效率低。
由于操作层级较低,编写、调试和维护汇编代码的工作量较大。
C学习笔记一C语言和汇编语言的区别C语言和汇编语言是计算机编程中常见的两种语言,它们在编写程序时有着不同的特点和用途。
本文将从语法、可读性、抽象程度以及机器依赖性等方面对C语言和汇编语言进行比较,以帮助读者更好地理解它们之间的区别。
1. 语法差异C语言是一种高级编程语言,它采用类似英语的结构化语法,具有丰富的语法特性,包括变量、数组、条件语句、循环语句和函数等。
C语言的语法相对简洁,能够快速实现一些功能。
而汇编语言是一种低级编程语言,使用各种助记符和符号来表示机器指令、寄存器和内存访问等,需要编写者有较强的硬件知识和技巧。
相比C语言,汇编语言更接近计算机底层,更加底层、精简和直接。
2. 可读性和可维护性C语言的语法结构和语义更加接近自然语言,代码具有较好的可读性和可维护性。
由于C语言的抽象程度较高,程序员可以更快速地理解代码,并进行修改和维护。
同时,C语言具有模块化的特点,程序可以按模块进行组织,便于团队协作开发。
相比之下,汇编语言的语法和符号较为晦涩,阅读和理解汇编代码需要具备较深的计算机体系结构和指令集的知识。
汇编语言编写的程序通常较为底层,代码行数相对较多,可读性和可维护性较差,需要更高的技术水平和耐心。
3. 抽象程度C语言是一种高级语言,提供了丰富的语法特性和抽象层次,为程序员提供了更方便和高效的编程方式。
C语言可以在不同的计算机平台上进行移植,并且可以通过调用库函数实现复杂的操作,具备良好的抽象能力。
汇编语言是一种低级语言,提供了直接操作硬件的能力。
汇编程序员可以直接访问寄存器、内存等底层资源,实现对计算机的精细控制。
汇编语言相对于C语言来说更接近机器语言,具有更高的执行效率和更大的灵活性。
4. 机器依赖性C语言是一种面向过程的编程语言,编写的程序相对独立于具体的硬件平台,具有较好的可移植性。
通过编译器的编译,C语言可以在不同的操作系统和计算机上运行。
汇编语言则直接操作底层的机器指令和寄存器,与具体的硬件平台密切相关,不同的计算机架构和操作系统可能需要不同的汇编代码。
编程语⾔-编译型语⾔与解释型语⾔及汇编语⾔编程语⾔编译型语⾔和解释型语⾔计算机只能直接理解机器语⾔,所以使⽤任何⾼级语⾔(⽅便⽤户理解)编写的程序若想被计算机运⾏,都必须将其转换成计算机语⾔,也就是机器码(0,1)。
⾼级语⾔转换成机器语⾔的⽅式有两种:1、编译:将源代码编译成⽬标代码后执⾏,⾼级语⾔---编译---⽬标代码---执⾏--输出2、解释:边读源程序边执⾏。
⾼级语⾔----解释器----输出因此:⾼级语⾔分为编译型语⾔和解释型语⾔编译型语⾔编译型语⾔是:将c/c++之类的编译型语⾔编写好的程序转换成机器语⾔,再经过链接器链接形成⼆进制的可执⾏⽂件。
因为只需编译⼀次,后续需要运⾏该程序时,直接将可执⾏的⼆进制⽂件从硬盘载⼊内存中运⾏编译—>汇编语⾔—>机器语⾔解释型语⾔解释型语⾔:python源码⽆需编译成⼆进制代码,直接从源代码运⾏,运⾏时,python解释器将源码转换为字节码,再由⼀个专门的python 字节码解释器负责解释执⾏字节码(转换成机器语⾔、运⾏)。
总结由于前者⽆需每次执⾏都编译,直接运⾏;后者每次执⾏都需转换成字节码,因此前者运⾏速度快,后者跨平台性好。
前者由于程序执⾏速度快,同等条件下对系统要求较低,因此像开发操作系统、⼤型应⽤程序、数据库系统等时都采⽤它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语⾔,⽽⼀些⽹页脚本、服务器脚本及辅助开发接⼝这样的对速度要求不⾼、对不同系统平台间的兼容性有⼀定要求的程序则通常使⽤解释性语⾔,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
关于javaJava和其他的语⾔不太⼀样。
Java程序从源⽂件创建到程序运⾏要经过两⼤步骤:1、java会由编译器进⾏编译⽣成class⽂件(字节码⽂件)---需要先编译2、字节码由java虚拟机解释运⾏,解释执⾏即为⽬标代码⽣成并执⾏。
本栏目责任编辑:谢媛媛软件设计开发单片机程序设计中C 语言的具体应用郑露萍(重庆工商职业学院,重庆401520)摘要:随着计算机技术的飞速发展,单片机的开发愈发受到社会各界的广泛关注,人们不断加大对单片机的研发力度,使得单片机的发展已经进入到智能化发展阶段。
C 语言因为具有较强的可移植性,在单片机程序设计中得到了广泛的应用。
该文全面地探索并介绍了单片机程序设计中C 语言的具体应用,仅供参考。
关键词:单片机程序;C 语言;应用中图分类号:TP311文献标识码:A文章编号:1009-3044(2021)15-0072-02开放科学(资源服务)标识码(OSID ):以往单片机程序的设计大多借助汇编语言完成,随着社会各领域对单片机功能需求的不断增多,汇编语言愈发满足不了单片机程序的设计需求。
作为一门高级编程语言,C 语言的应用范围较为广泛,在单片机程序设计中,合理地应用C 语言进行程序设计,对于单片机的开发的发展具有积极的意义。
1单片机及其开发情况从表面上看,单片机就是一个芯片,但是其功能却相当于一个微型的计算机,和普通的计算机相比,单片机不具备输入、输出端口设备。
单片机具有体积小、质量轻、价格便宜、方便携带、应用便捷等诸多优势。
深入的探索单片机的开发和使用过程,有助于帮助人们更好的认识计算机结构,了解计算机的运行原理。
就世界范围来看,单片机在工业控制领域的应用是最为广泛的,主要用于智能仪表、通讯设备等的功能保证上。
工业领域因为单片机的应用,生产效率得到明显的提升,同时产品更新换代的速度也越来越快。
和C 语言相比,汇编语言应用过程更加简单方面,控制效果更好,一直以来,单片机都应用汇编语言进行程序设计。
但是随着科技的发展,处理器对语言的需求越来越高,汇编语言已经难以满足这些需求,这样的背景下,C 语言在单片机开发中的应用优势愈发明显。
C 语言较汇编语言,可执性更高,应用过程更加方便,即使编程人员不了解单片机处理器的机构,也可以应用C 语言的编辑器完成程序设计,可以说,C 语言单片机的开发工作中具有十分广阔的应用前景。
题一11.计算机系统结构的层次结构由高到低分别为应用语言机器级,高级语言机器级,汇编语言机器级,操作系统机器级,传统机器语言机器级,微程序机器级12.计算机系统弗林(Flynn)分类法,把计算机系统分成单指令流单数据流(SISD)、单指令流多数据流(SIMD)、多指令单数据流和多指令多数据流四大类。
13.透明指的是客观存在的事物或属性从某个角度看不到,它带来的好处是简化某级的设计,带来的不利是无法控制。
22.数据结构和数据表示之间是什么关系?确定和引入数据表示的基本原则是什么?数据表示是能由硬件直接识别和引用的数据类型。
数据结构反映各种数据元素或信息单元之间的结构关系。
数据结构要通过软件映象变换成机器所具有的各种数据表示实现,所以数据表示是数据结构的组成元素。
(2分)不同的数据表示可为数据结构的实现提供不同的支持,表现在实现效率和方便性不同。
数据表示和数据结构是软件、硬件的交界面。
(2分)除基本数据表示不可少外,高级数据表示的确定和引入遵循以下原则:(1)看系统的效率有否提高,是否减少了实现时间和存储空间。
(2)看引入这种数据表示后,其通用性和利用率是否高。
15.引入数据表示的两条基本原则是:一看系统的效率有否提高;二看数据表示的通用性和利用率是否高。
13.计算机组成指的是计算机系统结构的逻辑实现,包括机器级内的数据流和控制流的组成及逻辑设计等。
计算机实现指的是计算机组成的物理实现,。
21、软件和硬件在什么意义上是等效的?在什么意义上是不等效的?逻辑上等效,性能、价格、实现难易程度上不一样。
22.说明翻译和解释的区别和联系.区别:翻译是整个程序转换,解释是低级机器的一串语句仿真高级机器的一条语句。
联系:都是高级机器程序在低级机器上执行的必须步骤。
19.计算机系统结构也称计算机体系结构,指的是传统机器级的系统结构。
它是软件和硬件/固件的交界面,是机器语言汇编语言程序设计者或编译程序设计者看到的机器物理系统的抽象。
c语言和汇编语言的关系随着计算机技术的不断发展,编程语言也在不断更新迭代。
C语言作为一种高级语言,其强大的功能和简洁的语法赢得了广泛的用户群体。
而汇编语言则是一种低级语言,它与硬件紧密相关,可以直接操作计算机的各种硬件设备。
虽然C语言和汇编语言在语言结构和语法上有很大的差异,但是它们之间有着紧密的联系和互动。
首先,C语言和汇编语言都是计算机语言的一种。
C语言是一种高级语言,具有可移植性和代码可读性的特点。
C语言的语法结构简洁明了,易于学习和使用,是很多程序员的首选语言。
而汇编语言则是一种低级语言,它直接操作计算机的硬件,可以对计算机的各种硬件设备进行直接控制,因此具有很高的效率和灵活性。
C语言和汇编语言之间的联系主要体现在以下几个方面:1. C语言可以调用汇编语言编写的函数。
在C语言中,可以使用汇编语言编写的函数来实现一些特殊的功能。
例如,在C语言中,可以使用汇编语言编写的函数来实现对硬件设备的直接控制,从而提高程序的运行效率。
2. C语言可以嵌入汇编语言代码。
在C语言程序中,可以嵌入一些汇编语言代码,用来实现一些特殊的功能。
例如,在C语言中,可以使用汇编语言代码来实现对特定寄存器的操作,从而提高程序的效率。
3. C语言可以生成汇编语言代码。
在C语言编译器中,可以将C 语言代码编译成汇编语言代码。
这样,程序员可以通过查看汇编语言代码来深入了解程序的运行过程,从而更好地优化程序。
4. 汇编语言可以调用C语言编写的函数。
在汇编语言中,可以直接调用C语言编写的函数,从而实现更加复杂的功能。
例如,在汇编语言中,可以调用C语言编写的函数来实现对字符串的操作。
5. 汇编语言可以直接操作C语言中的变量。
在汇编语言中,可以直接访问C语言程序中的变量,从而实现更加灵活的操作。
例如,在汇编语言中,可以直接操作C语言程序中的数组,从而实现更高效的数据处理。
总的来说,C语言和汇编语言之间的联系非常紧密,它们可以相互调用、嵌入、生成和操作,从而实现更加高效、灵活和复杂的功能。
一、填空1.KeiL C51软件中,工程文件的扩展名是___.c______,编译连接后生成可烧写的文件扩展名是_______HEX____。
2.C51支持的指针有基于存储器的指针和一般指针。
3.C51中,没有专门的循环语句,我们可以用函数___________完成一个字节的循环左移,用______完成二个字节的循环左移。
4.函数是C语言的基本单位。
5.C语言中输入和输出操作是由库函数和等函数来完成。
6.若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为__ ______。
7.是一组有固定数目和相同类型成分分量的有序集合。
8.变量的指针就是变量的;指针变量的值是。
9.在C语言中,把多个不同类型的变量结合在一起形成的一个组合型变量,称为,简称。
10.C51的数据类型有、、、。
11.C51的基本数据类型有、、、、、。
12.C51的构造数据类型有、、、。
13.C51的存储类型有data 、idata 、bdata 、xdata 、pdata 、code 。
14.C51的存储模式有SMALL模式、COMPACT模式和LARGE模式。
15.C51程序与其他语言程序一样,程序结构也分为、、三种。
16.数组的一个很重要的用途就是。
17.二、单项选择题:1.89S51的内部程序存储器与数据存储器容量各为多少?(c )(A)64KB、 128B ( B)4KB、64KB(C)4KB、128B (D)8KB、256B2.在8x51芯片里,哪个引脚用于控制使用内部程序存储器还是外部程序存储器?( b)(A)XTAL1 (B)/EA (C)/PSEN (D)ALE3.下列哪个不是KeilC的预处理命令?( c(A)#include (B)#define (C)#exit (D)#if4.下列哪个不是KeilC的数据类型?( b)(A)void (B)string (C)char (D)float5.在8x51的输入/输出端口里,哪个输入/输出端口执行在输出功能时没有内部上拉电阻( A)(A)P0 (B)P1 (C)P2 (D)P36.在KeilC的程序里,若要指定P0口的bit3,如何编写?( C)(A)P0.3 (B)Port0.3 (C)P0^3 (D)Port^37.在8x51里,若要扩展外部存储器时,数据总线连接哪个输入/输出端口?(A )(A)P0 (B)P1 (C)P2 (D)P38.点亮一般的LED所耗的电流约为多少?( D)(A)1~5uA (B)10~20uA (C)1~5mA (D)10~20mA9.在8x51的程序里,若要将个输入/输出端口设置成输入功能,应如何处理?( A)(A)先输出高电平到该输入/输出端口(B)先输出低电平到该输入/输出端口(C)先读取该输入/输出端口的状态(D)先保存该输入/输出端口的状态10.根据实验统计,当操作开关时,其不稳定关态大约持续多久?( B)(A)1~5ms (B)10~20ms (C)100~150ms (D)150~250us11.在KeilC里,判读开关状态时,使用if_else if语句与使用switch语句有何差异?( B)(A)if-else if 语句较快(B)if-else if语句有优先级(C)switch语句可判读较多开关状态(D)switch 语句有优先级12.对于低电平动作(低电平触发)的开关而言,下列哪个不是在输入口上连接一个上拉电阻VCC的目的?( A)(A)提供足够的驱动电流(B)防止确定状态(C)保持输入高电平(D)防止噪声干扰13.中断功能具有什么好处?(C )(A)让程序更复杂(B)让程序执行速度更快(C)让程序更有效率(D)以上皆非14.8x51的IP缓存器的功能为何?(A )(A)设置中断优先级(B)启用中断功能(C)设置中断触发信号(D)定义CPU的网址15.在KeilC里,中断子程序与函数有何不同?( A)(A)中断子程序不必声明(B)函数不必声明(C)中断子程序必须有形式参数(D)中断子程序一定会有返回值16.若要同时启用INT0及INT1中断功能,则应如何设置?(B )(A)TCON=0x81 (B)IE=0x85 (C)IP=0x83 (D)IE=0x0317.若要提高INT1的优先级,则应如何设置?( C)(A)IP=0x01 (B)IE=0x01 (C)IP=0x04 (D)IE=0x0418.在8x51的Timer里,若使用Mode 0,其最大计数值为多少个机器周期?(B )(A)65536 (B)8192 (C)1024 (D)25619.12 MHz的8x51系统里,哪一种方式一次可定时5ms?( A)(A)Mode0及Mode1 (B)Mode1及Mode2 (C ) Mode2及Mode3 (D) Mode3及Mode120.8x51的定时器,在下列哪种方式下具有自动加载功能?( C)(A)Mode0 (B) Mode1 (C)Mode2 (D)Mode321.若将Timer0设置为外部启动,则可由哪个引脚启动?( A)(A)P3.2 (B)P3.3 (C)P3.4 (D)P3.522.下列哪个IC具有将串行数据转换成并行数据的功能?( B)(A)74138 (B)74164 (C)74165 (D)7416823.在同一时刻,只能接收或发送信号者称为什么?( A(A)半双工(B)全双工(C)半单工(D)单工24‘在8x51的串行口里,在哪一种方式下,可利用Timer1产生波特率?(C )(A)Mode0 (B)Mode1 (C)Mode2 (D)Mode325.在8x51里,若通过串行端口传出数据,则只要将数据放入哪个寄存器,CPU就会自动将它会传出?( B)(A)SMOD (B)SBUF (C)PCON (D)RBUF26.在8x51里,若CPU完成串行端口数据的接收将会如何?( D)(A)将TI标志变为0 (B)将RI标志为0 (C)将TI标志变为了 1 (D)将RI标志变为127.若要设置8x51串行端口方式,可在哪个寄存器中设置?( B)(A)SMOD (B)SCON (C)PCON (D)TCON28.在共阳极8*8LED点阵里,其阳极如何连接?(C)(A)各行阳极连接到行引脚(B)各列阳极连接到列引脚(C)各行阳极连接到列引脚(D)各列阳极连接到行引脚29.在共阳极8*8点阵里,其阴极如何连接?( C)(A)各行阴极连接到行引脚(B)各列阴极连接到列引脚(C)各行阴极连接到列引脚(D)各列阴极连接到行引脚30.通常8*8LED点阵的驱动方式是什么?( B)(A)直接驱动(B)扫描驱动(C)双向驱动(D)以上皆非31.若要对LCM下指令,则应如保设置?(A )(A)RS=0,R/~W=0 (B)RS=1,R/~W=0 (C)RS=1,R/~W=1(D)RS=0,R/~W=132.若要在LCM中显示些字符,则需把所要显示的字符放入何处?(B )(A)CG RAM (B)DDRAM (C)IRAM (D)GDRAM33.若要将数据写入LCM,则应如何设置?(B )(A)RS=0,R/~W=0 (B)RS=1,R/~W=0 (C)RS=1,R/~W=1 (D)RS=0,R/~w=134.利用下列( D )关键字可以改变工作寄存器组A、interruptB、sfrC、whileD、using35.C51中一般指针变量占用( C )字节存储。
C语言程序设计(第三版)习题答案习题一一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)高级语言P2(5)汇编程序P3 (6)编译程序P4 (7)算法P5 (8)结构化程序设计方法P10二、简答题1. 设计程序时应遵循哪些基本原则?P4答:正确性、可靠性、简明性、有效性、可维护性、可移植性。
2. 算法具有哪些特点?答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
3. 算法的表示形式有哪几种?答:自然语言、伪代码、传统流程图、N-S流程图、计算机语言。
4. 结构化程序设计方法的三种基本结构是什么?答:顺序结构、选择结构和循环结构。
5. 传统流程图与N-S流程图最大的区别是什么?答:N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。
三、用传统流程图或N-S流程图表示求解以下问题的算法。
1. 从键盘输入10个整数,求出其中的最小数并输出。
2. 求1+2+3+…+100的值。
3. 求10~50的所有素数之和。
4. 求下列分段函数的值。
四、请参照本章例题,编写一个简单的C 程序,输出以下三行信息。
**************************Yangtze University**************************#include <stdio.h>void main(){printf("**************************\n");printf(" Yangtze University\n");printf("**************************\n");}4X-1 (X ≤1) 5(X-1)+6 (1<X<5) 6-3X (X ≥5)习题二一、选择题1~10: B C D C D D B C A A11~20: D A C D B D B A C D二、填空题1.字母 L 或字母 l2. %c(或字符) 、 %d(或整数)3.在程序运行过程中,其值可以在一定的范围内变化的量4.'\0'5.小数形式、指数形式6.关键字、预定义标识符、用户标识符7.字母、数字、下划线、数字8. 189. 2 、 1 、 3010.双精度实数或double11.赋值、逗号、 20 、 20 、 20 、 412. 4 、 4习题三一、选择题1~10: B C C B C C C D C C注:第4题答案D为: 10 22↙33↙二、填空题1. printf 、 scanf2. h3."%5d"4.'\0'5. e 、 E6. 67. s 、 c8. *9. - 、 +10. i三、编程题1. 编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进行输出。
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语言语法是固定的,没办法与机器指令一一对应,所
以需要编译规则。