keil怎样把C语言转换成单片机汇编语言

Python011

keil怎样把C语言转换成单片机汇编语言,第1张

1、打开Keil,新建一个51工程,同时新建一个main.c文件,并加入到工程源代码当中。

2、再点击新建文件按钮,新建一个汇编语言源文件:test.asm,并将它保存到指定目录。

3、在test.asm当中输入下面的代码。

4、代码编写完成后,需要将test.asm加入到工程当中,即鼠标右键点击对应工程的源程序文件夹,选择“Add Files to Group……”,软件会弹出“Add Files to Group……“对话框。

5、Keil默认的源文件是c,输入*.asm查找所有汇编语言源文件,确定后点击“Add”按钮,然后会显示该目录所有的asm文件,选择该文件再次点击“Add”即可完成添加。

6、添加完test.asm后,回到main.c,对test_fun进行声明调用,然后编译即可,正常情况是不会出现Error也不会出现Warning。

7、如果在汇编源程序的函数前没有添加RSEG语句则在编译时会出现下面的错误和警告。

1、打开IAR FOR STM8工程。

2、编一段C语言的延时程序,作为例子。

3、如何在目前实例上,添加我们的汇编。

4、编译一下是否可以编译通过,编译提示OK。

5、进入仿真界面,是否可以运行。把断点设在汇编的程序上,运行后,可以在断点处停止,说明仿真也是正常的。

在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法。

方法1)在Keil C51的函数中直接插入汇编语句

方法2)按照Keil C51接口规则,编写汇编模块

方法1是利用编译控制命令#pragma asm(用来标识所插入的汇编语句的起始位置) 和 #pragma endasm (用来标识所插入的汇编语句的结束位置) ,这两条命令必须成对出现,并可以多次出现。在Keil C51中不对插入的汇编代码做任何的处理。

方法2编写汇编模块,需对KEIL编译器的编译过程做些了解。Keil编译器的编译过程是首先将项目中的一个个源文件编译为目标代码(obj文件),然在再通过连接器产生为最终可执行的hex文件。

目标代码将其中的代码、数据、常量放在不同的“段”中,保存程序的段称为“代码段”,保存数据的段称为“数据段”,最终目标代码经过Keil的连接器按照“段”的要求转换为程序和数据地址固定的可执行文件。

在Keil软件中,“段”按定位属性分为:“可重定位段”和“绝对段”。

“可重定位段”:程序和数据在其分别所对应的存储单元(FLASH和RAM)中的存储地址是浮动的、可重定义的、相对可变的。

“绝对段”:其地址在连接前就已确定不变,连接器据此为它分配地址。

经Keil编译器生成的“段”具有如下属性:

1)段的存储属性(program code data pdata xdata bdata bit等);

2)段的起始地址;3)段的长度;

4)段的定位要求:绝对段地址固定,可重定位段定位的要求如要求代码段在2K范围内,数据段定位在可位寻址区等;

5)段名:包括程序和数据(变量和常量)的段的存储属性及段所属的程序模块(文件)。代码段: ?PR? funcname?Filename

数据段如:?DT? funcname?Filename?BI? funcname?Filename

标准段名前缀列表

段前缀 存储类型 含义

?PR? Program程序存储区的代码

?CO? code 程序存储区的常量

?BI? Bit 内部数据存储区的可位寻址的位变量

?BA? Bdata 内部数据存储区的可位寻址的字节变量

?DT? Data 内部数据存储区的变量

?ID? Idata 内部数据存储区可间接寻址的变量

?PD? Pdata 外部数据存储区的页变量

?XD? Xdata 外部数据存储区的变量