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)
Ab3d.DXEngine 非常易于使用。您可以使用 WPF 3D 对象来定义 3D 场景、相机和灯光。更重要的是,它与Ab3d.PowerToys库配合得很好——终极 3D 工具包,为您提供了许多构建块来创建 3D 应用程序。Ab3d.DXEngine 是一种超快的 3D 渲染引擎,可用于 .Net 桌面应用程序。Ab3d.DXEngine采用超快的多线程渲染技术,可以充分利用显卡,提供与使用C++时几乎相同的极致性能。
前言:本文我们介绍下ADC采样时钟的抖动(Jitter)参数对ADC采样的影响,主要介绍以下内容:时钟抖动的构成 时钟抖动对ADC SNR的影响 如何计算时钟抖动 如何优化时钟抖动1.采样理论高速ADC使用外部输入时钟对模拟输入信号进行采样,如图1所示。图中显示了输入采样时钟抖动示意图。图1、ADC采样输入模拟信号的频率越高,由于时钟抖动导致的采样信号幅度变化越大,这点在图2中显示的非常明显。输入信号频率为F2=100MHz时,采样幅度变化如图红色虚线所示,明显大于输入信号F1=
By MulinB 最近项目需要模拟一个3D场景飞机飞行的简单演示,主要功能就是提供一个比较大的地形高程图和一个飞机飞行路线,能在三维下显示演示飞机飞行。感觉以前自己见过不少类似的游戏,这无非是第一个人称射击类或者模拟飞行类的游戏的简化版,所以从避免重复制造轮子的角度决定查一下开源游戏引擎,看看有没有类似的可以很快开发出第一人称射击类游戏的引擎。经过查看了一些网上的评论和对比文章决定使用三
今天打开以前的vue项目时,发现所有的项目都打不开 报错了。这个错误[email protected] dev: webpack-dev-server --inline --progress --config build/webpack.dev.conf.js第一反应以为是webpack版本冲突问题,可是以前的项目一直运行正常啊,怎么会突然不行了,搜了一下都是前两个方面的问题。1.就是webpack版本问题,uninstall webpack 重新安装2.说是node-modules依赖有问题了,删掉 重新
从视频中提取音频安装 moviepypip install moviepy相关代码:audio_file = work_path + '\\out.wav'video = VideoFileClip(video_file)video.audio.write_audiofile(audio_file,ffmpeg_params=['-ar','16000','-ac','1'])根据静音对音频分段使...
1、127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。2、localhost是本地DNS解析的127.0.0.1的域名,这个你打开本机的hosts文件就可以看到,一般位于c:\wi...
/// /// 保存AssetBundle文件到本地/// IEnumerator SaveAssetBundle(string path){while (!Caching.ready)yield return null;using (UnityWebRequest uwr = UnityWebRequest.Get(path))//路径名(例如"file://worksapce/cube.ass...
每个人都想找一份高薪的工作,而程序员就是一份让人心仪的工作,毕业生入职就可以拿到差不多上万块了,只要干个一两年肯定能够月薪上万的,这无疑让不少人都非常眼红。程序员月薪两万,工作带来了秃顶,如今要被裁员,网友:黑心企业不过就有网友表示自己当程序员月薪两万,如今已经工作了十年,工作换来了秃顶,头发已经是越来越少了,如今公司要对老员工进行裁员,他已经看到了领导手里的裁员名单,就有自己的名字。辛苦...
pdo,有不局限数据库,和防止sql注入等很多优点,也是php官方推荐的方式,所以花点时间写个pdo数据库操作类!<?phpclass PDOX{ private $config; private $pdo; public $lastSql = ''; /** * 事务开启状态 * @var */ public $Transact
webpack-dev-serverwebpack-dev-server实际上相当于启用了一个express的Http服务器+调用webpack-dev-middleware。它的作用主要是用来伺服资源文件。这个Http服务器和client使用了websocket通讯协议,原始文件作出改动后,webpack-dev-server会用webpack实时的编译,再用webpack-dev-midd...
android 打包 生成apk 出现的问题 javascript失效 json解析失败 解决方案
1. 新建web文件夹项目包初始化包命令npm init -y 得到package.json使用npm命令安装需要用到的包webpack5类npm i webpack webpack-cli -Dcss类loadernpm i less less-loader style-loader css-loader -Dvue类npm i vue axiosvue类loadernpm i vue-loader vue-template-compiler -Dbabel转译类loa