带注释的c51汇编语言,[转载]KEIL C51 中 C语言里加入汇编语言

本文介绍了如何在KEIL C51环境下使用C语言与汇编语言混合编程,包括两种插入汇编代码的方法:使用预处理指令#asm/#endasm和#pragma asm/_asm()。在C中调用汇编函数需要注意变量和函数的接口,如变量的寻址方式、参数传递和寄存器保存。同时,文章提供了混合编程时关于局部变量寻址方式的改变和C调用汇编函数的注意事项。
摘要由CSDN通过智能技术生成

在KEIL C51 中 C语言里加入汇编语言(2006-12-26 13:33:50)

分类:C51编程

1. 通过使用预处理指令#asm

和#endasm来使用汇编语言。用户编写的汇编语言可以紧跟在#asm之后,而在#endasm之前结束。如下所示:

# asm

# endasm

在#asm和#endasm之间的语句将作为汇编语言的语句输出到由编译器产生的汇编语言文件中。

2.通过使用预处理指令# pragma asm和函数_asm()来使用汇编语言。在程序的开头加上预处理指令#pragma

asm,在该预处理指令之前只能有注释和其它预处理指令。 _asm()函数可按以下方式使用。 _asm(汇编语言字符串)

在汇编语言字符串中,可以通过回车和换行符把各个语句分开。

在C语言中使用汇编语言,可以操作C语言中的全局变量或完成用C语言难于完成的功能,但要注意以下几点:

① #asm不允许嵌套使用。

② 当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件。

③ _asm只能用小写字母,如果写成大写,就作为普通变量。

④ #asm#endasm和_asm只能用在函数内。

C与汇编混合编程的一点总结

在C和汇编混合编程的时候,存在C语言和汇编语言的变量以及函数的接口问题。在C程序中定义的变量,编译为.asm文件后,都被放进了.bss区,而且变量名的前面都带了一个下划线。在C程序中定义的函数,编译后在函数名前也带了一个下划线。例如:

extern int num就会变成 .bss _num, 1 extern float nums[5]就会变成.bss _nums,

5 extern void func ( )就会变成 _func, 一 汇编和C的相互调用可以分以下几种情况: (1)

汇编程序中访问c程序中的变量和函数。

在汇编程序中,用_XX就可以访问C中的变量XX了。访问数组时,可以用_XX+偏移量来访问,如_XX+3访问了数组中的XX[3]。

在汇编程序调用C函数时,如果没有参数传递,直接用_funcname 就可以了。如果有参数传递,

则函数中最左边的一个参数由寄存器A给出,其他的参数按顺序由堆栈给出。返回

值是返回到A寄存器或者由A寄存器给出的地址。同时注意,为了能够让汇编语言能访问到C语言中定义的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值