為什麼需要多暫存器訪問指令
ldr/str每週期只能訪問4位元組記憶體,如果需要批量讀取、寫入記憶體時太慢,解決方案是stm/ldm
ldm(load register mutiple)
stm(store register mutiple)
舉例(uboot start.s 537行)
stmia
sp,
將r0存入sp指向的記憶體處(假設為0x30001000);然後位址+4(即指向0x30001004),將r1存入該位址;然後位址再+4(指向0x30001008),將r2存入該位址······直到r12內容放入(0x3001030),指令完成。
乙個訪存週期同時完成13個暫存器的讀寫
8種字尾
ia(increase after)先傳輸,再位址+4
ib(increase before)先位址+4,再傳輸
da(decrease after)先傳輸,再位址-4
db(decrease before)先位址-4,再傳輸
fd(full decrease)滿遞減堆疊
ed(empty decrease)空遞減堆疊
fa(·······) 滿遞增堆疊
ea(·······)空遞增堆疊
四種棧空棧:棧指標指向空位,每次存入時可以直接存入然後棧指標移動一格;而取出時需要先移動一格才能取出
滿棧:棧指標指向棧中最後一格資料,每次存入時需要先移動棧指標一格再存入;取出時可以直接取出,然後再移動棧指標
增棧:棧指標移動時向位址增加的方向移動的棧
減棧:棧指標移動時向位址減小的方向移動的棧
!的作用
ldmiar0,
ldmiar0!,
感嘆號的作用就是r0的值在ldm過程中發生的增加或者減少最後寫回到r0去,也就是說ldm時會改變r0的值。
^的作用
ldmfdsp!,
ldmfdsp!, ^
^的作用:在目標暫存器中有pc時,會同時將spsr寫入到cpsr,一般用於從異常模式返回。
批量讀取或寫入記憶體時要用ldm/stm指令
各種字尾以理解為主,不需記憶,最常見的是stmia和stmfd
謹記:操作棧時使用相同的字尾就不會出錯,不管是滿棧還是空棧、增棧還是減棧
來自於2016 2 24的flag
今天又做了一套xj模擬題 打比賽這種事情變得越來越無聊了 既影響自己的計畫 雖然看起來很難完成的樣子 又擾亂心情.而且題目大都是學習演算法之類的,與計畫不接軌就非常沒有興趣.然而今天題目中有一道撞鴨dp.這種型別以往都是都是看一眼題目大概有方程就不想寫了 怕麻煩.但是今天的撞鴨就讓我調得想撞牆.這類...
來自於2016 2 23的flag
正是中午,百廢待興,寫點什麼調節一會兒心情吧。正巧有許多的想法。機房來了許多小朋友,多麼像一年之前的我啊,想寫題,心又紛亂,但不同的是他們比我強太多了。停課是什麼感覺?停課在機房與寒暑假 雙休日在機房不同,沒有置身於他人的遊戲聲中的令人能感受到實體的現實 就像厭煩城市的喧囂,但發現它已是生存基礎構成...
幸福來自於內心的簡約
昨天看了解放 的一篇文章稱 據來自醫療部門的統計資料顯示,半數城市人有亞健康症狀。馬不停蹄為掙一套房子搏命,為一部車子加班,緣於 我們總是把擁有物質的多少 外表形象的好壞看得過於重要,用金錢 精力和時間換取一種有目共睹的優越生活 無懈可擊的外表 結果是 房子變大,存摺變多,汽車變新,衣服變靚 人卻越...