arm编程,关于C函数中嵌入汇编和寄存器变量的混合使用方法。用汇编透视c语法操作

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里面的注释,相信聪明的你很快就明白了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江独钓2009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值