编辑“︁
RISC-V
”︁(章节)
跳转到导航
跳转到搜索
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
=== 記憶體存取 === 就像許多的 RISC 一樣,RISC-V 屬於[[載入-儲存架構]],只有 load 與 store 指令可以存取記憶體。 Load 和 Store 指令可以直接使用程式碼中的常數、在堆疊中的本地變數、或是資料結構中的內容。定址的方式是使用基底暫存器與 12-bit 的 signed 相對地址 (± 2KB)。如果基底暫存器是 0,則資料或是常數可以在低位址,或是高位址(負的相對地址,導致繞回到高的記憶體地址。比方說 ROM 的記憶體地址)。 記憶體的定址單位是 8-bit 的 byte,以 little-endian 存放在記憶體。Load 與 Store 支援的資料長度從 8-bit 到電腦的 word 大小。記憶體存取並不需要對齊到 word 的大小,不過如果有對齊的話,可以增加效能。這項功能可以減小程式碼大小,而且透過軟體的模擬,還可以簡化硬體的設計(會觸發一個「對齊失敗」的中斷)。 和其他類似成功的電腦一樣,RISC-V 也是 little-endian。這稍稍降低了複雜度與成本,因為所有大小的 word 的讀取都遵循一樣的順序。舉例來說,RISC-V 的指令集都是從最低位址的 byte 開始解碼。RISC-V 的規格書保留了實作 big-endian 的可能性。 如同許多的 RISC 指令集一樣,RISC-V 並沒有可以「寫入多個暫存器」的定址模式。比方說:不支援 auto-incrementing(像是 {{code|*ptr++}} 就無法使用一個指令完成,而必須拆解成「一個 load 指令」及「一個 {{code|ADDI}} 指令」。) RISC-V 管理 CPU 與 [[线程|thread]] 之間的共用記憶體的方式是確保在單一的 thread 當中,記憶體存取指令的執行順序永遠是遵照原本的編譯順序。不過在不同的 thread 以及在 I/O 裝置之間,RISC-V 不保證存取的順序──除非有像 {{code|FENCE}} 這樣的指令出現。 {{code|FENCE}} 保證在其之前的執行結果,一定會被其後的 thread 或 I/O 裝置看到。{{code|FENCE}} 有 8-bit 可以分別指定 memory read/write 與 I/O read/write 的各種組合順序。透過這些組合,{{code|FENCE}} 可以保證記憶體與 memory-mapped I/O 之間的執行順序。比方說:其中一個組合是可以在不影響 I/O 運算的情況下,只保證記憶體的讀取和寫入順序。也就是說,如果 I/O 運算可以和記憶體同時執行的話,{{code|FENCE}} 不會強迫他們之間要互相等待。單一 CPU 上執行單一 thread 的情況下,可以把 {{code|FENCE}} 視作 {{code|NOP}} 指令。 有些 RISC CPUs(例如:MIPS、PowerPC、DLX、Berkeley's RISC-I)在 Load/Save 指令當中使用 16-bit 位移。使用 load upper word 指令來設定最高的 16-bit。這讓最高的 16-bit 資料可以很容易被設定,而不需要位移指令。然而,大部分使用 load upper word 的時機都是為了要載入一個常數(比如:地址)。RISC-V 則是使用類似 SPARC 12-bit 與 20-bit 的設計,而 RISC-V 所採用的 12-bit 設計可以讓指令更小。也就是說,這使得 32-bit 的 load/store 指令,就算需要在 32 個暫存器(需要 5-bit 定址)當中選兩個來用(一共 10-bit),還是有足夠的 bit 數目來支援 RISC-V 的可變長度指令編碼 (variable-length instruction coding)。 注:請參考 32-bit 的 I-type 指令格式,就會發現這個 12-bit 位移比 16-bit 來得優異的地方。這使得 32-bit 的空間當中,扣掉 12-bit 的常數值,以及最低的兩個 bit 為 11(表示這是一個 32-bit 長的指令),再扣掉兩個 5-bit 的暫存器位址,還有將近 8-bit 的空間可以留給 opcode 及 func3 。如果是使用 16-bit immediate 的話,會使得空間不夠放下兩個 5-bit 的暫存器位址。舉例來說,{{code|SLLI Rd, Rs, immediate}} (Shift Left Logical Immediate) 將會被迫拆解成兩個指令來完成:{{code|LDR Ri, immediate; SLLI Rd, Rs, Ri}}。
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息