關於組合語言主要需要理解兩個問題,乙個是定址方式,用來知道指令傳達的是什麼內容,另乙個就是指令,需要知道實現了什麼功能。先從定址方式講起,arm9中需要理解的定址方式有8種(考試只考7種)。指令根據英語意思可以大致理解含義,主要就是加,減,乘四種運算,但是運算的方向和指令有關。
定址方式
名稱表示式
含義暫存器定址
mov r1,r2
把r1暫存器的內容移送到r2中去
立即數定址
mov r0,#0xff00
把立即數0xff00移到r0中去,立即數前需要加#
暫存器移位定址
mov r0,r2,lsl #3
r2暫存器的內容邏輯左移三位之後送入r0暫存器
暫存器間接定址
ldr r0,[r2]
將r2表示的儲存單元中的字送入r0暫存器
基址定址
ldr r2,[r3,#0x0c]
把r3暫存器內容對應的位址加上0x0c之後的位址的內容載入到r2暫存器
多暫存器定址
ldr r1!,
解釋看指令
堆疊定址
ldmia r0!,
將r0指向的資料儲存到r1~r7中
指令格式
arm指令格式是32位的,機器碼表示可以參考下圖
其中四位的cond表示條件碼,通過檢測狀態位判斷是否執行某條程式,可以作為迴圈,判斷等條件的底層表示
cond表示圖
下面我們看看組合語言的格式
{} ,,{}
其中,尖括號內(<>)表示必須,大括號內({})表示可選。
opcode:指令助記符
cond(condition):執行條件
s(state):是否影響狀態暫存器
rd(register destination):目標暫存器
rn:第乙個運算元的暫存器
operand2:第二個運算元
『!』:結果寫回
『^』:改變狀態暫存器
最先需要學習的
最先需要學習的是從儲存器到暫存器的載入(load)指令,和暫存器到儲存器的儲存(store)指令。他們的彙編也很好記,ldr和str。如果要儲存或者載入多個就是multiple,所以加乙個m變成ldm和sdm就好了
需要注意的是有個時候指令後面會加b或者h,什麼意思呢?就是位元組(byte)和半字(half)的意思。arm是32位體系結構,所以字長為32位。乙個位元組為8位,乙個半字為16位。後面加b或者h就表示按照位元組或者半字來執行指令。只用在載入和儲存中。
關於為什麼不用mov而是用ldr,是因為mov是同類介質中的,在arm體系裡mov是用在暫存器和暫存器(或者8點陣圖立即數)之間,而ldr是用在暫存器和儲存器之間。
關於加add
adcc是帶進製的意思
關於減sub
rsb
sbc
rscr表示reverse,即用operand2減去rn
關於乘mul
mla
umull
umlal
smull
smlal
字尾帶a表示乘加(add)指令,例如mla rd,rm,rs,rn
表示rd=rm*rs+rn 。注意字尾不帶l(large)的都是32位乘法,會捨棄乘法結果的高32位。u和s字首表示無符號(unsigned)和有符號(signed)
關於邏輯運算
and
orr
eor
bic與,或,異或沒什麼好說的。最後乙個是位元清零,bit clearbic rd, rn, operand2
表示rd=rn&(~operand2)
關於分支指令b
b bl
bxbranch
branch link
branch change
bx表示狀態切換的指令,後面跟的是暫存器表示的位址bx rm
,arm指令是字對齊的,最低兩位通常為0(位元組為單位),此時如果最低位為1表示進入thumb狀態。偽指令adr可以把位址存到暫存器中來
關於更改狀態暫存器
msr
mrsstate——register
register——state
因為第乙個是目的位址,所以msr是寫,mrs是讀。注意如果要更改狀態暫存器的話,要先讀入在改寫以免破壞系統
關於彙編和c語言的互相呼叫
c語言裡面加乙個_asm{}
彙編裡面import或者export
嵌入式系統(複習筆記)
宿主機 交叉開發方式 jtag 嵌入式系統,嵌入式計算機系統 arm處理器,risc,r0 r15 cpsr 通用計算機系統 x86,cisc,ax bx cx dx psw intel8086 asic 處理器只能到記憶體中取指令並執行指令 位址線 資料線 cache 暫存器ro base rea...
嵌入式複習16
第十六天 1.基於tcp協議的通訊模型 1.1 通訊模型 伺服器 1 建立socket socket函式 2 準備通訊位址 使用結構體型別 3 幫id那個socket和通訊位址 bind函式 4 監聽 listen函式 5 響應客戶端的連線請求 accept函式 6 關閉socket close函式...
嵌入式複習17
第十六天 1.多執行緒的基本概念和基本操作 1.1 基本概念 1.2 執行緒的建立 1 pthread create函式 2 執行緒之間的關係 1.3 執行緒編號的獲取和比較 1 pthread self函式 2 pthread equal函式 1.4 執行緒的匯合和分離 1 pthread joi...