arm编程,关于C函数中嵌入汇编和寄存器变量的混合使用方法,例子简单,但是十分有启迪作用,自己看就明白了,编译工具:arm-linux-gcc,方式:arm-linux-gcc -S main.c -o main.s。源码如下。编写不易,倘若转载,请注明下出处,谢谢!
//main.c
#include <stdio.h>
void main(void)
{
register int Regx asm("r1");
register int Regy asm("r2");
register int RegR6 asm("r6");
register int RegR8 asm("r8");
int sum;
asm(
"mov r1,#12\r\n"
"mov r2,#14\r\n"
);
RegR6=Regx+Regy;
sum=RegR6;
RegR8=sum;
}
//main.s
.arch armv4t
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 18, 4
.file "main.c"
.text
.align 2
.global main
.type main, %function
main:
@ Function supports interworking.
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
stmfd sp!, {r6, r8, fp}
add fp, sp, #8
sub sp, sp, #12
#APP
@ 10 "main.c" 1
mov r1,#12 #Regx
mov r2,#14 <span style="font-family: Arial, Helvetica, sans-serif;">#Regy</span>
@ 0 "" 2
mov r3, r2
add r3, r1, r3
mov r6, r3 #RegR6
str r6, [fp, #-16] #<span style="font-family: Arial, Helvetica, sans-serif;">[fp, #-16]即sum</span>
ldr r8, [fp, #-16] #RegR8即<span style="font-family: Arial, Helvetica, sans-serif;">r8</span>
sub sp, fp, #8
ldmfd sp!, {r6, r8, fp}
bx lr
.size main, .-main
.ident "GCC: (ctng-1.6.1) 4.4.3"
.section .note.GNU-stack,"",%progbits
注意观察main.s里面的注释,相信聪明的你很快就明白了。