Linux C语言内联汇编-函数调用_g++ 内嵌汇编 call-程序员宅基地

技术标签: C/C++  汇编  内联汇编  

int func(int a, int b, int c, int d, int e, int x, int y, int z){
    return 1;
}

int main() {

    res = func(1, 2, 3, 4, 5, 6, 7, 8);
    cout << res;
    return 0;
}

g++ -S查看汇编

subq	$16, %rsp
pushq	$8
pushq	$7
movl	$6, %r9d
movl	$5, %r8d
movl	$4, %ecx
movl	$3, %edx
movl	$2, %esi
movl	$1, %edi
call	_Z4funciiiiiiii
addq	$16, %rsp
movl	%eax, -4(%rbp)

 

从右向左依次传参;
x86_64 Linux貌似就这一种调用约定,6个以内的使用个寄存器,其他使用堆栈参考:x64 linux c 调用约定

x86 Linux全部使用堆栈传参,从右到左一次入栈;

 

其他参考:C语言函数调用约定

了解调用规则后,再看汇编应该怎么写;

int func(int x, int y){
    return x * y;
}

int main() {

    int res, agrx = 2, agry = 3;

    __asm__("movl %2, %%esi;"   //传参
            "movl %1, %%edi;"
            "call %3;"          //调用func
            "movl %%eax, %0;"   //返回值在%eax,res = %eax;
            :"=r"(res)
            :"r"(agry), "r"(agrx), "r"(func)
            );

    cout << res;

    return 0;
}

查看对应的.s文件:

	subq	$16, %rsp
	movl	$2, -4(%rbp)
	movl	$3, -8(%rbp)
	movl	-8(%rbp), %eax
	movl	-4(%rbp), %edx
	leaq	_Z4funcii(%rip), %rcx
#APP
# 36 "main.cpp" 1
	movl %edx, %esi;movl %eax, %edi;call %rcx;movl %eax, %eax;
# 0 "" 2
#NO_APP
	movl	%eax, -12(%rbp)

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/M_N_N/article/details/80785609

智能推荐

浮出雾海的真实:从ET大脑到产业AI-程序员宅基地

文章浏览阅读420次。最近我们一直在探讨这样一个问题:为什么AI飞速发展,普通人还是觉得距离AI非常遥远?实际上,推而广之这可能不单单是媒体和技术爱好者的疑问。上升到更大的国家与社会经济层面,对真实可用、能快速见到实效的AI需求已经十分迫切。从“新一代人工智能”政策出台,到国家AI创新开放平台公布首批名单,再到近期工信部发布三年规划,可以看到政策层面一直在将AI向实用化、产业化、融合化方向推进。换言之,如何让浮在实验室

免费教材丨第51期:数学基础课程----概率论教程、机器学习中的数学基础-程序员宅基地

文章浏览阅读1.3k次。小编说 过去几个月里,有不少人联系我,向我表达他们对人工智能、数据科学、对利用机器学习技术探索统计规律性,开发数据驱动的产品的热情。但是,我发现他们中有些人实际上缺少为了获取有用结果的必要的数学直觉和框架。所以接下来,我们会分几期发放一些数学基础书籍和数学理论相关的教学视频哦,有需要的朋友记得按时领取哦!之前我们发放的是《漫画线性代数》和《微积分超入门》两本书籍以及北京大学张筑生老师的《数_机器学习 概率论 教材

上传头像(上传文件)功能与from表单一起提交_修改用户头像 头像和表单一起提交吗-程序员宅基地

文章浏览阅读6.5k次。工作中很容易遇到一个from表单中除了填一些基本信息外,还需要上传个头像或者文件也实属正常需求,如果是两者功能拆分开实现还是挺容易的,但是如果要一起提交的话,是得注意一下提交方式;在这里呢我记录一下,方便自己以后可以使用查看,也希望能帮到大家。如果需要上传,下载文件和上传头像后回显代码。请选择:最简单的js实现上传头像并正常回显javaWeb文件上传下载(复制粘贴即可使用)ja..._修改用户头像 头像和表单一起提交吗

