一次間接定址的有效位址 ARM處理的八種定址方式

2021-10-16 11:12:27 字數 1959 閱讀 8896

青絲蘸白雪i的blog​sxz799.ml

arm處理的八種定址方式 青絲蘸白雪i的blogarm處理的八種定址方式 青絲蘸白雪i的blogarm處理的八種定址方式 青絲蘸白雪i的blogarm處理的八種定址方式

一、暫存器定址

運算元的值在暫存器中,指令中的位址碼字段指出的是暫存器編號,指令執行時直接取出暫存器值來操作。

二、立即定址

立即定址指令中的操作碼字段後面的位址碼部分即是運算元本身,也就是說,資料就包含在指令當中,取出指令也就取出了可以立即使用的運算元(這樣的數稱為立即數)。

三、暫存器移位定址

暫存器移位定址是arm指令集特有的定址方式。當第2個運算元是暫存器移位方式時,第2個暫存器運算元在與第1個運算元結合之前,選擇進行移位操作。

四、暫存器間接定址

暫存器間接定址指令中的位址碼給出的是乙個通用暫存器的編號,所需的運算元儲存在暫存器指定位址的儲存單元中,即暫存器為運算元的位址指標。

六、多暫存器定址

多暫存器定址一次可傳送幾個暫存器值,允許一條指令傳送16個暫存器的任何子集或所有暫存器。

在多暫存器定址中會進行2個操作,①是運算元據②是修改位址

ldmia中的a表示先進行①操作,再進行②操作。如果是ldmib則先②後①

ldmia中的i表示儲存器位址由低到高操作。如果是d則表示由高到低。

七、堆疊定址

堆疊是乙個按特定順序進行訪問的儲存區,操作順序為「後進先出」 。堆疊定址是隱含的,它使用乙個專門的暫存器(堆疊指標) 指向一塊儲存區域(堆疊),指標所指向的儲存單元即是堆疊的棧頂。儲存器堆疊可分為兩種:

向上生長:向高位址方向生長,稱為遞增堆疊

向下生長:向低位址方向生長,稱為遞減堆疊

堆疊指標指向最後壓入的堆疊的有效資料項,稱為滿堆疊;堆疊指標指向下乙個待壓入資料的空位置,稱為空堆疊。

所有可以組合出四種型別的堆疊方式:

滿遞增:堆疊向上增長,堆疊指標指向內含有效資料項的最高位址。指令如ldmfa、stmfa等;

空遞增:堆疊向上增長,堆疊指標指向堆疊上的第乙個空位置。指令如ldmea、stmea等;

滿遞減:堆疊向下增長,堆疊指標指向內含有效資料項的最低位址。指令如ldmfd、stmfd等;

空遞減:堆疊向下增長,堆疊指標向堆疊下的第乙個空位置。指令如ldmed、stmed等。

八、相對定址

相對定址是基址定址的一種變通。由程式計數器pc提供基準位址,指令中的位址碼字段作為偏移量,兩者相加後得到的位址即為運算元的有效位址。

記一次database cpu high的處理

基本上,我們的資料庫例項每次cpu飆公升都是因read而起,很少有write導致的cpu高。這說明read,隨機讀,排序,都會占用cpu。而寫入主要是io行為,尤其是順序寫,不需要佔cpu。今次問題,rds在三個小時內都很高,始終維持50 最高甚至到98 當然我們的業務可用性並不依賴rds。觀察一段...

記一次 gitlab 與老的 nginx 衝突處理

記一次 gitlab 與老的 nginx 衝突處理 今天在搭建 lnmp gitlab 環境的時候遇到了 nginx 衝突。lnmp 是用的 oneinstack 因為方便。gitlab 是用的清華映象 gitlab ce 安裝完後修改了 gitlab 的埠,然後重啟了伺服器。重啟後依然只能訪問 g...

記一次centos無法啟動ssh服務的處理

正在準備學習es的使用和部署,安裝虛擬機器後發現filezilla無法連線虛擬機器,ssh登陸時提示 ssh connect to host port 22 connection refused 照網上方法排除發現幾種處理措施 優先檢視ssh服務是否正常執行 隨後檢視linux防火牆是否關閉,若為否...