arm汇编语法Demo

</pre><pre name="code" class="cpp">


/*************************************************************************
    > File Name: inout.c
    > Author: zshh0604
    > Mail: zshh0604@163.com 
    > Created Time: Wed 10 Dec 2014 02:47:50 PM
 ************************************************************************/

#include<stdio.h>

//	__asm__ __volatile__(
//			
//			); 


int main(void)
{
	/*************************************************/	
	//第一种访问寄存器的方式.
	//强制将变量将寄存器绑定.		
	//立即数前面必须加#
	register unsigned int a asm("r0");
	asm volatile(
			"mov r0,#30\n"  //该r0赋值为30.				
			);

	/************************************************/

	//第一个冒号后面只能声明输出变量或者输入输出变量.
	//第二个冒号后面只能声明输入变量.
	//第三个冒号后面只能声明需要保护的寄存器.
	//使用"=&r"声明一个输出变量.
	//使用"r" 声明一个输入变量.
	//使用"r+"声明一个输入输入变量.

	//在汇编中使用%0, %1,这样变量,他会自动绑定没有使用的寄存器.
	//%0和%1,会按照变量声明的顺序一次绑定.这里的%0会绑定到out, %1会自动绑定到out1.
	int out; int in_out; 
	int in=10;
	asm volatile(
			"mov r0,#30\n"              //该r0赋值为30.				
			"mov %0,r0\n"              				
			"mov %1,r0\n"              
			"mov r0,%2\n"              
			
			:"=r"(out), "r+"(in_out)    //声明一个输出,和输入输出变量.
			:"r"(in)              //声明输入变量.
			:"r0"                 //保护寄存器. 

			);

	/************************************************/
	
	//[a] [b] [in] 给声明的变量分别加上标记.
	//在汇编代码中可以使用这些标记.%0, %1,中的0,和1
	asm volatile(
			"mov r0,#30\n"                //该r0赋值为30.				
			"mov %[a],r0\n"                 			
			"mov %[b],r0\n"              
			"mov r0,%[in]\n"             
		
			:[a]"=r"(out), [b]"r+"(in_out)    //声明一个输出,和输入输出变量.
			:[in]"r"(in)              //声明输入变量.
			:"r0"                 //保护寄存器. 
			);
	/***************************************************/
	
	//r 为使用寄存器操作变量声明.
	//r 不加如何表示,表示的是输入变量,只能读,不能写.
	//r+ 表示输入输出变量.
	//=r 表示的是输出变量
	//& 表示输出变量.不会和输入变量公用一个寄存器.
	
	return 0 ;
}

作者:左少华

转载请注明出处:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值