嵌入式系統安全複習(二)

2021-07-07 03:11:56 字數 2428 閱讀 8259

關於組合語言主要需要理解兩個問題,乙個是定址方式,用來知道指令傳達的是什麼內容,另乙個就是指令,需要知道實現了什麼功能。先從定址方式講起,arm9中需要理解的定址方式有8種(考試只考7種)。指令根據英語意思可以大致理解含義,主要就是加,減,乘四種運算,但是運算的方向和指令有關。

定址方式

名稱表示式

含義暫存器定址

mov r1,r2把r1暫存器的內容移送到r2中去

立即數定址

mov r0,#0xff00把立即數0xff00移到r0中去,立即數前需要加#

暫存器移位定址

mov r0,r2,lsl #3r2暫存器的內容邏輯左移三位之後送入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...