编程语言
首页 > 编程语言> > OpenEuler 中C与汇编的混合编程

OpenEuler 中C与汇编的混合编程

作者:互联网

目录

OpenEuler 中C与汇编的混合编程

在X86_64架构下实践2.5中的内容,提交代码和实践截图

准备工作

首先,查看ubuntu版本并下载gcc32位库

可见x86-64

将C代码编译成汇编代码

示例2.2

将s.c文件经过预处理、编译成s1.s文件,再将s.s、s1.s文件经过汇编、链接形成可执行文件,最后结果可见

示例2.3

与上面步骤相同。

编译过程中遇到一个问题,在汇编mysum.s文件时如果不加-m32会出现以下错误

经查资料,发现是错误原因是,在64位系统和32位系统中对于某些汇编指令的处理支持不一样造成的。在文件mysum.s中,包含指令:pushl %ebp,该指令在64位系统下就编译不过。

博客中给的解决方法是在.s文件的开头加上.code32,这样汇编确实通过了,但是在执行最后的可执行文件时会发生段错误

这是个治标不治本的方法,直接在gcc的命令中加上-m32则不会出现此问题

如果汇编.s文件加-m32,编译.c文件不加,则会出现以下错误

这是因为两份文件一个是32位一个是64位,无法匹配导致的错误

示例2.4

​ 步骤同上

标签:汇编,文件,代码,编程,示例,64,OpenEuler,编译成
来源: https://www.cnblogs.com/ptmmgmgwtam/p/15643917.html