Spring Boot + Shiro 使用 DefaultWebSessionManager 导致 Druid Monitor 监听不到 Session 问题解决方案_若依druid websession监控没有-程序员宅基地

文章浏览阅读2.9k次。一、问题配置项目中使用了 shiro-spring 快速集成 Shiro 到当前 Spring 环境中,配置如下:pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org_若依druid websession监控没有

后缀自动机(SAM)学习指南_sam编程是什么-程序员宅基地

文章浏览阅读4.9k次。*在学习后缀自动机之前需要熟练掌握WA自动机、RE自动机与TLE自动机*什么是后缀自动机后缀自动机 Suffix Automaton (SAM) 是一个用 O(n) 的复杂度构造,能够接受一个字符串所有后缀的自动机。它最早在陈立杰的 2012 年 noi 冬令营讲稿中提到。在2013年的一场多校联合训练中,陈立杰出的 hdu 4622 可以用 SAM 轻松水过,由此 S_sam编程是什么

将U盘进行加密设置(备注:windows11专业版 版本:23H2)_win11u盘怎么设置密码-程序员宅基地

文章浏览阅读184次。将U盘进行加密设置(备注:windows11专业版 版本:23H2)_win11u盘怎么设置密码

随便推点

[OpenGL] 体积雾-程序员宅基地

文章浏览阅读4.5k次。开发环境:Qt, OpenGL(注 : 水平有限,实现细节不一定完全正确,可能相比一般的体积雾实现过程会显得过于复杂,所以仅供参考;动图有闪烁和条纹现象是录屏软件的问题)概念引入 体积雾,简单来说就是有体积的区域雾,在体积雾内的物体,会显得模糊;而在体积雾外的物体,则是物体的原颜色。 现在我们已经明确了,如果物体落在体积雾内,我们需要在雾的颜色和物体..._体积雾

为tmux和vim开启斜体和真彩色-程序员宅基地

文章浏览阅读1.3k次。为tmux和vim开启斜体和真彩色这篇文章是我上一篇博客:为tmux和vim开启真彩色的拓展一般终端会支持斜体,但是tmux中是无法显示斜体的。网上的很多教程都已经过时,今天我来分享下如何在tmux中启用斜体吧。参考:reference1. 检查tmux中能否显示斜体echo -e "\e[3mitalic\e[23m"2. 创建新的终端类型我们创建一种新的终端类型tmux-256c...

基于Eclipse的Hadoop应用开发环境配置_通过eclipse安装()可实现hadoop开发环境的图形化-程序员宅基地

文章浏览阅读1.2k次。Hadoop集群(第7期)_Eclipse开发环境设置1、Hadoop开发环境简介1.1 Hadoop集群简介  Java版本:jdk-6u31-linux-i586.bin  Linux系统:CentOS6.0  Hadoop版本:hadoop-1.0.0.tar.gz1.2 Windows开发简介  Java版本:jdk-6u31-win_通过eclipse安装()可实现hadoop开发环境的图形化

C++ sort函数详解_sort(起始地址,末尾地址+1)意思-程序员宅基地

文章浏览阅读748次,点赞2次,收藏4次。Sort函数,是C++里面常用函数,一般用于排序 有三个参数: 在 algorithm 函数包里面(1)第一个是要排序的数组的起始地址。(2)第二个是结束的地址(最后一位要排序的地址的下一地址)(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。代码示例:#include <iostream>#i..._sort(起始地址,末尾地址+1)意思

排序问题-程序员宅基地

文章浏览阅读255次。2019独角兽企业重金招聘Python工程师标准>>> ..._documentelement.getelementsbytagname("orderno")[0].firstchild 怎么判断有没da

myeclipse安装反编译插件-程序员宅基地

文章浏览阅读2.4k次。由于需要查看class文件的源码,上网看了有好多方法说的不够详细,自己整理了相关步骤:一、准备工作1)jad.exe 下载地址:http://varaneckas.com/jad/2)net.sf.jadclipse_3.3.0.jar http://prdownloads.sourceforge.net/jadclipse/net.sf.jadclipse_3.3.0.ja