keil中怎么在c语言里嵌入汇编语言[收集].pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)

### 如何在KEIL中C语言里嵌入汇编语言 #### 嵌入汇编代码的方法 在KEIL环境中,我们可以通过以下步骤实现在C语言程序中嵌入汇编代码: 1. **直接在C文件中嵌入汇编代码** 在C文件中嵌入汇编代码的方式为使用`#pragma`指令。具体步骤如下: - 使用`#pragma ASM`标记汇编代码的开始。 - 使用`#pragma ENDASM`标记汇编代码的结束。 示例代码: ```c #pragma ASM ; 汇编代码 #pragma ENDASM ``` **示例**: ```c #include <reg51.h> void main(void) { P2 = 1; #pragma ASM MOV R7, #10 DEL: MOV R6, #20 DJNZ R6, $ DJNZ R7, DEL #pragma ENDASM P2 = 0; } ``` 2. **配置C文件的汇编选项** - 右键点击包含汇编代码的C文件,在弹出的菜单中选择“Options for...” - 在弹出的窗口中勾选“Generate Assembler SRC File”和“Assemble SRC File”。 3. **添加库文件** 将KEIL安装目录下的`C51\Lib`中的`C51S.Lib`添加到项目中。 4. **编译生成目标代码** 完成以上步骤后,进行编译操作,即可生成相应的目标代码。 #### 调用汇编函数 在C语言程序中调用汇编语言编写的函数也是一种常见的混合编程方法。以下是一个示例过程: 1. **编写C程序并导入所需的头文件** ```c // main.c 文件 #include <reg51.h> #define uchar unsigned char #define uint unsigned int extern int AFUNC(char v_a, char v_b); void main() { char v_a, v_b; AFUNC(v_a, v_b); } ``` 2. **编写汇编函数** ```c // CFUNC.c 文件 int AFUNC(char v_a, char v_b) { int temp; temp = v_a + v_b; return(temp); } ``` 3. **配置项目** - 在Project窗口中对包含汇编代码的C文件进行设置,选择“Options for...”,勾选“Generate Assembler SRC File”和“Assemble SRC File”。 - 添加`C51S.Lib`库文件到项目中。 4. **生成和替换汇编文件** - 编译项目后会生成一个`CFUNC.SRC`文件,将其重命名为`CFUNC.A51`。 - 移除项目中的`C51S.Lib`库文件和`CFUNC.c`文件,并添加`CFUNC.A51`到项目中。 5. **查看汇编代码** 下面是生成的`CFUNC.SRC`文件的一部分内容: ``` .\AFUNC.SRC generated from: AFUNC.c ; COMPILER INVOKED BY: ; D:\Program Files\Keil\C51\BIN\C51.EXE AFUNC.c BROWSE DEBUG OBJECTEXTEND SRC(.\AFUNC.SRC) NAME AFUNC ?PR?_AFUNC?AFUNC SEGMENT CODE PUBLIC _AFUNC ; int AFUNC(char v_a,char v_b) RSEG ?PR?_AFUNC?AFUNC _AFUNC: USING 0 ; SOURCE LINE # 1 ;---- Variable 'v_b?041' assigned to Register 'R5' ---- ;---- Variable 'v_a?040' assigned to Register 'R7' ---- ; { ; SOURCE LINE # 2 ; int temp; ; temp=v_a+v_b; ; SOURCE LINE # 4 MOV A, R5 RLC A SUBB A, ACC MOV R4, A MOV A, R7 RLC A SUBB A, ACC MOV R6, A MOV A, R7 ADD A, R5 MOV R7, A MOV A, R6 ADDC A, R4 MOV R6, A ;---- Variable 'temp?042' assigned to Register 'R6/R7' ---- ; return(temp); ; SOURCE LINE # 5 ; } ; SOURCE LINE # 6 ?C0001: RET ; END OF _AFUNC END ``` 该段汇编代码展示了如何在C函数`AFUNC`内部实现加法运算,以及如何返回结果。可以看到,每个变量都被分配到了特定的寄存器中,比如`v_b`被分配到了`R5`寄存器,`v_a`被分配到了`R7`寄存器。 通过上述步骤,我们不仅了解了如何在C语言中嵌入汇编代码,还掌握了如何在C程序中调用汇编函数的具体方法。这对于深入理解嵌入式系统的底层操作具有重要意义。















- python_assassin2022-04-22用户下载后在一定时间内未进行评价,系统默认好评。

- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 项目管理之会议管理.docx
- 电信增值业务短信平台软件技术实施方案.doc
- 智慧城市建设与发展.docx
- 软件工程师考评表模板.doc
- 互联网+时代动画模型设计工具应用研究.docx
- 软件工程常考简答题.doc
- OBE教育模式下高职计算机网络课程的改革探究.docx
- 软件评测师考试习题.doc
- 局域网络组网技术大学本科方案设计书.doc
- 营销型网站建设营销型网站策划.ppt
- 新课程理念下的信息化课程设计.doc
- 线上+线下混合式学习在中职计算机基础课程教学中的应用研究.docx
- MATLAB自适应滤波去噪.doc
- 以信息化为核心加强医院后勤设备管理的思考.doc
- Viterbi改进算法研究.docx
- 单片机课件设计—HC译码器实验.doc


