Chinaunix首页 | 论坛 | 博客
  • 博客访问: 836869
  • 博文数量: 489
  • 博客积分: 475
  • 博客等级: 下士
  • 技术积分: 3087
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 16:28
文章分类

全部博文(489)

文章存档

2013年(7)

2012年(301)

2011年(181)

分类:

2011-12-22 21:44:01

原文地址:GNU ARM 汇编 作者:luozhiyong131

/*

 * GNU ARM 汇编程序

 */

 

   .text

   .global _start

   .global myfunc

_start:         @ GNU 链接器需要_start

 

   bl myfunc @ 函数调用

 

myfunc:

   @ 函数体

   mov pc, lr   @函数返回

 

   .end

 

/*

 * GCC 内嵌汇编

 */

 

#include

 

int fun(int val)

{

   int ret;

 

   /*移位操作*/

   __asm__(

      "mov %[result], %[value], ror #1"  /*汇编语句模板*/

      : [result] "=r" (ret)          /*输出部分, 移位结果*/

      : [value]  "r"  (val)             /*输入部分, 移位值 */

                                 /*无破坏描述 */

   );

 

   return ret;

}

 

int main(void)

{

   int ret;

   ret = fun(8);

 

   printf("ret = %d\n", ret);

   return 0;

}

 

 

 

 

/* GNU ARM 汇编程序

 * C语言调用汇编实现字符串对换

 */

 

#include

#include

 

extern void strswp(char *str1, char *str2);

 

int main(void)

{

   char str1[10] = "123456789";

   char str2[10] = "abcde";

  

   strswp(str1, str2);    //调汇编函数

 

   printf("buf1 = %s\nbuf2 = %s\n",str1, str2);

   return 0;

}

 

@ 汇编文件

   .text

   .global strswp

 

strswp:

   @取出字节

   ldrb v1, [a1]

   ldrb v2, [a2]

  

   @结束判断

   cmp v1, #0

   cmpne v2, #0

   beq quit

  

   @数据对换

   strb v1, [a2], #1 

   strb v2, [a1], #1 

   b strswp

 

quit:

   mov pc, lr

   .end

 

模拟器(ARM qemu-arm.rar   

使用交叉编译器编译上面写好的 GNUARM文件,在编译时使用静态编译,加上(-static)选项,把模拟器拷到/usr/bin/目录下,使用命令qemu-arm file 执行文件查看效果

 

阅读(350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~