根据c51程序改写汇编语言,Keil C51编译及连接技术

本文详细介绍了Keil C51的预处理指令,包括宏定义、预处理指令及文件包含,以及C51编译库的选择和代码优化。同时,讲解了C51与汇编混合编程的方法,包括函数名转换规则、参数传递规则,并给出了应用实例。此外,还探讨了Keil C51的Bankswitch原理,包括分页方式、公共空间概念和分页实现过程,特别针对PSD813F2芯片进行了分页硬件设计和软件配置的案例分析。
摘要由CSDN通过智能技术生成

主要介绍Keil C51的预处理方法如宏定义、常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现。

教学目标

1.了解Keil C51的预处理方法,主要有宏定义#define、常用的预处理指令#define、#error、#if 、#else、#elif、#endif、#ifdef、#ifndef 、#undef 、#line 、#pragma 及文件包含指令#include。

2.了解small、compact、large三种编译模式信代码优化方法。

3. 掌握C51模块内部调用汇编程序的三种方法,理解C51模块与汇编模块之间的接口规则,主要有C51函数名与汇编程序名的转换规则、C51函数及其相关段的命名规则、C51函数的参数传递规则。

4.理解Keil C51的Bankswitch原理,了解Keil C51的三种分页方式、公共空间的概念,掌握BL51有关分页的配置,以PSD813F2为硬件基础,掌握Keil C51分页的实现过程,能进行分页的程序设计。

一、预处理器

1.1宏定义

宏定义格式如下:#define 名称 替换文字

宏是一种简单的替换,在程序中凡是出现“名称”之处均被“替换文字”替代,替换文字可以是数字,也可以是字符串。

1.2预处理指令

由ANSI C的标准规定, 预处理指令主要包括: #define、#error、#if 、#else、#elif、#endif、#ifdef、#ifndef 、#undef 、#line 、#pragma。

#define 指令

例如:#define PI 3.1415926凡是出现“PI”的地方均以“3.1415926”替换。宏的出现有助于提高程序的可读性及书写方便性,也有助于程序的调试。但是,出现在引号中的字符串是不能替换的。如printf(“PI\n”);该语句运行后输出的是:PI而不是3.1415926。

define注意事项:

1)在宏定义语名后没有“;”;

2)在C51程序中习惯上用大写字符作为宏替换名,常放在程序开头;

3)宏定义还有一个特点,就是宏替换名可以带有形式参数,在程序中用到时,实际参数会代替这些形式参数。

例如: #define MAX(x, y) (x>y)?x:y

da9b83a4d42a32a10c4672fa6f584cad.gifmain() 

{

int i=10, j=15;

printf("The Maxmum is %d", MAX(i, j);

}

da9b83a4d42a32a10c4672fa6f584cad.gif

上例宏定义语句的含义是用宏替换名MAX(x, y)代替x, y中较大者,同样也可定义:

#define MIN(x, y) (x表示用宏替换名MIN(x, y)代替x, y中较小者。

4)#define命令在程序之外,其有效范围为定义命令之后到源文件结束,但是可以用#undef命令终止宏定义的作用域。如:

da9b83a4d42a32a10c4672fa6f584cad.gif#define PI 3.1415926void main(void)

{

……

}#undef PI

da9b83a4d42a32a10c4672fa6f584cad.gif

PI的范围从#define 开始到#undef PI 结束。

#if、#else、#endif指令

#if、#els和#endif指令为条件编择指令, 它的一般形式为:

da9b83a4d42a32a10c4672fa6f584cad.gif#if 常数表达式 

语句段;

#else

语句段;

#endif

da9b83a4d42a32a10c4672fa6f584cad.gif

上述结构的含义是: 若#if指令后的常数表达式为真, 则编译#if到#else 之间的程序段; 否则编译#else到#endif之间的程序段。

例如:

da9b83a4d42a32a10c4672fa6f584cad.gif#define MAX 200 main() 

{

#if MAX>999

printf("compiled for bigger\n");

#else

printf("compiled for small\n");

#endif }

da9b83a4d42a32a10c4672fa6f584cad.gif

#undef指令

#undef指令用来删除事先定义的宏定义, 其一般形式为:

#undef 宏替换名

例如:#define TRUE 1 ...

#undef TURE

#undef主要用来使宏替换名只限定在需要使用它们的程序段中。

#include

文件包含是指用#include通常用来将一些常用的宏定义或变量定义所在的源文件包含到“#include”所在的文件中来。

通常格式如下:

#include“fil

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值