arm汇编语法Demo

/*************************************************************************
    > File Name: inout.c
    > Author: zshh0604
    > Mail: [email protected]
    > 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 ;
}

时间: 2024-12-22 03:01:14

arm汇编语法Demo的相关文章

GNU风格 ARM汇编语法指南

汇编源程序一般用于系统最基本的初始化:初始化堆栈指针.设置页表.操作 ARM的协处理器等.这些初始化工作完成后就可以跳转到C代码main函数中执行. 1.  GNU汇编语言语句格式 任何Linux汇编行都是如下结构:[<label>:][<instruction or directive or pseudo-instruction>} @comment l         instruction为指令 l         directive为伪操作 l         pseudo

GNU ARM汇编语法

http://wenku.baidu.com/view/812a698c84868762caaed55d.html?re=view ARM汇编源程序有两种风格: ARM官方推荐的风格,所有的指令都大写.常用在windows下的IDE中. GNU风格的汇编风格,所有的指令都小写.常用在与Linux相关的工具中. 注释符号: GNU arm汇编所采用的注释符号是@符号,同样c语言中的 // 和 /* */ 两种类型的注释方法在GNU arm汇编中也被支持. 宏定义: 在GNU arm汇编程序中可以使

GNU ARM 汇编指令

http://blog.chinaunix.net/u2/87718/showart_1683402.html GNU ARM 汇编指令简介第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C代码执行.需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范. 一. Linux汇编行结构任何汇编行

GNU ARM汇编入门

第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C代码执行.需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点 (www.gnu.org)上下载有关规范. 一. Linux汇编行结构 任何汇编行都是如下结构: [:] [} @ comment [:] [} @ 注释 Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一

ARM 汇编指令集

转载,方便查找用. ARM汇编指令集 一. 跳转指令    跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC写入跳转地址值. 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用 MOV LR,PC 等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用. ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以

ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

要学习一个东西首先要把概念搞清楚,下面只是自己的一些关于汇编的理解. 可执行文件中的01码是机器码,机器码不等于汇编码,虽然机器码可以很容易翻译成汇编码. 汇编码中包含很多汇编指令.伪指令和宏指令等,这些是不可以直接在机器上运行的. 机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的. 汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令,在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样.个人感觉

ARM汇编指令

ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转.Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用

ARM汇编指令汇总

1.ARM汇编的格式:    在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写:有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错.常量定义需要顶格书写,不然,编译器同样会报错.    2.字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号.    3.在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同

嵌入式Linux ARM汇编(六)——GNU ARM汇编编程

嵌入式Linux ARM汇编(六)--GNU ARM汇编编程 不同的汇编器对汇编语言的语法要求不一样.目前常用的ARM汇编环境有以下两种: A.ARM ASM:ARM公司的汇编器,适合在Windows平台下使用 B.GNU ARM ASM:GNU交叉编译工具链中的汇编器,适合于Linux开发平台. GNU汇编器是GNU工具集的一部分,用于将汇编语言文件转化为二进制obj文件.GNU汇编器针对的是多种处理器架构,这意味着GNU汇编器的语法不同于ARM工具链的汇编器. 一.GUN ARM汇编指令格式