c语言函数里怎么调用数组_C语言与汇编函数的调用方式

f714e5d32cd77e1e35d56f42e5501317.png

C语言写的函数和汇编写的函数之间可以相互调用,分别编译成机器码后由链接器将其链接成可执行程序。根据“《30天自制操作系统》”中的描述可以概况成如下的形式。

974608b7866d23e5a342e5e262b31634.png

1. C语言可调用的汇编函数

1.1 在汇编程序中定义函数

声明函数的属性为 GLOBAL

GLOBAL _函数名

在汇编里函数名 _函数名

 _函数名: 
     ... ;汇编语句,可以调用[ESP+4]的值 
     RET  

1.2 C语言程序中调用汇编函数

开头声明函数

void 函数名(int *;int *;...);

使用函数名调用汇编函数

注意函数前面并没有 "_"

1.3 汇编函数可以带参数,参数会存放在

第一个数字的存放地址:[ESP+4]

第二个数字的存放地址:[ESP+8]

...未说明个数限制

1.4 例子

汇编函数naskfunc.nas内部分代码

    ...  
    GLOBAL        _io_out8, _io_out16, _io_out32  
    ... 
    _io_out8:        ; void io_out8(int port, int data);  
        MOV                EDX,[ESP+4]                ; port  
        MOV                AL,[ESP+8]                ; data  
        OUT                DX,AL  
       RET 

C语言调用时的部分代码

    ...  
    void io_out8(int port, int data);  
    ...  
    io_out8(0x03c8, start);  

2. C语言写的其他C语言程序可调用的函数

2.1 写好函数内容

C语言外部函数是一种可在自身所处的源文件及其他源文件中都能被调用的函数.外部函数的作用域是整个项目.

extern int fun(int a, int b);

定义函数时忽略extern和static,则默认为extern函数.

static

内部函数,限定在本源码文件中使用,不能被其他代码文件调用.

2.2 在头文件件中加入该函数的声明

2.3 在需要调用的源码前面加上头文件名(#include"***.h")

库文件使用#include<***.h>

自定义头文件使用#include"***.h"

2.4 程序中直接使用函数名进行调用

3. 汇编语言程序可调用的C语言函数

3.1 在写好C语言函数内容

函数属性为extern(默认情况)

例如:

 void inthandler21(int *esp)  
 {  
     ...  
 }  

3.2 在需要调用的汇编程序前面加上说明

使用EXTERN声明函数的内容在其他程序里,“EXTERN _函数名,_函数名”

例如:

EXTERN _inthandler21, _inthandler27, _inthandler2c

3.3 汇编程序中调用方式

在汇编程序中使用“CALL _函数名”的形式调用

实例:

         _asm_inthandler21:  
             ...  
            CALL        _inthandler21  
            ...  

知乎&微信公众号:告别小白

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值