嵌入式開發之 ARM和THUMB指令集

2021-07-13 19:13:41 字數 1341 閱讀 2496

我在這道題上糾結了很久,因為始終無法看到arm指令的條件執行指令。我看到的始終是下圖中普通cpu的**,並沒有arm特有的所有指令都能條件執行的語句出現。

一度以為是交叉編譯選項的問題,沒有指定板子的型號,後來在板子上直接執行,結果依舊是沒發現條件執行的語句。仍然是cmp指令,然後跳轉到不同的**段執行不同的**。

後來才想到是不是因為直接-s產生的**沒有優化,編譯的時候一句一句地將c轉為彙編才造成沒有出現arm的條件執行語句呢?

於是採用如下命令重新編譯hello.c,發現**被優化地只剩下2行了,原來給變數直接賦值就會被編譯器直接計算出結果,而不會執行條件執行語句了,if-else成了擺設。

基於這個原因,修改**,將int a=0,b=1; 刪除,替換為

int a,b;

scanf("%d

%d",&a,&b);

如下圖所示,可以看到arm指令的條件執行**段,無需跳轉到不同的**段執行,只需要兩個語句即可完成,可見arm指令的效率很高。

而thumb指令則沒有這樣的條件執行語句了,只有通過b指令轉移到不同的**段執行。

引數全部被儲存。

函式的本地變數的堆疊的棧指標改變是用sub sp, sp, #xx 來做的,通過sp-4將棧指標下移乙個字。通過fp來從棧中訪問資料。

- 彙編結果

- 彙編結果

其中b=a&(0x000f)被編譯為bic指令。

嵌入式arm開發學習

今天是學習arm的第二天.感覺又懂了一點.記錄下來,以便以後不時之需.今天先是看了一些linux應用開發的東西,由於之前自己對linux程式設計還算是有過了解,這部分看得很快,基本沒有什麼閱讀障礙.個人建議想學嵌入式linux的人,最好先把unix環境高階程式設計看一遍.你會發現一切都會順其自然.之...

嵌入式,ARM掃盲

炮製了一篇,基本是拿來主義,不算技術,只能算雜談。注 此處正常模式和普通模式是我生造的術語,沒有確定是否存在,各位請暫且忽略。arm異常處理過程 arm的異常,包括復位 未定義指令 軟體中斷 資料訪問中止 外部中斷請求 快 速中斷請求。處理過程 1 儲存現場,包括處理器當前狀態 中斷遮蔽位 cpsr...

ARM嵌入式實驗

問題 在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。獲取pll中m,p值,c程式呼叫彙編函式 在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段 實現 c程式呼叫 ...