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