在 risc-v 中,beq 指令有 12 位imm[12:1].
PC相對尋址是Target address = PC immediate x 2
它說乘以的原因2是半字指令。
所以,我認為立即值可以代表的范圍[-2^12 ~ 2^12-2],
因為里面的隱藏位imm[0] == 0。
乘以 2 使范圍為[-2^13 ~ 2^13-2]。
所以,當我們考慮 2 位元組增量指令時,分支可以達到
-2^12 ~ 2^12-2
并且在 4 位元組增量指令中,分支可以達到
-2^11 ~ 2^11-2.
但是在 risc-v org 第 29 頁https://riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf,
它說條件分支范圍是-4KiB ~ 4KiB,
這意味著-2^10 ~ 2^10在 32 位指令中。
Q1。在PC相對尋址中,我們在計算中使用13位結果(隱藏0位)是否正確?
Q2。如果正確,如何計算分支指令的范圍?
uj5u.com熱心網友回復:
Q1。在PC相對尋址中,我們在計算中使用13位結果(隱藏0位)是否正確?
是的,正如您所注意到的,處理器使用的公式是
Target address = PC of the branch instruction immediate x 2
x2 重新引入了已知為零的第 13 位,因此在編碼程序中被剝離。
Q2。如果正確,如何計算分支指令的范圍?
你有正確的想法。
編碼的立即數是 12 位寬,因此添加到 PC 的值是 13 位寬(立即數 x 2)。立即數是有符號欄位。
最大立即數是正數,是一個 0 位,后跟 11 位 1,即 2047(又名 0x7FF 或 2^11-1),最小立即數是負數,是一個 1 位(符號)后跟 11 0 的位,即 -2048(又名 0x800 或 -2^11)。
因此,最大前向范圍是 0 位,后跟 11 位 1,然后是 1 位 0,即 4094(又名 0xFFE 或 2^12-2)。
雖然最大向后范圍是 1 位,后跟 12 位 0,即 -4096(也就是 0x1000(13 位)或 -2^12)。
讓我們注意,在可位元組尋址的機器上,通常用位元組來表示范圍。指令地址是位元組地址(例如,即使所有指令都是相同的 32 位大小)。所以(位元組)范圍是-4096 .. 4094——這些是可以到達的指令地址。
但是,如果您想考慮可以達到多少條 16 位指令,我們會將該位元組范圍分成兩半,即 -2048 .. 2047,如果考慮可以達到多少條 32 位指令,我們將除以該位元組范圍為四分之一,所以 -1024 .. 1023.5 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514008.html
標籤:部件范围riscv立即数
上一篇:裝配中的邊界檢查是什么樣的?
