常用的有三种方式:

在C/C++代码中嵌入汇编指令

汇编调用C/C++

C/C++中调用汇编

实例一:

在C中嵌入汇编:

void string_copy(char *dst,const char *str)

{

  char ch;

  __asm

  {

    loop

      LDRB  ch,[str],#1

      STRB  ch,[dst],#1

      CMP    ch,#0

      BNE loop

  }

}

int main()

{

  char *a="hello world!"

  char b[64];

  string_copy(a,b);

  return 0;

}

实例2:在C语言中调用汇编

C语言中调用汇编步骤:

1、汇编export

2、C语言定义 extern function

3、C语言使用

c语言和汇编语言之间的参数传递是通过对应的用R0-R3来进行的,即R0传递第一个参数,R1传递第二个参数,多余4个时借助于栈完成。函数的返回值通过R0来传递。这个规定叫做ATCPS(ARM Thumb Procedure Call Standard)

myArm.s

  AREA  myARM,CODE ,READONLY

  export my_strcopy

my_strcopy

      loop

        LDRB R4,[R0],#1

        CMP  R4,#0

        BEQ OVER

        STRB R4,[R1],#1

        B loop

      OVER

           end

myMain.c

extern void my_strcopy(char *dtr,char*str);

int main()

{

  char *a="hello world!"

  char b[64];

  my_strcopy(a,b);

  return 0;

}

实例3:汇编调用C语言

这个用的最多

汇编中使用C语言步骤:

c语言实现函数

汇编import函数名

BL函数名

myArm.s

  AREA  myARM,CODE ,READONLY

  IMPORT c_fun

  ENTRY

start

  mov R0,#1

  mov R1,#2

  mov R2,#3

  BL  c_fun

  end

myMain.c

int c_fun(int a,int b,int c)//从汇编中调到这里,此时a=1,b=2,c=3

{

  return a+b+c;//从这里再返回去,此时R0=6;

}

汇编和C/C++的混合编程方式的更多相关文章

  1. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

  2. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  3. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

  4. VC 与Matlab混合编程之引擎操作详解

    Visual C++ 是当前主流的应用程序开发环境之一,开发环境强大,开发的程序执行速度快.但在科学计算方面函数库显得不够丰富.读取.显示数据图形不方便. Matlab 是一款将数值分析.矩阵计算.信 ...

  5. ARM中C和汇编混合编程及示例(转)

    在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...

  6. C51与汇编混合编程详解

    C51和汇编混合编程(1)-C语言中嵌入汇编 1.在 C文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ;Assembler Code Here #pragma ENDASM ...

  7. c语言环境初始化&c语言和汇编混合编程

    bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启 ...

  8. 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程

    最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...

  9. Part10-C语言环境初始化-C与汇编混合编程lesson4

    1.为什么要混合编程 汇编语言:执行效率高:编写繁琐: 执行效率高:能够更直接地控制处理器. c语言:可读性强,移植性好,调试方便. 1.汇编调用c函数 2.c调用汇编函数 汇编语言定义的函数(标号) ...

随机推荐

  1. MYSQL主从复制--传统方式

    目录 0.MYSQL主从复制概述 1.主从复制的作用 2.主从复制存在的问题 3.主从复制问题的解决办法 4.主从复制的原理(面试必问) 1.MYSQL主从复制-传统方式 1.环境准备 2.Maste ...

  2. LG3092 「USACO2013NOV」No Change 状压DP

    问题描述 https://www.luogu.org/problem/P3092 题解 观察到 \(k \le 16\) ,自然想到对 \(k\) 状压. 设 \(opt[i]\) 代表使用硬币状况为 ...

  3. js如何手写一个new

    手写new 看一下正常使用new function Dog(name){ this.name = name } Dog.prototype.sayName = function(){ console. ...

  4. 基础知识 Asp.Net MVC EF各版本区别

    原文:https://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC 2 ...

  5. 修改SQL Server中的计算机名

    安装SQL Server之后,如果修改计算机名会导致登录异常,或者某些功能不能用,例如配置Replication时会提示如下错误: SQL Server replication requires th ...

  6. CF1254D Tree Queries(树链剖分)

    出题人的做法是 \(O(n\sqrt{n\log n})\),结果这场结束后就被狂喷,一群人给出了 \(O(n\sqrt{n})\) 做法,甚至 \(O(n\log n)\) 都出来了-- 首先发现, ...

  7. NopCommerce 4.2的安装与运行

    一.关于NopCommerce NopCommerce是国外ASP.Net领域一个高质量的B2C开源电商项目,最新版本4.2基于ASP.NET Core MVC 2.2和EF Core 2.2开发,其 ...

  8. golang数据结构之选择排序

    //SelectSort 选择排序 func SelectSort(arr *[]int) { ; i < len(arr); i++ { tmp := arr[i] index := i ; ...

  9. IT兄弟连 Java语法教程 流程控制语句 控制循环结构2

    使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...

  10. Linux中的buff/cache内存

    我们用free.top等相关能够查询到当前内存的使用情况的命令时,总会有一个buff/cache让我们很困惑. buffer 即写如磁盘时,先保存到磁盘缓冲区(buffer),然后再写入到磁盘. ca ...