c语言高级编程:C高级编程来源: 发布时间:星期四, 2008年9月25日 浏览:51次 评论:0
深入了解C语言(函数的参数传递和函数使用参数的方法)
tangl_99(原作) 关键字 C语言,汇编,代码生成,编译器 C语言生成的代码在执行效率上比其它高级语言都高.现在让我们来看看C语言生成的代码具体是什么样子的.当你看完本文对于C语言的了解一定会更深一步了. 本文通过一个个实际案例程序来讲解C语言. 研究案例一 工具: Turboc C v2.0,Debug,MASM v5.0,NASM e_putchar(ch); } 目标内容:C语言调用函数的方法与细节 我们使用的C编译器是16位的Turboc C v2.0,它生成的是16位的代码,比较简单,方便我们来研究.同时我们也需要用到DOS下的DEBUG来进行反汇编.由于我们很多案例中的程序并不是完整的C程序,所以Turboc下的Tlink并不能为我们生成目标程序,所以我将使用MASM中的link.exe,同时里面的exe2bin.com也可以为我们把exe文件转换成bin文件. 这个程序没有main函数,我们用e_main来代替main函数.这样我们能避开C语言对main函数进行一系列处理的代码.同样,我们也用e_putchar()来代替我们平常使用的putchar().这里\"e\"的意思就是\"example\". 没有了main函数,我们的C程序就没有了入口,所以在开始编译这段C代码之前,我还得写几行简单的汇编代码,通过它来作为我们程序的入口. ; C程序的入口 start.asm 按照C语言的习惯,所以C总的名词都要自动在前面加一个\"_\"下划线.所以,我们在C中的e_main函数,如果要在汇编中调用,就变成了_e_main函数.这段汇编代码只有一句:call _e_main,就是调用我们在C中的e_main函数
下面我们用Turboc C来编译这段C代码: DEBUG 这里看到蓝色的代码就是我们整个C程序的所生成的代码了. 从C源程序中我们看到,我们在e_main做的就是一件事情:调用e_putchar(ch);其中ch是传给出e_putchar的参数. MOV AX,000B 在这里我得把CALL指令解释清楚,因为在下个研究函数如何取参数的部分中大家可能会迷惑.CALL XXXX 指令简单地或就是 POP CX 好了,简单的第一个案例研究结束了.虽然就这4跳指令,但是我们已经可以看出C语言传递参数方法了.总结起来就是 研究案例二 工具: Turboc C v2.0,Debug,MASM v5.0,NASM,TASM ch=0x44; } 目标内容:C语言中函数使用参数的方法 这一节我们将使用TASM用汇编来写个标准的C函数.这一节的内容大家可能在很多汇编的书籍上都看到过.讲的是C语言和汇编语言的连接方法.可能你会奇怪,我们这里已经有了MASM,NASM两个汇编编译器了,为什么还要使用TASM另外一个汇编编译器.我不知道MASM是否可以和我们的Turboc C配合,但是TASM是肯定可以和Turboc C完全配合的.毕竟它们都是Borland公司的产品,而且Turboc C中用-S生成的汇编代码是完全按照TASM中的语法而定的.这足以见Turboc C和TASM之间\"亲密的\"关系了. 这个案例中我们主要并不研究C代码了.而是研究那个用汇编写的C函数. 0
相关文章
读者评论
发表评论 |