资源描述:
《学习纪录---库函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.C语言库函数2007-06-0422:12C语言库函数,调用C库函数,需要c0x.obj和cx.lib,其中x表示编译模式的首字符,如果是小模式samll,这两个文件就是c0s.boj和cs.lib,注意c0s.obj中间是数字调用C库函数,需要c0x.obj和cx.lib,其中x表示编译模式的首字符,如果是小模式samll,这两个文件就是c0s.boj和cs.lib,注意c0s.obj中间是数字零不是字母,c0x.obj是调用库函数前做些初始化工作的,cs.lib是库函数所在的库文件. 下面这个程序使用的是小模式samll;汇编源程序aboil.asm.modelsmall,c
2、 ;表示使用小模式并使用C语言函数调用函数,如果只定义.modelsmall,那么调;用的C函数前要加下划线,如调用printf就要改成_printf.extrnprintf:near ;用extrn伪指令声明要调用的库函数datasegmentwordpublic'DATA' ;数据段必须定义成这样,定义类型为word,组合类型为public,段类别为DATA;这样是为了后面连接程序文件,否则程序无法定位数据msgdb'helloword!',0 ;C语言中字符串是以零结尾的.dataendsDGROUPgroupDATA ;这句也是必须的,将数据段声明为DGROUP
3、组中codesegmentwordpublic'CODE' ;同上数据段声明一样,这样是为了连接程序 assumecs:code,ds:DGROUPmainprocnear ;你的程序主过程必须为main,这是为了和C语言保持一致start: ;大家注意这里,不要再自己设置数据段地址,movax,data movds,ax这就不要了 leaax,msg ;取得字符串偏移地址 pushax ;将字符串地址压栈,相当于在C语言中传送字符指针 callprintf
4、 ;调用库函数 addsp,2 ;清除参数,保持堆栈平衡 ret ;返回c0s的代码中,程序做些清理工作才退出mainendp codeendsend start 先成masm编译aboil.asm成aboil.obj,然后用link文件连接c0x.obj和aboil.obj,调用方法如下:linkc0s+aboil 回车注意文件名顺序不要搞错了,是c0s在前然后link提示要连接的库,输入cs.libLibraries[.LIB]:cs.lib回车 得到c0s.exe,运行,就能看到显示hello
5、world!,这时调试下你的程序就知道,生成的程序先是运行一些初始化的指令,然后调用你的程序,然后你的程序调用库函数 2.如果我要调用abs()函数 就一定要在开头加上#include 编译器就会把math.h,替换到我的文件中。。。 假如我只想用abs()函数,而不用其他的。那不是浪费了好多空间??? 还有,c语言是如何保证源代码封装的呢??把函数库加密吗????对于问题1: 不会的。 只有用到的函数才会链接到你的程序中。 只要你愿意,不加头文件,直接申明函数原型也是可以的。 问题2: 源代码封装怎么会和加密联系起来?就你自己写的c程序,别人是不可能
6、通过反编译得到你的源码的。Top2楼coldwindtang(风)回复于2006-08-2100:32:51得分0编译器在编译时,只会编译你用到的函数,如果你把math.h包含到程序中,但没有用一个相关的数学库函数,那么你的程序大小是不会改变的。 你可以做一个小小的实验就可以证明。先写一个程序,编译好记下大小,然后加上一个头文件,比如或什么的,然后再编译,只要没有用到头文件中的函数大小是一样的! 至于你的第二个问题:c语言是如何保证源代码封装。我记得我以后打开过头文件看过,都是明码没有加密过的,所以我认为C语言并没有保证源代码封装。不过这一点
7、我并不确信。希望其他人能解决你的这个问题。3.常用库函数absread()读磁盘绝对扇区函数原形:intabsread(intdrive,intnum,intsectnum,void*buf)功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。参数:drive=0对应A盘,drive=1对应B盘。返回值: