閱讀548 返回首頁    go 技術社區[雲棲]


嵌入式係統-概述+ARM指令

嵌入式係統-概述+ARM指令

嵌入式係統是以應用為中心,以計算機技術為基礎,采用可裁剪軟硬件,適用於對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機係統。它一般由嵌入式微處理器、外圍硬件設備、嵌入式操作係統及用戶應用程序四部分組成。

簡單說,網吧裏的電腦是通用計算機,而mp3、豆漿機等內含的都有嵌入式係統。嵌入式係統的特點是功耗低、體積小、成本低。

ARM微處理器是主流的嵌入式處理器。

嵌入式操作係統有:Windows CEAndroidVxWorks等。

ARM的全稱是 Advanced RISC Machine

RISCReduced Instruction Set Computer,精簡指令集計算機,與之相對的是Complex ISC。前者因指令集簡單,所以硬件電路簡單,故價格低。

ARM處理器支持兩種指令集:ARM指令集(32位)、Thumb指令集(16)。對應相應兩種狀態。

操作數寄存器的狀態位(位0)為1時,可以采用執行BX指令的方法,使微處理器從ARM狀態切換到Thumb狀態。

ARM有用戶模式和特權模式。

異常:Exception。原有流程被打斷,轉而執行新的流程叫異常。例如處理一個外部的中斷請求。在處理異常之前,當前處理器的狀態必須保留,這樣當異常處理完成之後,當前程序可以繼續執行。

ARM的數據存儲

ARM有:

31個通用寄存器,均為32位的寄存器;具體有三類——未分組寄存器R0R7,分組寄存器R8R14,程序計數器PC(R15)

R13ARM指令中常用作堆棧指針,但這隻是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。

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)

用於ARMThumb狀態間的轉換。

2.mov

MOV   Rd,operand2 ;數據傳送,Rdoperand2 

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  RnOperand2   Rn寄存器的值減去operand2的值,除了最後的計算結果被丟棄外,整個過程和subs相同。

7.mul

乘法指令

 

ARM開發IDE

ADS(ARM Developer Suite),是在1993年由Metrowerks公司開發是ARM處理器下最主要的開發工具。

最後更新:2017-04-03 08:26:15

  上一篇:go linux mint 16安裝QQ for Linux的方法
  下一篇:go C語言API編寫窗體界麵和按鈕