OpenEuler中C与汇编混合编程
2021/12/7 11:17:45
本文主要是介绍OpenEuler中C与汇编混合编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
OpenEuler中C与汇编混合编程
在X86_64架构下实践2.5中的内容,提交代码和实践截图
a.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); }
通过gcc -m32 -S a.c a.s
将a.c的汇编代码放入a.s中
a.s代码
.file "a.c" .text .globl A .type A, @function A: .LFB0: .cfi_startproc endbr32 pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 pushl %ebx subl $20, %esp .cfi_offset 3, -12 call __x86.get_pc_thunk.ax addl $_GLOBAL_OFFSET_TABLE_, %eax movl $4, -20(%ebp) movl $5, -16(%ebp) movl $6, -12(%ebp) subl $8, %esp pushl -16(%ebp) pushl -20(%ebp) movl %eax, %ebx call B@PLT addl $16, %esp movl %eax, -12(%ebp) nop movl -4(%ebp), %ebx leave .cfi_restore 5 .cfi_restore 3 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE0: .size A, .-A .section .text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat .globl __x86.get_pc_thunk.ax .hidden __x86.get_pc_thunk.ax .type __x86.get_pc_thunk.ax, @function __x86.get_pc_thunk.ax: .LFB1: .cfi_startproc movl (%esp), %eax ret .cfi_endproc .LFE1: .ident "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0" .section .note.GNU-stack,"",@progbits .section .note.gnu.property,"a" .align 4 .long 1f - 0f .long 4f - 1f .long 5 0: .string "GNU" 1: .align 4 .long 0xc0000002 .long 3f - 2f 2: .long 0x3 3: .align 4 4:
用汇编语言实现函数
mysum函数返回x和y的和
mysum.c
int main(){ int a,b,c; a=123;b=456; c=mysum(a,b); printf("c=%d\n",c); }
.text .global mysum,printf mysum: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax addl 12(%ebp),%eax movl %ebp,%esp pop %ebp ret
运行结果:
在汇编中调用C函数
访问全局变量并调用printf
把2.5的内容在OpenEuler中重新实践一遍,提交相关代码和截图
因为openEuler中不支持32位编程,暂时还未实现
这篇关于OpenEuler中C与汇编混合编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享
- 2024-12-24uniapp 连接之后会被立马断开是什么原因?-icode9专业技术文章分享
- 2024-12-24cdn 路径可以指定规则映射吗?-icode9专业技术文章分享
- 2024-12-24CAP:Serverless?+AI?让应用开发更简单
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享