1、为什么要混合编程

汇编语言:执行效率高;编写繁琐;

执行效率高;能够更直接地控制处理器。

c语言:可读性强,移植性好,调试方便。

1、汇编调用c函数

2、c调用汇编函数

汇编语言定义的函数(标号),需要把它定义为全局的。

在start.s中修改

在main.c中修改

3、c内嵌汇编

1、格式

输出部分:在使用汇编语句过程中,可能会把c语言中的变量的值修改了,就把这些变量放在这个部分。

输入部分:是在使用汇编时,从c语言中拿到一些参数来使用。

破坏描述部分:就是修改了某些寄存器的值,然后把对应寄存器放在这里

2、范例

这里的%0表示0号参数,汇编语句的作用是把%0处的参数写入c1寄存器,那么这个%0来自于输入部分的value,r表示一个通用寄存器,具体哪个通用寄存器,系统自己选。

所以这里在输出部分来看,意思是汇编要向c输出数据%0,假设是寄存器r0,那么c1中的读到r0,r0再存到value;破坏部分是value,它是栈中的数据,所以是memory部分被破坏。

3、优化

http://www.lxway.com/290482066.htm

Part10-C语言环境初始化-C与汇编混合编程lesson4的更多相关文章

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

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

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

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

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

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

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

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

  5. Part10-C语言环境初始化-一跃进入C大门lesson3

    1.跳转到c代码 因为内存中的代码来自于垫脚石SRAM,他们是相同的. 采用绝对跳转方式来完成. 因为我们是从汇编代码跳转到c语言的程序,所以我们要提前准备一个main.c文件. 修改makefile ...

  6. Part10-C语言环境初始化-栈初始化lesson1

    1.概念解析 ARM系统使用的是满栈! ARM采用降栈!!! 栈帧 每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧.那么所有栈帧组成了整个栈. 子函 ...

  7. Part10-C语言环境初始化-Bss段初始化lesson2

    1.BSS段的作用 初始化的全局变量存放在数据段: 局部变量存放在栈中: malloc的存放在堆: 未初始化的全局变量存放在BSS段: 找到bss段的起始与结束地址,往里面添加0,便初始化好了. 打开 ...

  8. arm:c语言和汇编混合编程

    仅作演示. 1.C和汇编可相互调用,汇编子函数格式参考 汇编:普通的函数调用的汇编代码解析 http://www.cnblogs.com/mylinux/p/4139972.html 本文演示了 : ...

  9. C与汇编混合编程

    C中调用汇编,要把汇编定义为全局的,加.global C内嵌汇编 __asm__( :汇编语句部分 :输出部分 :输入部分 :破坏描述部分 ); 用C内嵌汇编的方式:实现LED的点亮 //#defin ...

随机推荐

  1. 转载 iir直接i型和直接ii型滤波器

    1.IIR滤波器构造           之前在介绍FIR滤波器的时候,我们提到过,IIR滤波器的单位冲击响应是无限的!用差分方程来表达一个滤波器,应该是下式这个样子的.                ...

  2. LG4360 [CEOI2004]锯木厂选址

    题意 原题来自:CEOI 2004 从山顶上到山底下沿着一条直线种植了 n 棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能朝山下运.山脚下有一个锯木厂 ...

  3. mybatis参数

    分是不是用@Param注解的这两种情况, 1,使用@Param注解,就不用理parameterType xml文档直接用 字符串的值,若是一个类,class.property 2, 不使用@Param ...

  4. AppCan上下拉列表刷新

    function initBounce(funcTop, funcBottom){ uexWindow.setBounce("1"); if (!funcTop && ...

  5. 安装ElasticSearch客户端Kibana

    安装Kibana Kibana是一个为 ElasticSearch 提供的数据分析的 Web 接口.可使用它对日志进行高效的搜索.可视化.分析等各种操作. wget https://artifacts ...

  6. pt工具之pt-archiver

    # tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...

  7. spring boot 集成 rabbitmq

    1.使用默认的AmqpTemplate生产消费pojo时,pojo需要implement Serializable,否则会抛出org.springframework.amqp.AmqpExceptio ...

  8. AngularJS绑定数据

    绑定数据总共有三种方式1.{{}}最常用2.ngbind3.ng-model 主要用在input标签

  9. IntelliJ IDEA 安装 Julia 插件

    打开 IntelliJ IDEA 点击 Configure 选择 Plugins 然后点击 Browse repositories 搜索 Julia,然后点击 Install 进行安装 安装完重启一下 ...

  10. 01_java之基本语法

    01java语言概述 * A: java语言概述 * a: Java是sun公司开发的一门编程语言,目前被Oracle公司收购,编程语言就是用来编写软件的. * b: Java的应用 * 开发QQ.迅 ...