OpenEuler 中C与汇编的混合编程
2021/12/5 20:48:49
本文主要是介绍OpenEuler 中C与汇编的混合编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
------------恢复内容开始------------
在X86_64架构下实践2.5中的内容,提交代码和实践截图 首先使用下面代码下载gcc32位库
sudo apt-get install gcc-multilib g++-multilib module-assistant
1.将C代码编译成汇编代码:
C代码:
#include <stdio.h> extern int B(); int A(int x,int y) { int d,e,f; d = 4;e = 5;f = 6; f = B(d,e); }
汇编代码:
2.用汇编语言实现函数
获取CPU寄存器
main.c
#include <stdio.h> extern int get_ebp(); extern int get_esp(); int main() { int ebp, esp; ebp = get_ebp(); esp = get_esp(); printf("ebp=%8x esp=%8x\n",ebp,esp); }
s.s
.section .text .global get_esp, get_ebp get_esp: movl %esp, %eax ret get_ebp: movl %ebp, %eax ret
运行截图:
3.用汇编编写mysum函数
mysum.s
.text .global mysum,printf mysum: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax addl 12(%ebp), %eax movl %ebp, %esp pop %ebp ret
mysum.c
#include <stdio.h> extern int mysum(int a, int b); int main() { int a,b,c; a = 123; b = 456; c = mysum(a,b); printf("c = %d\n",c); }
运行截图:
3.从汇编调用C函数
b.c
#include <stdio.h> int a,b; extern int sub(); int main() { a = 100; b = 200; sub(); }
b.s
.text .global sub, a, b, printf sub: pushl %ebp movl %esp, %ebp pushl b pushl a pushl $fmt call printf addl $12, %esp movl %ebp,%esp pop %ebp ret .data fmt: .asciz "a = %d b = %d\n"
运行截图:
这篇关于OpenEuler 中C与汇编的混合编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享