📄 调c函数.txt
字号:
在汇编程序中调用C语言库函数
作者:强盗(aboil)
工具:TC2.0+MASM5.1 (我的主页提供下载)
主页:http://assembler.nease.net/
调用C库函数,需要c0x.obj和cx.lib,其中x表示编译模式的首字符,如果是小模式samll,这两个文件就是c0s.boj和cs.lib,注意c0s.obj中间是数字零不是字母,c0x.obj是调用库函数前做些初始化工作的,cs.lib是库函数所在的库文件.
下面这个程序使用的是小模式samll
;汇编源程序aboil.asm
.model small,c
;表示使用小模式并使用C语言函数调用函数,如果只定义.model small,那么调
;用的C函数前要加下划线,如调用printf就要改成_printf.
extrn printf:near ;用extrn伪指令声明要调用的库函数
data segment word public 'DATA'
;数据段必须定义成这样,定义类型为word,组合类型为public,段类别为DATA
;这样是为了后面连接程序文件,否则程序无法定位数据
msg db 'hello word!',0 ;C语言中字符串是以零结尾的.
data ends
DGROUP group DATA
;这句也是必须的,将数据段声明为DGROUP组中
code segment word public 'CODE' ;同上数据段声明一样,这样是为了连接程序
assume cs:code,ds:DGROUP
main proc near ;你的程序主过程必须为main,这是为了和C语言保持一致
start:
;大家注意这里,不要再自己设置数据段地址,mov ax,data mov ds,ax这就不要了
lea ax,msg ;取得字符串偏移地址
push ax ;将字符串地址压栈,相当于在C语言中传送字符指针
call printf ;调用库函数
add sp,2 ;清除参数,保持堆栈平衡
ret ;返回c0s的代码中,程序做些清理工作才退出
main endp
code ends
end start
先成masm编译aboil.asm成aboil.obj,然后用link文件连接c0x.obj和aboil.obj,调用方法如下:
link c0s+aboil 回车
注意文件名顺序不要搞错了,是c0s在前
然后link提示要连接的库,输入cs.lib
Libraries [.LIB]:cs.lib 回车
得到c0s.exe,运行,就能看到显示hello world!,这时调试下你的程序就知道,生成的程序先是运行一些初始化的指令,然后调用你的程序,然后你的程序调用库函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -