OpenEuler 中C与汇编的混合编程
2.5.1用汇编代码编程
将C代码编译成汇编代码
C代码:
/**********a.c file********/
#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);
}
汇编代码
.file "a.c"
.text
.globl A
.type A, @function
A:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $24, %esp
movl $4, -12(%ebp)
movl $5, -16(%ebp)
movl $6, -20(%ebp)
subl $8, %esp
pushl -16(%ebp)
pushl -12(%ebp)
call B
addl $16, %esp
movl %eax, -20(%ebp)
nop
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.size A, .-A
.ident "GCC: (Uos 8.3.0.3-3+rebuild) 8.3.0"
.section .note.GNU-stack,"",@progbits
2.5.2用汇编语言实现函数
示例2.2
获取CPU寄存器
main.c file:
#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 file:
.section .text
.global get_esp, get_ebp
get_esp:
movl %esp, %eax
ret
get_ebp:
movl %ebp, %eax
ret
编译运行截图

示例2.3
假设int mysum(int x,int y)返回x和y的和。用汇编语言编写mysum函数。
mysum.s file:
.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 file:
#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);
}
编译运行截图

2.5.3从汇编中调用C函数
示例2.4:访问全局变量并调用printf()
c file
#include <stdio.h>
int a,b;
extern int sub();
int main()
{
a = 100; b = 200;
sub();
}
汇编代码:
.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与汇编的混合编程的更多相关文章
- ARM中C和汇编混合编程及示例(转)
在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...
- ARM汇编与C混合编程
GNU内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编 程序中使用饱和算术运算(Saturati ...
- Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结
前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...
- [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int.long.float等)的变量,也可以是一些复合数据类型(如 arr ...
- KEIL的混合编程操作
http://hi.baidu.com/txz01/item/21ad9d75913a7b28d7a89c12 这一篇来讲讲混合编程的问题,在网上找了一下,讲混合编程的文件章也有不少,但进行实例操作讲 ...
- 【C/C++】struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
本文为笔者阅读<嵌入式C精华>的摘录,推荐一下,不错的书 一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int ...
- C# 托管和非托管混合编程
在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是 ...
- matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)
matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...
- FFT原理及C++与MATLAB混合编程详细介绍
一:FFT原理 1.1 DFT计算 在一个周期内的离散傅里叶级数(DFS)变换定义为离散傅里叶变换(DFT). \[\begin{cases} X(k) = \sum_{n=0}^{N-1}x(n)W ...
- 混合编程:如何用python11调用C++
摘要:在实际开发过程中,免不了涉及到混合编程,比如,对于python这种脚本语言,性能还是有限的,在一些对性能要求高的情景下面,还是需要使用c/c++来完成. 那怎样做呢?我们能使用pybind11作 ...
随机推荐
- appcrawler(2.1.3)采坑
转发:https://www.jianshu.com/p/d97290136bad 遇到的坑: 问题1: Exception in thread "main" org.openqa ...
- HCIP-进阶实验06-多实例生成树安全部署
HCIP-ICT进阶实验06-多实例生成树安全部署 1 实验需求 1.1 实验拓扑 1.2 实验环境说明 IP地址规划表: 设备 接口 IP 地址 备注 SW1 VLANIF10 192.168.10 ...
- Laravel ORM 常用方法
1. 数据查询 ->find($id); //需要一个主键$id并返回一个模型对象.若不存在则返回null ->findOrFail($id); //需要一个主键$id并返回一个模型对 ...
- flutter 图片加载缓存以及圆角的实现
使用最多的图片缓存组建库cached_network_image 地址:cached_network_image 配置: dependencies: cached_network_image: ^2. ...
- Lombok Requires Annotation Processing
当你打开一个项目启动的时候报这样的错误 这种错误 打开这个设置
- Nmon 监控分析工具使用
一.简介 1.nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,记录的信息比较全面, 并且能输出结果到文件中,然后通过nmon ...
- Django的urls的配置
在一个请求到达的时候,最先达到的就是视图层,然后根据url映射到视图函数.这一部分我们来说明url的配置. 概述 为了给一个应用设计URL,你需要创建一个Python 模块,通常称为URLconf(U ...
- 模型admin 外键的相关操作
....@admin.register(MyModel)class MyModelAdmin(admin.ModelAdmin): def method(self, request, queryset ...
- java创建对象时内存发生了什么
Student s = new Student();\ 把Student.class文件加载到内存 在栈内存给s变量开辟一个空间 在堆内存为学生对象申请一个空间 给成员变量进行默认初始化 给成员变量显 ...
- 01 流程控制之for循环
'''1.什么是for循环 循环就是重复做某件事,for循环是python提供第二种循环机制2.为何要有for循环 理论上for循环能做的事情,while循环都可以做 之所以要有for循环,是因为fo ...