在c语言中调用汇编语言程序有哪些方法,汇编程序调用c程序

  在c语言中调用汇编语言程序有哪些方法,汇编程序调用c程序

  本文中目录C函数相互调用,C程序调用汇编程序,汇编程序调用C程序。

  赵炯;《Linux 内核完全注释 0.11 修正版 V3.0》第三章。

  c函数互相调用。CPU上的大多数程序使用堆栈来支持函数调用操作。堆栈用于传递函数参数,存储返回信息,临时保存寄存器的初始值以备恢复,以及存储本地数据。

  单个函数调用操作使用的堆栈部分称为堆栈帧结构。在函数执行过程中,堆栈指针esp会随着数据进出堆栈而移动,所以函数中的大部分数据都是基于帧指针ebp来访问的:

  Ebp:帧指针;esp堆栈指针;

  对于函数A调用函数B的情况,传递给B的参数包含在A的堆栈帧中,当A调用B时,函数A的返回地址(调用返回后继续执行的指令的地址)被推入堆栈,堆栈中的这个位置也明确表示A的堆栈帧结束,B的堆栈帧从后续的堆栈部分开始。

  为了保证某个时刻只有一个函数在执行,当调用者调用其他函数时,被调用者不会修改或覆盖调用者以后要使用的寄存器内容。Intel CPU采用所有函数必须遵守的寄存器用法:1。寄存器eax、edx和ecx的内容必须由调用者自己保存;2.ebx、esi、edi必须由被叫方保管;3.ebp和esp也需要被调用者保存。

  void swap(int* a,int* b)

  {

  int c;

  c=*a,*a=*b,* b=c;

  }

  int main()

  {

  int a,b;

  a=16b=32

  互换(a,b);

  返回a-b;

  }主堆栈框架。保存局部变量a和b,函数调用的参数b和a,返回地址。交换堆栈帧。按照约定,形成堆栈框架(保存ebp,esp),用add/sub取函数参数,一步到位离开堆栈框架。

  c语言在调用函数时,将被调用函数的参数值临时存储在堆栈上。

  堆栈上的最后一个参数,越靠近C函数的参数左侧。

  c程序调用汇编程序。C程序调用汇编函数的方法与汇编程序调用C函数的原理相同,但在Linux内核程序中不常用。调用方法的重点还是在确定函数参数在栈中的位置。如果调用的汇编语言程序很短,可以在C程序中直接使用内联汇编。

  汇编程序调用C,在汇编中调用C函数相对自由。只要栈中适当位置的内容可以作为C函数的参数。

  如果您直接调用func(),而没有按下专门用于调用它的参数,func()函数仍将使用堆栈中EIP位置上方的其他内容作为自己的参数。

  调用函数返回后,汇编器需要清除之前推入堆栈的函数参数。

  ,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: