C语言对比汇编的好处_第1页
C语言对比汇编的好处_第2页
C语言对比汇编的好处_第3页
C语言对比汇编的好处_第4页
C语言对比汇编的好处_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C 语言对比汇编的好处简单来说,C 语言对汇编语言进行了抽象,具有如下优点: 更符合人类思维习惯,开发效率高、时间短。 模块化。 可移植性好。 提供数学函数并支持浮点运算。 程序可读性和可维护性强。 C 语言当然也有缺点,比如实时性通常要比汇编差。在编写汇编的时候可以清楚的知道每一条指令究竟要多少个机器周期,但是在 C 中掌控准确的时间稍微困难一些。C51 包含 ANSI C 关键字的同时,也有针对 51 单片机扩展的一些关键字。C51 的扩展关键字从某种程度上体现了 C51 语言与标准 C 语言的不同。例如可重入函数、存储模式等等都是标准 C 中不存在的问题。ANSI C 关键字 auto: 自动变量 double: 双精度类型 int: 声明整型类型 struct: 声明结构体类型 break: 跳出当前循环 else: 条件语句否定分支(与 if 连用) long: 声明长整型类型 switch :用于开关语句? case: 开关语句分支? enum: 声明枚举类型 register: 声明寄存器变量 typedef: 用以给数据类型取别名(当然还有其他作用) char: 声明字符型类型 extern: 声明变量是在其他文件正声明(也可以看做是引用变量)? return: 子程序返回语句(可以带参数,也看不带参数)? union: 声明联合数据类型 const: 声明只读变量 float: 声明浮点型类型 short: 声明短整型类型 unsigned: 声明无符号类型类型 continue: 结束当前循环,开始下一轮循环? for: 一种循环语句(可意会不可言传) signed: 生命有符号类型类型 void: 声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) default: 开关语句中的“其他”分支? goto: 无条件跳转语句? sizeof: 计算数据类型长度? volatile: 说明变量在程序执行中可被隐含地改变? do: 循环语句的循环体 while: 循环语句的循环条件 static: 声明静态变量 if: 条件语句 C51 扩展关键字_at_ 为变量定义存储空间绝对地址alien 声明与 PL/M51 兼容的函数bdata 可位寻址的内部 RAMbit 位类型code ROMcompact 使用外部分页 RAM 的存储模式data 直接寻址的内部 RAMidata 间接寻址的内部 RAMinterrupt 中断服务函数large 使用外部 RAM 的存储模式pdata 分页寻址的外部 RAM_priority_ RTX51 的任务优先级reentrant 可重入函数sbit 声明可位寻址的特殊功能位sfr 8 位的特殊功能寄存器sfr16 16 位的特殊功能寄存器small 内部 RAM 的存储模式_task_ 实时任务函数using 选择工作寄存器组xdata 外部 RAMC51 的运算符与 C 语言几乎无异(至今没有发现区别)。算术运算符+ 加,?一元取正?- 减,?一元取负?* 乘?/ 除% 取模?- 自减 1?+ 自加 1 逻辑运算符int (*pointer)(int,int) = func;其它数据类型:enum、struct、union 以及数组。C51 专有数据类型:bit、sfr、sfr16 以及 sbit。bit 变量存储在可位寻址区,保存一位二进制数。注:不能用指针指向位变量。sfr 和 sfr16 指的是特殊寄存器变量。sbit 声明的是可位寻址变量的一个位。可位寻址的变量就是存储在 bdata 的变量,以及部分 sfr。例如:int bdata bitTest;sbit bit0 = bitTest 0;例子中的 bit0 就是 bitTest 的第 0 位。变量的作用域C51 的变量分为局部变量和全局变量。变量的存储种类auto:默认register:编译器尽量将变量放在寄存器中。extern:全局变量,可以在多个文件中使用。static:使得局部变量的寿命与程序相同;使得全局变量只在文件内有效。变量的存储区域这个是 C51 与标准 C 语言区别很明显的地方。C51 中可以指定变量存储在具体的存储器区域内:例如片内 RAM、片外 RAM、或者是 ROM 里。例如:char data test = c;定义 test 变量存储在直接寻址的内部 RAM 区。具体的存储区域如下表:存储类型 存储区域data 片内直接寻址 RAMidata 片内间接寻址 RAMpdata 分页寻址的片外 RAMxdata 片外数据存储(64K)code 片内统一编址 ROM(64K)bdata 片内可位寻址的 RAM(128 位) 指针与存储区域与变量相同,我们也可以指定指针的存储区域,以及指针所指向的变量的存储区域。指明了所指向变量的具体存储区域的指针效率要更高一些,占用的存储区也少一些(三字节一字节)。例如:char data *str1;/指针指向 data 存储区的字符变量char data * data str2;/指针本身也在 data 区域绝对地址的变量在 C51 中,可以另变量存储在存储器中的特定地址。这是通过“_at_”关键字实现的。例如:char data test _at_ 0x100;不过需要注意的是,绝对地址的变量具有如下要求: 不能初始化 bit 类型不能用绝对地址 只有全局变量才可以使用绝对地址 顺序结构、选择结构与循环结构顺序结构仅仅是简单的一个语句一个语句的执行。选择结构的语句有:if else,switch循环结构的语句有:for,while,do while与标准 C 语言一样,循环结构中可以使用 break 和 continue,switch 中可以使用break。函数在 C51 中,函数的声明,定义和调用的方式基本一致,这里仅仅记录一些主要的不同之处:可重入函数C51 中的函数在默认情况下是不可以被多个进程共享的,而可重入函数则没有这个限制。让函数可重用的方法如下:int testFunc(int a,int b) reentrant;指定寄存器组在 C51 中,我们可以指定函数指定特定的寄存器组。如果为中断函数指定寄存器组,那么所有被该中断函数调用的函数都必须使用这个寄存器组。指定函数使用的寄存器组的方法是在函数原型后面加一个 using

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论