【实验】Arm汇编和C语言混合编程实验

 Arm汇编和C语言混合编程

实验目的和要求

1.掌握汇编程序访问C程序的方法
2.掌握汇编程序调用C程序的方法
3.掌握GNU环境下嵌入式ARM汇编的内嵌编程。

实验内容与分析设计  

编写一个程序完成交换两个变量的值。要求:

1)在GNU环境下编译完成该程序,并能成功运行。

2)改程序要求使用内嵌编程的方式实现。

3)完成对改程序的交叉编译

4)将交叉编译好的程序挂载在开发板上,并给出运行结果。

实验步骤与调试过程

第一步:进入Linux开发环境

第二步:运用内嵌的方式写两个数的交换

第三步:在PC机下寄存器使用%%eax

第四步:在Arm下寄存器使用%R0

第五步:编译运行程序

第六步:在开发板下,主要是先挂在文件,然后arm-linux-gcc编译源文件生成Arm板可执行文件

第七步:在开发板下运行编译后的可执行文件

 

实验结果

a==5,b==10(交换之前)

a==10,b==5(交换之后)

 

 

主要算法和程序清单

//PC端代码:

 

#include "stdio.h"

int main(int argc,char **argv)

{

       int a=5,b=10,temp;

       printf("a==%d,b==%d\n",a,b);

       __asm__("mov %%eax,%0":"=r"(temp):"r"(a));

       __asm__("mov %0,%1":"=r"(a):"r"(b));

       __asm__("mov %0,%%eax":"=r"(b):"r"(temp));

       

       printf("a==%d,b==%d\n",a,b);

       return 0;

}


 

//Arm:

 

#include "stdio.h"

int main(int argc,char **argv)

{

       int a=5,b=10,temp;

       printf("a==%d,b==%d\n",a,b);

       __asm__("mov %R0,%0":"=r"(temp):"r"(a));

       __asm__("mov %0,%1":"=r"(a):"r"(b));

       __asm__("mov %0,%R0":"=r"(b):"r"(temp));

       

       printf("a==%d,b==%d\n",a,b);

       return 0;

}


你可能感兴趣的:(嵌入式)