arm彙編文法Demo,arm彙編demo
/************************************************************************* > 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,和1asm 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 ;}