內(nèi)存操作-讀取內(nèi)存:
跟內(nèi)存相關(guān)的指令無非是把內(nèi)存中讀取到計算機里面或者把計算機的內(nèi)容讀取到內(nèi)存里面。存儲器和計算機之間的一個互換。這些指令也可以在我們之前的相關(guān)文檔里去查詢。ARM匯編去官網(wǎng)下載相關(guān)的文檔就行。
內(nèi)存操作指令分為:單寄存器讀寫指令、多寄存器內(nèi)存訪問指令(連續(xù)的進行操作一段時間內(nèi)存,把它讀到計算機里面)和數(shù)據(jù)交換指令
內(nèi)存操作結(jié)構(gòu):
LDR:把我們內(nèi)存中的數(shù)據(jù)讀取到計算器里面。內(nèi)存是分塊的,內(nèi)存最小的單位是字節(jié)(byte),到為了便于管理,所以存儲器會分頁,分頁的時候它會用到另一個單位:word字長。一個word就是4個字節(jié),以32位為一個單位。所以默認單位是字長來進行一個讀取。同理,STR就是按字長把計算器里面的值放到內(nèi)存里面?,F(xiàn)在詳細地講一下:LDR后面跟上Rn Add
例:我們打開這樣一個項目,在這里我們開始做一下我們今天這一塊。我先把我們的內(nèi)存里的一個值讀到某個計算器里面,我們就用LDR
比如我讀到R0吧,我把0x12這個地址給它讀進來,這個地方要注意一點,這個地方可不是我們的move,所以這個地方不能直接用立即數(shù)。不直接用立即數(shù)有兩種方法。把R1的值所指向的(這個地方有中括號,中括號表示計算機間接尋址,它的值所指向的內(nèi)存的地址空間的值讀出來復(fù)到R0里面。再看下一塊,0x12就是找12
2就是對應(yīng)的FF,但是要讀32位,也就是4個字節(jié)?,F(xiàn)在把值給賦過去
現(xiàn)在讀出的地址是0010E7FF,我們找到的這個起始位是FF,然后是E7。FF是起點,卻被放在后面,這就是小端模式(低位放低地址,高位放高地址)。為什么會是這樣?實際上,是這樣讀的
它會根據(jù)地址先判斷哪個是最小的字空間,然后把字空間的內(nèi)容讀出來。同樣,如果往后讀,會不會挨著往后走呢?我們來驗證下:先改一下,不是0012了,改成0014。R1最開始就是0,給它加上立即數(shù)。
還可以用微指令。現(xiàn)在值已經(jīng)賦過來了
E800E800,新的字單元。從第9個開始,10E7FF00,可以看出,內(nèi)存要分頁,最小的也是分了斷的。所以內(nèi)存操作往往是按照字長來的。