标签:blog io ar 使用 2014 log 代码 amp as
/************************************************************************* > File Name: inout.c > Author: zshh0604 > Mail: zshh0604@.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 ; }
标签:blog io ar 使用 2014 log 代码 amp as
原文地址:http://blog.csdn.net/shaohuazuo/article/details/41871743