日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编指令的学习4——ldm/stm指令、栈的处理

發布時間:2023/12/20 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编指令的学习4——ldm/stm指令、栈的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、為什么需要多寄存器訪問指令?

ldr/str每周期只能訪問4字節內存,如果需要批量讀取、寫入內存時太慢,解決方案是stm/ldm

ldm ?(load register mutiple)

stm(store register mutiple)


2、舉例:stmia sp, {r0 - r12}(注意這里的-號不是減,而是范圍)

(1)將r0存入sp指向的內存處(假設為0x30001000);然后地址+4(即指向0x30001004),將r1存入該地址;然后地址再+4(指向0x30001008),將r2存入該地址······直到r12內容放入(0x3001030),指令完成。即將r0~r12的內容存入以sp為起始地址的內容空間里。

(2)一個訪存周期同時完成13個寄存器的讀寫。


3、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(·······)空遞增堆棧

4、四種棧

(1)空棧:棧指針指向空位,每次存入時可以直接存入然后棧指針移動一格;而取出時需要先移動一格才能取出。(因為空所以可以直接存入再移動)

(2)滿棧:棧指針指向棧中最后一格數據,每次存入時需要先移動棧指針一格再存入;取出時可以直接取出,然后再移動棧指針。(因為滿所以應該移動后再存入)

(3)增棧:棧指針移動時向地址增加的方向移動的棧。(相對于入棧來說?)

(4)減棧:棧指針移動時向地址減小的方向移動的棧。(相對于入棧來說?)


5、!的作用

ldmia r0, {r2 - r3}

ldmia r0!, {r2 - r3}

感嘆號的作用就是r0的值在ldm過程中發生的增加或者減少最后寫回到r0去,也就是說ldm時會改變r0的值。

6、^的作用

ldmfd sp!, {r0 - r6, pc}

ldmfd sp!, {r0 - r6, pc}^

^的作用:在目標寄存器中有pc時,會同時將spsr寫入到cpsr,一般用于從異常模式返回。


總結

以上是生活随笔為你收集整理的汇编指令的学习4——ldm/stm指令、栈的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。