ARM9——五級流水線結構,以及PC指標
ARM7是三級流水線,所以PC = 執行指令地址 + 8,這很好理解,但是在ARM9中,是五級流水線,
仍然是:PC = 執行指令地址 + 8,而不是 PC = 執行指令地址 + 16.
這個理解顯然有些難度,首先看下ARM7和ARM9的流水線區別和聯絡:
相比ARM7,ARM9採用了更高效的五級流水線設計,在取指令、譯碼、執行之後,又增加了LS1和LS2階段,LS1負責載入和儲存指令中制定的資料,LS2則負責提取、符號擴充套件,通過位元組或半字載入命令來載入資料,但是LS1和LS2僅對載入(LDR)和儲存命令(STR)有效,其他的指令是不需要執行這兩個階段的。
ARM9五級流水線中,讀暫存器的操作轉移到譯碼階段,將三級流水中的執行階段進一步細化,減少每個始終週期內必須要完成的工作量,這樣可以使流水線的各個階段在功能上更加平衡,避免資料的訪問和取指的匯流排衝突,每條指令的平均週期明顯減少。
有一句話要牢記,那就是:
PC不是指向你正在執行的指令,而是-PC始終指向你要取得指令的地址。
【總結】
ARM7的三級流水線,PC=PC+8,
ARM9的五級流水線,也是PC=PC+8,
根本的原因是,兩者的流水線設計中,指令的Execute執行階段,都是處於流水線的第三級。
相關推薦
ARM9——五級流水線結構,以及PC指標
ARM7是三級流水線,所以PC = 執行指令地址 + 8,這很好理解,但是在ARM9中,是五級流水線,仍然是:PC = 執行指令地址 + 8,而不是 PC = 執行指令地址 + 16. 這個理解顯然有些難度,首先看下ARM7和ARM9的流水線區別和聯絡:
ARM——三級流水線結構,以及PC指標
首先科普幾個概念: MIPS——Million instruction Per Second 每秒多少百萬條指令,比如0.9MIPS,表示每秒90萬條指令。 MIPS/MHz表示CPU在1MHz的執行速度下可以執行多少個MIPS,比如0.9MIPS/MHz
當結構體遇上巨集定義,以及函式指標的高階寫法(結構體中能用巨集定義一個函式?)
一、結構體中可以定義一般的巨集定義 如: struct aaa { #define STATUS_1 100 #define STATUS_2 200 #define STATUS_3 300 ........ }; 首先
OSI,TCP/IP,五層協議的體系結構,以及各層協議
802.3 面向連接 udp 用戶 數據包 格式 ios mpeg 用戶數據 以下整理的是計算機網絡的OSI,TCP/IP,五層協議的體系結構,以及各層協議,便於以後查看: OSI分層,自上而下分別是:物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層 TCP/IP
ServerSuperIO 3.5版本的體系結構,以及未來規劃的幾點思考
一.特點 1.輕型高效能通訊框架,適用於多種應用場,輪詢模式、自控模式、併發模式和單例模式。 2.不僅是通訊框架,是裝置驅動、IO通道、控制模式場景的協調機制。 3.支援協議驅動器,可以按規範寫標準協議和自定義協議。 4.支援傳送資料快取器,支援命令快取重發和按優先級別傳送。 5.支援協議過
es索引與資料結構 ,以及其他知識使用
1:es 索引與資料結構對映----es索引說明: 索引結構: index/type/id 對應的關係型資料庫結構 index = database , type = table , id = id ----預設--插入新的索引PUT test-index/defa
OSI(7層)TCP/IP(4層)五層協議的體系結構,以及各層的協議,作用
OSI模型(1) 物理層:IEEE802,IEEE802.2 作用:以二進位制的資料形式在物理媒體上傳輸資料(中繼器,集線器,閘道器)(2) 資料鏈路層:ARP,RARP,PPP,MTU 作用:傳輸有地址的幀,將位元組裝成幀和點到點的傳遞,以及錯誤檢測功能(網橋
spring boot 獲取 src 目錄下的 文件結構,以及讀寫 頁面檔案
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileN
OSI,TCP/IP,五層協議的體系結構,以及各層協議簡介
OSI分層 (7層):物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。 TCP/IP分層(4層):網路介面層、 網際層、運輸層、 應用層。 五層協議 (5層):物理層、資料鏈路層、網路層
python呼叫C++,傳遞結構體與結構體指標,以及巢狀結構體
#include<iostream>using namespace std;//該檔名稱:cpptest.cpp//終端下編譯指令://g++ -o cpptest.so -shared -fPIC cpptest.cppstruct sub_struct{
C語言的結構和聯合,以及PHP是怎麽實現弱類型的
main 中一 字符 變量類型 type 以及 logs void 例子 C語言的結構(struct):包含多個成員,可能有多種數據類型,並且需要分配幾種類型占用空間之和的空間。 聯合(union):支持多種類型,供使用者使用其中一種數據類型,當然是需要分配其中占用
php判斷手機段登錄,以及phpcms手機PC雙模板調用
mod pod 找不到 並且 mat pla sse 運行 highlight 首先一段php代碼判斷是否為手機瀏覽: function isMobile() { // 如果有HTTP_X_WAP_PROFILE則一定是移動設備 if (isset ($
Unity 使用C/C++ 跨平臺終極解決方式(PC,iOS,Android,以及支持C/C++的平臺)
log initial ava open tis called 文章 sharp strong PC的事實上根本不用說,畢竟C#和C++交互的文章已經夠多了,當然我
Unity 使用C/C++ 跨平臺終極解決方案(PC,iOS,Android,以及支持C/C++的平臺)
細節 -h comment 個人 tle lan source 多說 sharp https://blog.csdn.net/fg5823820/article/details/47865741 PC的其實根本不用說,畢竟C#和C++交互的文章已經夠多了,當然我自認為經過幾
列表, 元組,以及字符串等字符結構以及楊輝三角的四種寫法
and part ascii碼 sha collect sci 有一個 第一個 [] 列表的 刪除復制等操作: list.remove(value) 刪除遇到的第一個值 list.pop(index)就地彈出某個值
修改TabLayout下劃線寬度,以及在Api28下遇到的問題—— tabLayout.getDeclaredField 空指標以及水波紋背景問題
在API28之前,我們修改TabLayout下劃線寬度,程式碼如下: /** * 設定tabLayout下劃線的寬 */ public static void setIndicator(TabLayout tabs, int leftDip, int rightD
mysql修改表結構 MySQL修改表結構操作命令總結 MySql資料庫在表中新增新欄位,設定主鍵,設定外來鍵,欄位移動位置,以及修改資料庫後如何進行部署和維護的總結 mysql 如何修改、新增、刪除表主鍵
MySQL修改表結構操作命令總結 以下內容轉自:http://www.jb51.net/article/58079.htm 表的結構如下: 複製程式碼程式碼如下:
結構體中的指標,用malloc初始化時,沒有分配足夠的記憶體空間,造成下述錯誤
對結構體中的指標,初始化和釋放,遇到堆損壞問題(附連結點選開啟連結)點選開啟連結) out_defect.texturing = (TEXTURING *)malloc(sizeof(TEXTURING
cgo傳遞golang slice, 以及使用二級指標獲取值
背景: 在golang中呼叫c函式時,會通過slice傳遞一組數;以及想通過二級指標引用獲取c中的變數值,這樣就不用再c中單獨定義變數,有可能還有手動釋放變數。 示例 package main /* #include <stdio.h> int loop(int**
【VUE】Mac下vue 開發環境搭建,以及目錄結構
1 安裝Node.js 參看 node.js環境安裝 http://www.cnblogs.com/richerdyoung/p/7265786.html 2 安裝淘寶映象 sudo npm ins