深入剖析keil c51 --- 从汇编到c51】的更多相关文章

第一节 main()函数和启动代码 汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和链接.下面看看它和main()函数是如何编译的: //主函数如下: void main(void) { ) 这是个无条件空循环. { } } 把上面的main()函数编译后的汇编程序和反汇编代码整理后对照如下: ?C_C51STARTUP SEGMENT CODE ?PR?main?TESTMAIN…
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子对这个过程进行描述,希望能对初学者有所帮助.几年来,在这个论坛里笔者得到很多热心人指导,因此也希望藉此尽一点绵薄之力. 在这个例子里,阐述了编写c51程序调用汇编函数的一种方法,这个外部函数的入口参数是一个字符型变量和一个位变量,返回值是一个整型变量.例中,先用c51写出这个函数的主体,然后用SRC…
C51和汇编混合编程(1)-C语言中嵌入汇编 1.在 C文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ;Assembler Code Here #pragma ENDASM 2.在 Project窗口中包含汇编代码的 C文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态: 3.根据选择的编译模式,把相应的库文件(如 Small…
一.C51热启动代码的编制 void main() { char data *HotPoint=(char *)0x7f; if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa)) { /*热启动的处理 */ } else { HotPoint=0x7e; /*冷启动的处进 *HotPoint=0xaa; *(++HotPoint)=0xaa; } /*正常工作代码*/ } 如果你的程序包含startup.a51,则需要对startup.a51进行修改.对于…
1)一定要使用微软的txt文本编辑器,否则键入逗号时编译通不过.应该是这个样('),不该是这个样(,). 2) 用数字做标号时,前面一定要加一个英文字母,否则编译通不过. 3) 有时编译通过的.asm源文件却不产生.hex文件!原因是keil软件的设置没有勾选“产生hex文件:另一个是存放.hex的文件夹中删除过其他的.hex文件. 4) 用VU2新建文件键入源程序时,先键入程序部分,编译后,再键入注释部分:此外,不能用中文输入法输入分号,最好用大写输入程序部分及注释部分前面的分号,否则注释部分…
模块内接口:使用如下标志符:#pragma asm汇编语句#pragma endasm注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的“Generate Assembler SRC File” 和“Assembler SRC File ”两个选项1.把"xx.c"加入工程中,右击"xx.c"选择“options for file"xx.c" 选择“Generate Assembler SRC File…
主要介绍Keil C51的预处理方法如宏定义.常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现. 教学目标 1.了解Keil C51的预处理方法,主要有宏定义#define.常用的预处理指令#define.#error.#if .#else.#elif.#endif.#ifdef.#ifndef .#undef .#line .#pragma 及文件包含指令#include. 2.了解small.co…
在Keil 里使用 DeBug 模式时,如要 查看外部 RAM 的数据 或查看 ACC 的内容可以进行以下操作; sysGetTxMode: LCALL Com0185(C:2B95) ,sysGetTxMode ........ ........ ret Com0185: MOV DPTR,#0x7020 MOVX A,@DPTR RRC A RRC A ANL A,#0x3F RET 1. 在Keil 调试的时候打开监视窗口;  2. 打开内存视窗,     在地址框填写:  C:    0…
第一节 绝对地址访问C51提供了三种访问绝对地址的方法: 1. 绝对宏:在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:CBYTE.XBYTE.PWORD.DBYTE.CWORD.XWORD.PBYTE.DWORD,具体使用可看一看absacc.h便知. 例如: rval=CBYTE[0x0002]; //指向程序存贮器的0002h地址 rval=XWORD[0x0002]; //指向外RAM的0004h地址  2. _at_关键字直接在数据定义后加上_at_ cons…
函数指针在C语言中应用较为灵活.在单片机系统中,嵌入式操作系统.文件系统和网络协议栈等一些较为复杂的应用都大量地使用了函数指针.Keil公司推出的C51编译器是事实上80C51 C编程的工业标准,它针对8051系列CPU硬件在标准ANSI C的基础上进行了扩展:但由于编译器及8051体系结构的限制,造成了在使用函数指针时有很多与ANSI C不同的地方.下面举例说明在不同的情形下函数指针的使用.以下代码均在Keil μVision3.v8.08 C51.默认优化等级的开发环境下验证通过. 1.指向…