2012年(1008)
分类:
2012-08-01 11:12:51
原文地址: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
使用交叉编译器编译上面写好的 GNU—ARM文件,在编译时使用静态编译,加上(-static)选项,把模拟器拷到/usr/bin/目录下,使用命令qemu-arm file 执行文件查看效果