免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 878 | 回复: 0
打印 上一主题 下一主题

GNU ARM 汇编 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:51 |只看该作者 |倒序浏览

/*

 * GNU ARM 汇编程序

 */

 

   .text

   .global _start

   .global myfunc

_start:         @ GNU 链接器需要_start

 

   bl myfunc @ 函数调用

 

myfunc:

   @ 函数体

   mov pc, lr   @函数返回

 

   .end

 

/*

 * GCC 内嵌汇编

 */

 

#include <stdio.h>

 

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 <stdio.h>

#include <stdlib.h>

 

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 执行文件查看效果

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP