高级编程中C语言属于,c语言高级编程
c语言高级编程
C高级编程
责任编辑:admin 更新日期:2005-8-6
深入了解C语言(函数的参数传递和函数使用参数的方法)
tangl_99(原作)
关键字 C语言,汇编,代码生成,编译器
C语言生成的代码在执行效率上比其它高级语言都高.现在让我们来看看C语言生成的代码具体是什么样子的.当你看完本文对于C语言的了解一定会更深一步了.
本文通过一个个实际案例程序来讲解C语言.
研究案例一
工具: Turboc C v2.0,Debug,MASM v5.0,NASM
实例C程序:
/* example1.c */
char ch;
int e_main()
{
e_putchar(ch);
}
目标内容:C语言调用函数的方法与细节
我们使用的C编译器是16位的Turboc C v2.0,它生成的是16位的代码,比较简单,方便我们来研究.同时我们也需要用到DOS下的DEBUG来进行反汇编.由于我们很多案例中的程序并不是完整的C程序,所以Turboc下的Tlink并不能为我们生成目标程序,所以我将使用MASM中的link.exe,同时里面的http://doc.xuehai.net也可以为我们把exe文件转换成bin文件.
这个程序没有main函数,我们用e_main来代替main函数.这样我们能避开C语言对main函数进行一系列处理的代码.同样,我们也用e_putchar()来代替我们平常使用的putchar().这里"e"的意思就是"example".
没有了main函数,我们的C程序就没有了入口,所以在开始编译这段C代码之前,我还得写几行简单的汇编代码,通过它来作为我们程序的入口.
; C程序的入口 start.asm
[BITS 16]
[global start]
[extern _e_main]
start:
call _e_main
按照C语言的习惯,所以C总的名词都要自动在前面加一个"_"下划线.所以,我们在C中的e_main函数,如果要在汇编中调用,就变成了_e_main函数.这段汇编代码只有一句:call _e_main,就是调用我们在C中的e_main函数
这段代码我将用nasm来进行编译.生成start.obj
nasmw -f obj -o start.obj start.asm
下面我们用Turboc C来编译这段C代码:
TCC -mt -oexample1.obj -c example1.c
link start.obj example1.obj,example1.exe,,,
exe2bin example1.exe
这样,我们就得到了这段C代码编译出来的机器代码文件(example1.bin)了.
下面我们用DEBUG这个老DOS的工具来对example1.bin进行反汇编.
DEBUG
-n example1.bin
-l 0
-u 0
xxxx:0000 CALL 0003
xxxx:0003 MOV AX,000B
xxxx:0006 PUSH AX
xxxx:0007 CALL 0020
xxxx:000A POP CX
这里看到蓝色的代码就是我们整个C程序的所生成的代码了.
最开始的第一句CALL 0003是我们用nasm编译的start.asm所生成的代码.
我们主要目标是研究蓝色的C语言的代码,第一句start.a
sm所生成的代码太简单,就是调用e_main函数.而我们的e_main函数就是蓝色代码部分.
从C源程序中我们看到,我们在e_main做的就是一件事情:调用e_putchar(ch);其中ch是传给出e_putchar的参数.
MOV AX,000B
000B就是我们
高级编程中C语言属于,c语言高级编程相关推荐
- 解析少儿编程中的运用的科技语言
少儿编程作为一种科技语言是没有国界的,适用于全世界.而在科技发展的今天,编程应用于各个领域.很多国家都意识到编程学习的重要性,因此,采取了各种措施来推广编程教育,如英国将编程列入中小学必修课程中,美国 ...
- c语言编程中如何对其,C语言内存对齐详解(3)
在minix的stdarg.h文件中,定义了如下一个宏: /* Amount of space required in an argument list for an arg of type TYPE ...
- C语言编程中 a什么意思,c语言中的是什么意思
c语言中的&&是什么意思 发布时间:2020-06-17 09:42:10 来源:亿速云 阅读:3076 作者:Leah c语言中的&&是什么意思?针对这个问题,这篇文 ...
- c语言编程中野指针错误,C语言(野指针错误)
realloc引起的coredump 记录一次接口程序在运行过程中产生的崩溃问题,通过调试 core文件,定位到是程序在调用realloc 时候出现了问题 问题程序代码 #include #inclu ...
- c语言编程中怎么打汉字,c语言编程中,怎么打汉字啊??我是新手啊~~
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 N久以有写的,图形模式下显示中文的程序,需要ucdos下ASC16,HZK16两个字库文件的支持. 里面的 printdot 函数为自己写的打点函数,非C ...
- 编程中生日蜡烛问题c语言,C语言题目。生日攻击。会的麻烦下。。谢谢。
满意答案 q126elua 2013.07.01 采纳率:48% 等级:12 已帮助:8506人 //此程序在硬件上调试通过 //本程序的单片机晶振采用11.0592M #include sbi ...
- 编程中python怎么读-对Python新手编程过程中如何规避一些常见问题的建议
这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题.本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段.为了照顾目标读者,本文做了一些简化(例如: ...
- 在python面向对象编程中、属性分为_Python-面向对象编程(1.概述)
1.在 Python 中,面向对象编程主要有两个主题,就是类和类实例 a.类和对象是相互关联的,类是实例的定义,实例是类的具像化. b.类分为新式类和经典类 新式类:(注 base 是继承的父类,ob ...
- python编程中条件句_简单讲解Python编程中namedtuple类的用法
Python的Collections模块提供了不少好用的数据容器类型,其中一个精品当属namedtuple. namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代, ...
- 编程中的蛇形填空问题_在线编程问题当中的蛇形矩阵问题
源代码如下: #include#includeusing namespace std;int a[100][100];int jlcf[100][100];//bool jc[10000];int s ...
最新文章
- Mesos各种存储处理方式
- Python学习之==数组(一)
- 通过ObjectMapper将实体转成字符串 ,将 用json存的的list 回转list
- C语言学习之试编程从键盘输入2*3的二维数组,将该数组行列交换输出。
- jar/war/ear文件的区别
- SQL中使用正则表达式
- net idautomationhc39m条形码字体生成条形码
- ARM7开发软件安装步骤
- 【FXCG】什么是风险?
- 1、关于douyin 小红书等平台 人均985 211的想法
- 做游戏与web的区别 - 服务器篇【1】
- 微信小程序开发—引用公共js里的方法
- php checkmobile,如何在php中檢查請求是來自移動設備還是計算機
- 学Android必须懂的
- 【分享】订阅用友U8集简云连接器同步费用审批数据至用友U8系统
- Oracle-表的创建与管理
- 云计算赛项--2020年赛题基础部分[任务3]
- Beats:使用 Elastic Stack 记录 Python 应用日志
- Sicily 2500---看风景
- AutoJs学习-文字转语音QQ发送
热门文章
- NRF52832-QFAA、NRF52840-QIAA性能区别-蓝牙智能手环穿戴
- 没有对公账户怎么开通认证微信公众号?
- oracle am时间,oracle里to_date()如何转换am、pm时间
- Mac系统切换SMB账号密码
- 计算机检测不到双显示器,win10系统双屏幕检测不到第二屏幕怎么办 解决双屏幕不显示的方法步骤...
- 学会感恩,学会分享,开始总结自己的职场经验
- 微信抢抢票服务器,已有多人被坑!抢票“加速包”慎用!
- Ubuntu 笔记本合上盖子时,不进入休眠
- 旷视科技 CVPR部分文章
- 国药集团获得美国默沙东公司新冠口服药“莫诺拉韦”经销权和独家进口权 | 美通社头条...