彙編的指令與偽指令
指令是cpu機器指令的助記符,通過編譯會得到機器碼
偽指令是編譯器為輔助引導編譯過程而加入的指令,沒有實際作用
兩種風格的arm指令
官方推薦的大寫風格 同時也是windows平台用的風格
gcc風格則是小寫風格
arm通過暫存器名尋找通用暫存器
arm彙編特點
讀-改-寫 ldr與str架構
risc架構是無法直接讀取記憶體內的資料的,這也是與cisc不同的一點,所以risc的晶元想要讀取資料就要通過晶元內部的暫存器通過「讀改寫」的方式間接訪問記憶體,即cpu先讓暫存器先將對應的記憶體位址中的陣列讀進來,然後cpu對暫存器內的資料進行更改,然後cpu再讓暫存器將資料裝載到記憶體中
其中ldr,str就是操作暫存器進行讀寫記憶體的指令
ldr load register 將記憶體內容載入到通用暫存器的指令
str store register 將內容裝填到記憶體中的指令
8種基礎的彙編指令
mov r1 r2 :暫存器定址 將暫存器r2的值賦給r1 模擬於將a賦值給b
mov r1 #00ff : 立即定址,通過#後的立即數定址 模擬於c語言給變數賦值的操作
mov r1 r2 lsl #1 :lsl是左移指令將r2左移#後位數後賦值給r1,左移也可視為2的幾倍
mov r1 [r2] :暫存器間接定址,加了後代表記憶體位址,將r2的位址賦給r1,模擬於c的指標解引用
mov r1 [r2,#1] :基址變址選址 將r2的位址偏移1位後的值賦給r1
ldmia r1!, :多暫存器載入 r1模擬於c中的陣列首位址,即彈棧操作
stmfd sp! ,:堆疊定址與上條指令類似,不過裝載的目的位址不同,該操作是讀取sp棧指標處的記憶體,從棧記憶體上連續訪問n個位元組,放到後面的暫存器上,即壓棧操作
beq flag: 相對定址,通過標號跳轉到flag處執行,實際是記錄乙個偏移量,然後在執行過程中基於pc暫存器位址加減偏移量實現
指令字尾
常用四種字尾b/h/s/s
b位元組 功能不變,操作長度變為8個位元組
h半字 功能不變,操作長度變為16個位元組
s有符號 功能不變,運算元變為有符號
s 功能不變,操作長度變為8個位元組
例如:ldrb,ldrh,ldrs
條件執行字尾
條件執行字尾是否執行取決於前一條語句
條件執行字尾決定本條語句是否執行
例如 moveq r0 r1 如果cpu的cpsr程式狀態暫存器z位為1,即eq條件達成
記錄cpu執行時執行指令的結果
arm多級流水線
取值->解碼->執行 並行運作
嵌入式學習筆記 彙編基礎02
資料處理指令 資料傳輸指令mov mvn mov資料傳遞指令 mov既可暫存器與暫存器之間進行資料傳遞,也可將立即數賦值給暫存器 mvn資料按位取反後傳遞 算數指令 add sub rsb adc rsc 反向帶進製減法 關鍵單詞 carry 進製 subtraction add sub r2 r0...
嵌入式學習筆記
嵌入式系統定義 技術角度以應用為中心,以計算機技術為基礎,軟硬體可裁剪,應用系統對功能,可靠性,成本,體積,功耗,和應用環境有特殊要求的專用計算機系統系統角度 設計完成複雜功能的硬體和軟體並使其緊密契合在一起的計算機系統 實時在規定的時間內,完成規定的動作 紅帽linux 基本命令 ls 檢視當前目...
嵌入式學習筆記
1 3 買了兩本書鳥哥的 鳥哥的linux私房菜基礎學習篇 第三版 和偉山東的 嵌入式linux應用開發完全手 冊 暫時看不懂 4 看了王剛的 linux系統移植 第二版 實現了windows和linux虛擬機器的檔案的共享 2014 11 02 主機可以ping通虛擬機器,虛擬機器ping不通主機...