548
技術社區[雲棲]
嵌入式係統-概述+ARM指令
嵌入式係統-概述+ARM指令
嵌入式係統是以應用為中心,以計算機技術為基礎,采用可裁剪軟硬件,適用於對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機係統。它一般由嵌入式微處理器、外圍硬件設備、嵌入式操作係統及用戶應用程序四部分組成。
簡單說,網吧裏的電腦是通用計算機,而mp3、豆漿機等內含的都有嵌入式係統。嵌入式係統的特點是功耗低、體積小、成本低。
ARM微處理器是主流的嵌入式處理器。
嵌入式操作係統有:Windows CE、Android、VxWorks等。
ARM的全稱是 Advanced RISC Machine。
RISC,Reduced Instruction Set Computer,精簡指令集計算機,與之相對的是Complex ISC。前者因指令集簡單,所以硬件電路簡單,故價格低。
ARM處理器支持兩種指令集:ARM指令集(32位)、Thumb指令集(16位)。對應相應兩種狀態。
操作數寄存器的狀態位(位0)為1時,可以采用執行BX指令的方法,使微處理器從ARM狀態切換到Thumb狀態。
ARM有用戶模式和特權模式。
異常:Exception。原有流程被打斷,轉而執行新的流程叫異常。例如處理一個外部的中斷請求。在處理異常之前,當前處理器的狀態必須保留,這樣當異常處理完成之後,當前程序可以繼續執行。
ARM的數據存儲
ARM有:
31個通用寄存器,均為32位的寄存器;具體有三類——未分組寄存器R0~R7,分組寄存器R8~R14,程序計數器PC(R15)。
R13在ARM指令中常用作堆棧指針,但這隻是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。
6個狀態寄存器,用以標識CPU的工作狀態及程序的運行狀態,均為32位。
尋址空間為4G。
數據存儲有小端模式——低地址存儲數據的高位和大端模式——低地址存儲數據的低位。
ARM微處理器中支持字節(8位)、半字(16位)、字(32位)三種數據類型,其中,字需要4字節對齊(地址的低兩位為0)、半字需要2字節對齊(地址的最低位為0)
ARM的尋址
1.立即數尋址;
其實並不需要真正的尋址,操作數已經在指令中了。立即數一般以‘#’為前綴。
2.寄存器尋址;
操作數在寄存器中,不需訪問存儲器。
3.寄存器移位尋址;
add r1,r1,r2,ror #0x2; ;r2循環右移兩位後與r1相加,結果放入r1中。
4.寄存器間接尋址;
此時寄存器中存儲的是地址。
str r1,[r2] ;將r1的值存入r2所指地址的存儲器中
5.基址變址尋址;
6.多寄存器尋址;
ldmia r0,{r1,r2,r3,r4,r5};r0->r1,r0+4->r2,...,r0+16->r5
7.堆棧尋址;
棧是一種後進先出的數據結構。棧指針始終指向棧頂,這個寄存器一般是R13.
8.相對尋址;
RAM指令簡介
load/store ——從存儲器中讀某個值,操作完後再將其放回存儲器中
ARM指令的一般格式見下:
<opcode> {<cond>} {S} <Rd> ,<Rn>{,<operand2>}
<>表示必須;{}表示可選。
Rd:目標寄存器; Rn:第1個操作數的寄存器;
1.跳轉指令
將程序計數器PC的值改寫為跳轉目的地址。 mov PC,#immediate
B (Branch)
基本跳轉指令。 B{condition},Label1
BL(Branch with Link)
帶連接的跳轉指令。在跳轉之前,會先將下一條要執行的指令地址放到R14中,一般用於函數調用。
BX(Branch and eXchange)
用於ARM和Thumb狀態間的轉換。
2.mov
MOV Rd,operand2 ;數據傳送,Rd←operand2
3.add adc
ADD R1,R1,R2,LSL #2 ;R1=R1+R2<<2
4.sub sbc
SUBS R0,R0,#240 ;R0=R0-240 ,並影響標誌位
5.and orr
分別是c++中的 && ||
6.cmp
cmp Rn,Operand2 將Rn寄存器的值減去operand2的值,除了最後的計算結果被丟棄外,整個過程和subs相同。
7.mul
乘法指令
ARM開發IDE
ADS(ARM Developer Suite),是在1993年由Metrowerks公司開發是ARM處理器下最主要的開發工具。
最後更新:2017-04-03 08:26:15