java網(wǎng)站登錄日志怎么做鄭州網(wǎng)絡營銷哪家正規(guī)
本篇文章基于韋東山老師講課筆記和自己理解編寫。
RISC
ARM芯片屬于精簡指令集計算機(RISC:Reduced Instruction Set Computing),它所用的指令比較簡單,有如下特點:
① 對內(nèi)存只有讀、寫指令
② 對于數(shù)據(jù)的運算是在CPU內(nèi)部實現(xiàn)
③ 使用RISC指令的CPU復雜度小一點,易于設計
底層代碼執(zhí)行步驟
例如:圖中所示的運算a = a + b在RISC中要使用4條匯編指令:
① CPU從內(nèi)存中讀入a
② CPU從內(nèi)存中讀入b
③ CPU計算a + b,并寫入到內(nèi)存中
④ 把結(jié)果寫入內(nèi)存
CPU、內(nèi)存、flash
CPU用來做計算,內(nèi)存用來存數(shù)據(jù),flash用來存放程序
- CPU如何知道自己要做什么呢?
flash中的匯編指令告訴的。 - 計算 a + b時,在CPU內(nèi)部,用什么來保存a、b、a+b ?
CPU內(nèi)部都有R0、R1、……、R15寄存器;它們可以用來“暫存”數(shù)據(jù)。 - 讀寫操作通過什么實現(xiàn)?
寄存器 和 數(shù)據(jù)的地址。
對于R13、R14、R15,還另有用途:
R13:別名SP(Stack Pointer),棧指針;用來保存棧的地址
R14:別名LR(Link Register),用來保存返回地址
R15:別名PC(Program Counter),程序計數(shù)器,表示當前指令地址,寫入新值即可跳轉(zhuǎn)
xPSR:程序狀態(tài)寄存器
了解匯編指令
《匯編語言(第3版) 》王爽著.pdf的書直接上傳到我的Gitee倉庫了,有需要直接獲取:https://gitee.com/jingcheng11/embedded-data
數(shù)據(jù)傳輸?shù)娜笠?#xff1a;目的、源、長度。
- 讀內(nèi)存:Load
# 示例LDR R0, [R1, #4] ; 讀地址"R1+4", 得到的4字節(jié)數(shù)據(jù)存入R0長度 目的 源
解釋:
(長度)LDR :Load R,讀四字節(jié)
(目的)R0
(源)[R1, #4]
補充:
LDR B:讀1個字節(jié) B表示:bit
LDR H:讀1個字節(jié) H表示:half
LDRD:讀8個字節(jié) D表示:double
-
寫內(nèi)存:Stroe
# 示例 STR R0, [R1, #4] ; 把R0的4字節(jié)數(shù)據(jù)寫入地址"R1+4" 長度 源 目的
可以這樣記匯編指令的 讀內(nèi)存、寫內(nèi)存:
讀:目的<-----------源
寫:源----------->目的
箭頭是從“源”指向“目的”,只需要記住箭頭方向即可。
-
加減
ADD R0, R1, R2 ; R0=R1+R2 ADD R0, R0, #1 ; R0=R0+1 SUB R0, R1, R2 ; R0=R1-R2 SUB R0, R0, #1 ; R0=R0-1
-
比較
CMP R0, R1 ; 結(jié)果保存在PSR(程序狀態(tài)寄存器)
CMP 表示compare,比較R0、R1
-
跳轉(zhuǎn)
B main ; Branch, 直接跳轉(zhuǎn) BL main ; Branch and Link, 先把返回地址保存在LR寄存器里再跳轉(zhuǎn)
B (Branch) 指令:
這條指令用于無條件地跳轉(zhuǎn)到指定的地址。當使用 B 指令時,處理器會直接跳轉(zhuǎn)到目標地址執(zhí)行指令,但是不會保存任何返回地址信息。這意味著如果你使用 B 指令跳轉(zhuǎn)到一個子程序,那么在子程序結(jié)束之后,你將無法自動返回到調(diào)用點,因為沒有保存返回地址。
B 指令通常用于簡單的程序流程控制,比如循環(huán)或者條件分支的另一部分。
BL (Branch and Link) 指令:
這條指令除了執(zhí)行無條件跳轉(zhuǎn)之外,還會先將當前指令的下一條指令的地址(即返回地址)保存在鏈接寄存器(Link Register,LR)中。LR 寄存器通常被用來存儲調(diào)用子程序前的返回地址,這樣在子程序結(jié)束時可以通過 LDR PC, [LR] 或 POP {PC} 等指令從 LR 中恢復返回地址,從而回到調(diào)用子程序之前的指令位置繼續(xù)執(zhí)行。
BL 指令常用于函數(shù)調(diào)用或當需要在執(zhí)行完一段代碼后返回到原處的情況。
總結(jié)來說,B 指令不保存返回地址,而 BL 指令在跳轉(zhuǎn)前會保存返回地址到 LR 寄存器,這使得 BL 更適合用于子程序調(diào)用,而 B 更適用于不需要返回的簡單跳轉(zhuǎn)。
反匯編代碼了解
讓Keil生成反匯編:
制作反匯編的指令如下:
fromelf --text -a -c --output=xxx.dis xxx.axf
反匯編: